function parseTransformSVG(/* prop */_, v) {
    /** @type {KUTE.transformSVGObject} */
    var svgTransformObject = {};

    // by default the transformOrigin is "50% 50%" of the shape box
    var bb = this.element.getBBox();
    var cx = bb.x + bb.width / 2;
    var cy = bb.y + bb.height / 2;

    var origin = this._transformOrigin;
    var translation;

    if (typeof (origin) !== 'undefined') {
      origin = origin instanceof Array ? origin : origin.split(/\s/);
    } else {
      origin = [cx, cy];
    }

    origin[0] = typeof origin[0] === 'number' ? origin[0] : parseStringOrigin(origin[0], bb);
    origin[1] = typeof origin[1] === 'number' ? origin[1] : parseStringOrigin(origin[1], bb);

    svgTransformObject.origin = origin;

    // populate the valuesStart and / or valuesEnd
    Object.keys(v).forEach(function (i) {
      var assign;

      if (i === 'rotate') {
        if (typeof v[i] === 'number') {
          svgTransformObject[i] = v[i];
        } else if (v[i] instanceof Array) {
          (assign = v[i], svgTransformObject[i] = assign[0]);
        } else {
          svgTransformObject[i] = v[i].split(/\s/)[0] * 1;
        }
      } else if (i === 'translate') {
        if (v[i] instanceof Array) {
          translation = v[i];
        } else if (/,|\s/.test(v[i])) {
          translation = v[i].split(',');
        } else {
          translation = [v[i], 0];
        }
        svgTransformObject[i] = [translation[0] * 1 || 0, translation[1] * 1 || 0];
      } else if (/skew/.test(i)) {
        svgTransformObject[i] = v[i] * 1 || 0;
      } else if (i === 'scale') {
        svgTransformObject[i] = parseFloat(v[i]) || 1;
      }
    });

    return svgTransformObject;
  }
Returns the SVG transform tween object.
@param {string} _ property name
@param {Object<string, (string | number)>} v property value object
@returns {KUTE.transformSVGObject} the SVG transform tween object