spiritjs
Version:
The animation toolkit for the web
229 lines (219 loc) • 7.58 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = void 0;
var _keyframes = _interopRequireDefault(require("./keyframes"));
var _utils = require("../utils");
var _emitter = require("../utils/emitter");
var _events = require("../utils/events");
var _polyfill = require("../utils/polyfill");
var _dec, _dec2, _class, _class2;
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer && (Object.defineProperty(i, e, a), a = null), a; }
/**
* -------------------------------------------
* Single Property.
*
* @example
*
* {
* x: {
* "0.1s": { value: 10, ease: null },
* "0.2s": { value: 0, ease: null },
* "0.3s": { value: 100, ease: "Power3.easeOut" },
* }
* }
*
* @fires Prop#change
* @fires Prop#change:name
* @fires Prop#change:keyframes
* @fires Prop#change:keyframes:list
* @fires Prop#change:keyframe
* @fires Prop#change:keyframe:time
* @fires Prop#change:keyframe:value
* @fires Prop#change:keyframe:ease
* @fires Prop#add:keyframe
* @fires Prop#remove:keyframe
*
* -------------------------------------------
*/
var Prop = (_dec = (0, _emitter.emitChange)('name', null, [{
validator: function validator(val) {
return typeof val === 'string';
},
message: 'Name must be a string'
}, {
validator: function validator(val) {
return !/^\d+\.?\d*?$/.test(val);
},
message: 'Name must be a string'
}]), _dec2 = (0, _emitter.emitChange)(), _dec(_class = (_class2 = /*#__PURE__*/function (_Emitter) {
/**
* Property.
*
* @param {string} name
* @param {object|Keyframes|Array} keyframes
*/
function Prop(name, keyframes) {
var _this;
if (keyframes === void 0) {
keyframes = new _keyframes["default"]();
}
_this = _Emitter.call(this) || this;
_this._keyframes = null;
_this._list = null;
if (!(keyframes instanceof _keyframes["default"])) {
keyframes = new _keyframes["default"](keyframes);
}
name = name || null;
Object.assign(_this, {
name: name,
keyframes: keyframes
});
return _this;
}
/**
* Get next property (linked list)
*
* @returns {Prop|null}
*/
_inheritsLoose(Prop, _Emitter);
var _proto = Prop.prototype;
_proto.next = function next() {
return this._next;
}
/**
* Get previous property (linked list)
*
* @returns {Prop|null}
*/;
_proto.prev = function prev() {
return this._prev;
}
/**
* Get the list where this prop is added to
*
* @returns {Props|null}
*/;
/**
* Bubble events from keyframes
*/
_proto.setupBubbleEvents = function setupBubbleEvents() {
var _this2 = this;
if (this._keyframes instanceof _keyframes["default"]) {
this._keyframes.removeAllListeners();
var evt = function evt(from, to) {
_this2._keyframes.on(from, _utils.events.bubbleEvent(to, _this2));
};
evt('change:list', 'change:keyframes:list');
evt('change', 'change:keyframe');
evt('change:time', 'change:keyframe:time');
evt('change:value', 'change:keyframe:value');
evt('change:ease', 'change:keyframe:ease');
evt('add', 'add:keyframe');
evt('remove', 'remove:keyframe');
}
}
/**
* Convert Prop to readable object
*
* @param {boolean} ignoreEval
* @example { x: { "10.5s": { value: 100, ease: "Power2.easeOut" } } }
* @returns {object}
*/;
_proto.toObject = function toObject(ignoreEval) {
var _ref;
if (ignoreEval === void 0) {
ignoreEval = false;
}
var keyframes = this.keyframes ? this.keyframes.toObject(ignoreEval) : {};
return _ref = {}, _ref[this.name] = keyframes, _ref;
}
/**
* Determine if this property is a CSS transform
*
* @returns {boolean}
*/;
_proto.isCSSTransform = function isCSSTransform() {
return (0, _polyfill.includes)(['x', 'y', 'z', 'rotation', 'rotationZ', 'rotationX', 'rotationY', 'skewX', 'skewY', 'scale', 'scaleX', 'scaleY'], this.name);
}
/**
* Destroy.
* Clear events
*/;
_proto.destroy = function destroy() {
if (this._keyframes) {
this._keyframes.destroy();
}
this.removeAllListeners();
};
return _createClass(Prop, [{
key: "list",
get: function get() {
return this._list;
}
/**
* Get keyframes
*
* @returns {Keyframes|object|Array}
*/
}, {
key: "keyframes",
get: function get() {
return this._keyframes;
}
/**
* Set keyframes
*
* @param {Keyframes|object|Array} kf
*/,
set: function set(kf) {
if (!(kf instanceof _keyframes["default"])) {
kf = new _keyframes["default"](kf);
}
var mappings = [];
if (this._keyframes) {
mappings = this._keyframes.mappings;
this._keyframes.removeAllListeners();
this._keyframes.clear();
}
this._keyframes = kf;
this._keyframes.mappings = mappings;
this.setupBubbleEvents();
}
}]);
}(_events.Emitter), (_applyDecoratedDescriptor(_class2.prototype, "keyframes", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "keyframes"), _class2.prototype)), _class2)) || _class);
/**
* Create a valid Prop from object
*
* @param {object} obj
* @returns {Prop}
*/
Prop.fromObject = function (obj) {
if (!_utils.is.isObject(obj)) {
throw new Error('Object is invalid');
}
var keys = Object.keys(obj);
if (keys.length === 0) {
throw new Error('Object is invalid');
}
for (var i in obj) {
if (!_utils.is.isObject(obj[i])) {
throw new Error('Object is invalid');
}
}
var p = keys[0];
return new Prop(p, obj[p]);
};
/**
* Prop Events
*
* @type {Array}
*/
Prop.Events = ['change', 'change:name', 'change:keyframes', 'change:keyframes:list', 'change:keyframe', 'change:keyframe:time', 'change:keyframe:value', 'change:keyframe:ease', 'add:keyframe', 'remove:keyframe'];
var _default = exports["default"] = Prop;