UNPKG

spiritjs

Version:

The animation toolkit for the web

229 lines (219 loc) 7.58 kB
"use strict"; 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;