{"version":3,"file":"scene.cjs.js","sources":["../src/easing.ts","../src/consts.ts","../src/EventTrigger.ts","../src/PropertyObject.ts","../src/utils/property.ts","../src/utils.ts","../src/Animator.ts","../src/Frame.ts","../src/utils/dot.ts","../src/SceneItem.ts","../src/Scene.ts","../src/presets.ts","../src/index.umd.ts"],"sourcesContent":["import { EasingFunction } from \"./types\";\n\nfunction cubic(y1: number, y2: number, t: number) {\n const t2 = 1 - t;\n\n // Bezier Curve Formula\n return t * t * t + 3 * t * t * t2 * y2 + 3 * t * t2 * t2 * y1;\n}\nfunction solveFromX(x1: number, x2: number, x: number) {\n // x 0 ~ 1\n // t 0 ~ 1\n let t = x;\n let solveX = x;\n let dx = 1;\n\n while (Math.abs(dx) > 1 / 1000) {\n // 예상 t초에 의한 _x값\n solveX = cubic(x1, x2, t);\n dx = solveX - x;\n // 차이가 미세하면 그 값을 t로 지정\n if (Math.abs(dx) < 1 / 1000) {\n return t;\n }\n t -= dx / 2;\n }\n return t;\n}\n/**\n * @namespace easing\n */\n/**\n* Cubic Bezier curve.\n* @memberof easing\n* @func bezier\n* @param {number} [x1] - point1's x\n* @param {number} [y1] - point1's y\n* @param {number} [x2] - point2's x\n* @param {number} [y2] - point2's y\n* @return {function} the curve function\n* @example\nimport {bezier} from \"scenejs\";\nScene.bezier(0, 0, 1, 1) // LINEAR\nScene.bezier(0.25, 0.1, 0.25, 1) // EASE\n*/\nexport function bezier(x1: number, y1: number, x2: number, y2: number) {\n /*\n\t\tx = f(t)\n\t\tcalculate inverse function by x\n\t\tt = f-1(x)\n\t*/\n const func: EasingFunction = (x: number) => {\n const t = solveFromX(x1, x2, Math.max(Math.min(1, x), 0));\n\n return cubic(y1, y2, t);\n };\n\n func.easingName = `cubic-bezier(${x1},${y1},${x2},${y2})`;\n return func;\n}\n/**\n* Specifies a stepping function\n* @see {@link https://www.w3schools.com/cssref/css3_pr_animation-timing-function.asp|CSS3 Timing Function}\n* @memberof easing\n* @func steps\n* @param {number} count - point1's x\n* @param {\"start\" | \"end\"} postion - point1's y\n* @return {function} the curve function\n* @example\nimport {steps} from \"scenejs\";\nScene.steps(1, \"start\") // Scene.STEP_START\nScene.steps(1, \"end\") // Scene.STEP_END\n*/\nexport function steps(count: number, position: \"start\" | \"end\") {\n const func: EasingFunction = (time: number) => {\n const level = 1 / count;\n\n if (time >= 1) {\n return 1;\n }\n return (position === \"start\" ? level : 0) + Math.floor(time / level) * level;\n };\n\n func.easingName = `steps(${count}, ${position})`;\n\n return func;\n}\n\n/**\n* Equivalent to steps(1, start)\n* @memberof easing\n* @name STEP_START\n* @static\n* @type {function}\n* @example\nimport {STEP_START} from \"scenejs\";\nScene.STEP_START // steps(1, start)\n*/\nexport const STEP_START = /*#__PURE__#*/steps(1, \"start\");\n/**\n* Equivalent to steps(1, end)\n* @memberof easing\n* @name STEP_END\n* @static\n* @type {function}\n* @example\nimport {STEP_END} from \"scenejs\";\nScene.STEP_END // steps(1, end)\n*/\nexport const STEP_END = /*#__PURE__#*/steps(1, \"end\");\n/**\n* Linear Speed (0, 0, 1, 1)\n* @memberof easing\n* @name LINEAR\n* @static\n* @type {function}\n* @example\nimport {LINEAR} from \"scenejs\";\nScene.LINEAR\n*/\nexport const LINEAR = /*#__PURE__#*/bezier(0, 0, 1, 1);\n/**\n* Ease Speed (0.25, 0.1, 0.25, 1)\n* @memberof easing\n* @name EASE\n* @static\n* @type {function}\n* @example\nimport {EASE} from \"scenejs\";\nScene.EASE\n*/\nexport const EASE = /*#__PURE__#*/bezier(0.25, 0.1, 0.25, 1);\n/**\n* Ease In Speed (0.42, 0, 1, 1)\n* @memberof easing\n* @name EASE_IN\n* @static\n* @type {function}\n* @example\nimport {EASE_IN} from \"scenejs\";\nScene.EASE_IN\n*/\nexport const EASE_IN = /*#__PURE__#*/bezier(0.42, 0, 1, 1);\n/**\n* Ease Out Speed (0, 0, 0.58, 1)\n* @memberof easing\n* @name EASE_OUT\n* @static\n* @type {function}\n* @example\nimport {EASE_OUT} from \"scenejs\";\nScene.EASE_OUT\n*/\nexport const EASE_OUT = /*#__PURE__#*/bezier(0, 0, 0.58, 1);\n/**\n* Ease In Out Speed (0.42, 0, 0.58, 1)\n* @memberof easing\n* @name EASE_IN_OUT\n* @static\n* @type {function}\n* @example\nimport {EASE_IN_OUT} from \"scenejs\";\nScene.EASE_IN_OUT\n*/\nexport const EASE_IN_OUT = /*#__PURE__#*/bezier(0.42, 0, 0.58, 1);\n","import { IObject } from \"@daybrush/utils\";\nimport { RoleObject, OptionType, EventType, EasingFunction } from \"./types\";\nimport { EASE, EASE_IN, EASE_IN_OUT, LINEAR, EASE_OUT, STEP_START, STEP_END } from \"./easing\";\n\nexport const PREFIX = \"__SCENEJS_\";\nexport const DATA_SCENE_ID = \"data-scene-id\";\nexport const TIMING_FUNCTION = \"animation-timing-function\";\nexport const ROLES: RoleObject = { transform: {}, filter: {}, attribute: {}, html: true };\nexport const ALIAS: IObject = { easing: [TIMING_FUNCTION] };\nexport const FIXED = { [TIMING_FUNCTION]: true, contents: true, html: true };\nexport const MAXIMUM = 1000000;\nexport const THRESHOLD = 0.000001;\n\nexport const DURATION = \"duration\";\nexport const FILL_MODE = \"fillMode\";\nexport const DIRECTION = \"direction\";\nexport const ITERATION_COUNT = \"iterationCount\";\nexport const DELAY = \"delay\";\nexport const EASING = \"easing\";\nexport const PLAY_SPEED = \"playSpeed\";\nexport const EASING_NAME = \"easingName\";\nexport const ITERATION_TIME = \"iterationTime\";\nexport const PAUSED = \"paused\";\nexport const ENDED = \"ended\";\nexport const TIMEUPDATE = \"timeupdate\";\nexport const ANIMATE = \"animate\";\nexport const PLAY = \"play\";\nexport const RUNNING = \"running\";\nexport const ITERATION = \"iteration\";\nexport const START_ANIMATION = \"startAnimation\";\nexport const PAUSE_ANIMATION = \"pauseAnimation\";\nexport const ALTERNATE = \"alternate\";\nexport const REVERSE = \"reverse\";\nexport const ALTERNATE_REVERSE = \"alternate-reverse\";\nexport const NORMAL = \"normal\";\nexport const INFINITE = \"infinite\";\nexport const PLAY_STATE = \"playState\";\nexport const PLAY_CSS = \"playCSS\";\nexport const PREV_TIME = \"prevTime\";\nexport const TICK_TIME = \"tickTime\";\nexport const CURRENT_TIME = \"currentTime\";\nexport const SELECTOR = \"selector\";\nexport const TRANSFORM_NAME = \"transform\";\nexport const EASINGS = {\n \"linear\": LINEAR,\n \"ease\": EASE,\n \"ease-in\": EASE_IN,\n \"ease-out\": EASE_OUT,\n \"ease-in-out\": EASE_IN_OUT,\n \"step-start\": STEP_START,\n \"step-end\": STEP_END,\n};\nexport const NAME_SEPARATOR = \"_///_\";\n/**\n* option name list\n* @name Scene.OPTIONS\n* @memberof Scene\n* @static\n* @type {$ts:OptionType}\n* @example\n* Scene.OPTIONS // [\"duration\", \"fillMode\", \"direction\", \"iterationCount\", \"delay\", \"easing\", \"playSpeed\"]\n*/\nexport const OPTIONS: OptionType = [DURATION, FILL_MODE, DIRECTION, ITERATION_COUNT, DELAY, EASING, PLAY_SPEED];\n\n/**\n* Event name list\n* @name Scene.EVENTS\n* @memberof Scene\n* @static\n* @type {$ts:EventType}\n* @example\n* Scene.EVENTS // [\"paused\", \"ended\", \"timeupdate\", \"animate\", \"play\", \"iteration\"];\n*/\nexport const EVENTS: EventType = [PAUSED, ENDED, TIMEUPDATE, ANIMATE, PLAY, ITERATION];\n","import { isObject, isArray, toArray } from \"@daybrush/utils\";\nimport { CallbackType, EventParameter } from \"./types\";\n\n/**\n* attach and trigger event handlers.\n*/\nclass EventTrigger {\n public events: { [name: string]: CallbackType[] };\n /**\n * @example\n const et = new Scene.EventTrigger();\n const scene = new Scene();\n\n scene.on(\"call\", e => {\n console.log(e.param);\n });\n et.on(\"call\", e => {\n console.log(e.param);\n });\n scene.trigger(\"call\", {param: 1});\n et.trigger(\"call\", {param: 1});\n */\n constructor() {\n this.events = {};\n }\n public _on(name: string | EventParameter, callback?: CallbackType | CallbackType[], once?: boolean) {\n const events = this.events;\n\n if (isObject(name)) {\n for (const n in name) {\n this._on(n, name[n], once);\n }\n return;\n }\n if (!(name in events)) {\n events[name] = [];\n }\n if (!callback) {\n return;\n }\n if (isArray(callback)) {\n callback.forEach(func => this._on(name, func, once));\n return;\n }\n events[name].push(once ? function callback2(...args) {\n callback(...args);\n this.off(name, callback2);\n } : callback);\n }\n /**\n * Attach an event handler function for one or more events to target\n * @param - event's name\n * @param - function to execute when the event is triggered.\n * @return {EventTrigger} An Instance itself.\n * @example\n target.on(\"animate\", function() {\n console.log(\"animate\");\n });\n\n target.trigger(\"animate\");\n\n */\n public on(name: string | EventParameter, callback?: CallbackType | CallbackType[]) {\n this._on(name, callback);\n return this;\n }\n /**\n * Dettach an event handler function for one or more events to target\n * @param - event's name\n * @param - function to execute when the event is triggered.\n * @return {EventTrigger} An Instance itself.\n * @example\n const callback = function() {\n console.log(\"animate\");\n };\n target.on(\"animate\", callback);\n\n target.off(\"animate\", callback);\n target.off(\"animate\");\n\n */\n public off(name?: string, callback?: CallbackType) {\n if (!name) {\n this.events = {};\n } else if (!callback) {\n this.events[name] = [];\n } else {\n const callbacks = this.events[name];\n\n if (!callbacks) {\n return this;\n }\n const index = callbacks.indexOf(callback);\n\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n return this;\n }\n /**\n * execute event handler\n * @param - event's name\n * @param - event handler's additional parameter\n * @return {EventTrigger} An Instance itself.\n * @example\n target.on(\"animate\", function(a1, a2) {\n console.log(\"animate\", a1, a2);\n });\n\n target.trigger(\"animate\", [1, 2]); // log => \"animate\", 1, 2\n\n */\n public trigger(name: string, ...data: any[]) {\n const events = this.events;\n\n if (!(name in events)) {\n return this;\n }\n\n const args = data || [];\n\n !args[0] && (args[0] = {});\n const event = events[name];\n const target = args[0];\n\n target.type = name;\n target.currentTarget = this;\n !target.target && (target.target = this);\n toArray(events[name]).forEach(callback => {\n callback.apply(this, data);\n });\n\n return this;\n }\n public once(name: string | EventParameter, callback?: CallbackType | CallbackType[]) {\n this._on(name, callback, true);\n return this;\n }\n}\nexport default EventTrigger;\n","import { isString } from \"@daybrush/utils\";\nimport { PropertyObjectState } from \"./types\";\n\n/**\n* Make string, array to PropertyObject for the dot product\n*/\nclass PropertyObject implements PropertyObjectState {\n public value: any[];\n public prefix: string = \"\";\n public suffix: string = \"\";\n public model: string = \"\";\n public type: string = \"\";\n public separator: string = \",\";\n\n /**\n * @param - This value is in the array format.\n * @param - options\n * @example\n var obj = new PropertyObject([100,100,100,0.5], {\n \"separator\" : \",\",\n \"prefix\" : \"rgba(\",\n \"suffix\" : \")\"\n });\n */\n constructor(value: string | any[], options?: Partial) {\n options && this.setOptions(options);\n this.value = isString(value) ? value.split(this.separator) : value;\n }\n public setOptions(newOptions: Partial) {\n for (const name in newOptions) {\n this[name as keyof PropertyObjectState] = newOptions[name as keyof PropertyObjectState];\n }\n return this;\n }\n /**\n * the number of values.\n * @example\n const obj1 = new PropertyObject(\"1,2,3\", \",\");\n\n console.log(obj1.length);\n // 3\n */\n public size() {\n return this.value.length;\n }\n /**\n * retrieve one of values at the index\n * @param {Number} index - index\n * @return {Object} one of values at the index\n * @example\n const obj1 = new PropertyObject(\"1,2,3\", \",\");\n\n console.log(obj1.get(0));\n // 1\n */\n public get(index: number) {\n return this.value[index];\n }\n /**\n * Set the value at that index\n * @param {Number} index - index\n * @param {Object} value - text, a number, object to set\n * @return {PropertyObject} An instance itself\n * @example\n const obj1 = new PropertyObject(\"1,2,3\", \",\");\n obj1.set(0, 2);\n console.log(obj1.toValue());\n // 2,2,3\n */\n public set(index: number, value: any) {\n this.value[index] = value;\n return this;\n }\n /**\n * create a copy of an instance itself.\n * @return {PropertyObject} clone\n * @example\n const obj1 = new PropertyObject(\"1,2,3\", \",\");\n const obj2 = obj1.clone();\n */\n public clone(): PropertyObject {\n const {\n separator,\n prefix,\n suffix,\n model,\n type,\n } = this;\n const arr = this.value.map(v => ((v instanceof PropertyObject) ? v.clone() : v));\n return new PropertyObject(arr, {\n separator,\n prefix,\n suffix,\n model,\n type,\n });\n }\n /**\n * Make Property Object to String\n * @return {String} Make Property Object to String\n * @example\n //rgba(100, 100, 100, 0.5)\n const obj4 = new PropertyObject([100,100,100,0.5], {\n \"separator\" : \",\",\n \"prefix\" : \"rgba(\",\n \"suffix\" : \")\",\n });\n console.log(obj4.toValue());\n // \"rgba(100,100,100,0.5)\"\n */\n public toValue(): string {\n return this.prefix + this.join() + this.suffix;\n }\n /**\n * Make Property Object's array to String\n * @return {String} Join the elements of an array into a string\n * @example\n //rgba(100, 100, 100, 0.5)\n var obj4 = new PropertyObject([100,100,100,0.5], {\n \"separator\" : \",\",\n \"prefix\" : \"rgba(\",\n \"suffix\" : \")\"\n });\n obj4.join(); // => \"100,100,100,0.5\"\n */\n public join() {\n return this.value.map(v => ((v instanceof PropertyObject) ? v.toValue() : v)).join(this.separator);\n }\n /**\n * executes a provided function once per array element.\n * @param {Function} callback - Function to execute for each element, taking three arguments\n * @param {All} [callback.currentValue] The current element being processed in the array.\n * @param {Number} [callback.index] The index of the current element being processed in the array.\n * @param {Array} [callback.array] the array.\n * @return {PropertyObject} An instance itself\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach|MDN Array.forEach()} reference to MDN document.\n * @example\n //rgba(100, 100, 100, 0.5)\n var obj4 = new PropertyObject([100,100,100,0.5], {\n \"separator\" : \",\",\n \"prefix\" : \"rgba(\",\n \"suffix\" : \")\"\n });\n\n obj4.forEach(t => {\n console.log(t);\n }); // => \"100,100,100,0.5\"\n */\n public forEach(func: (value?: any, index?: number, array?: any[]) => void) {\n this.value.forEach(func);\n return this;\n }\n}\nexport default PropertyObject;\n","/**\n* @namespace\n* @name Property\n*/\n\nimport PropertyObject from \"../PropertyObject\";\nimport {\n COLOR_MODELS, isString,\n splitComma, splitSpace, stringToRGBA,\n RGBA, splitBracket, IObject, isArray, splitText\n} from \"@daybrush/utils\";\nimport { NameType } from \"../types\";\n\nexport function splitStyle(str: string) {\n\n const properties = splitText(str, \";\");\n const obj: IObject = {};\n let length = properties.length;\n\n for (let i = 0; i < length; ++i) {\n const matches = splitText(properties[i], \":\");\n\n if (matches.length < 2 || !matches[1]) {\n --length;\n continue;\n }\n obj[matches[0].trim()] = toPropertyObject(matches[1].trim());\n }\n return { styles: obj, length };\n}\n/**\n* convert array to PropertyObject[type=color].\n* default model \"rgba\"\n* @memberof Property\n* @function arrayToColorObject\n* @param {Array|PropertyObject} value ex) [0, 0, 0, 1]\n* @return {PropertyObject} PropertyObject[type=color]\n* @example\narrayToColorObject([0, 0, 0])\n// => PropertyObject(type=\"color\", model=\"rgba\", value=[0, 0, 0, 1], separator=\",\")\n*/\nexport function arrayToColorObject(arr: number[]) {\n const model = RGBA;\n\n if (arr.length === 3) {\n arr[3] = 1;\n }\n return new PropertyObject(arr, {\n model,\n separator: \",\",\n type: \"color\",\n prefix: `${model}(`,\n suffix: \")\",\n });\n}\n/**\n* convert text with parentheses to object.\n* @memberof Property\n* @function stringToBracketObject\n* @param {String} value ex) \"rgba(0,0,0,1)\"\n* @return {PropertyObject} PropertyObject\n* @example\nstringToBracketObject(\"abcde(0, 0, 0,1)\")\n// => PropertyObject(model=\"abcde\", value=[0, 0, 0,1], separator=\",\")\n*/\nexport function stringToBracketObject(text: string) {\n // [prefix, value, other]\n const { prefix: model, value, suffix: afterModel } = splitBracket(text);\n\n if (typeof value === \"undefined\") {\n return text;\n }\n if (COLOR_MODELS.indexOf(model) > -1) {\n return arrayToColorObject(stringToRGBA(text));\n }\n // divide comma(,)\n const obj = toPropertyObject(value, model);\n\n let arr = [value];\n let separator = \",\";\n let prefix = `${model}(`;\n let suffix = `)${afterModel}`;\n\n if (obj instanceof PropertyObject) {\n separator = obj.separator;\n arr = obj.value;\n prefix += obj.prefix;\n suffix = obj.suffix + suffix;\n }\n return new PropertyObject(arr, {\n separator,\n model,\n prefix,\n suffix,\n });\n}\n\nexport function arrayToPropertyObject(arr: any[], separator: string) {\n return new PropertyObject(arr, {\n type: \"array\",\n separator,\n });\n}\n\n/**\n* convert text with parentheses to PropertyObject[type=color].\n* If the values are not RGBA model, change them RGBA mdoel.\n* @memberof Property\n* @function stringToColorObject\n* @param {String|PropertyObject} value ex) \"rgba(0,0,0,1)\"\n* @return {PropertyObject} PropertyObject[type=color]\n* @example\nstringToColorObject(\"rgba(0, 0, 0,1)\")\n// => PropertyObject(type=\"color\", model=\"rgba\", value=[0, 0, 0,1], separator=\",\")\n*/\nexport function stringToColorObject(value: string): string | PropertyObject {\n const result = stringToRGBA(value);\n\n return result ? arrayToColorObject(result) : value;\n}\n/**\n* convert CSS Value to PropertyObject\n* @memberof Property\n* @function toPropertyObject\n* @param {String} value it's text contains the array.\n* @return {String} Not Array, Not Separator, Only Number & Unit\n* @return {PropertyObject} Array with Separator.\n* @see referenced regular expression {@link http://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex}\n* @example\ntoPropertyObject(\"1px solid #000\");\n// => PropertyObject([\"1px\", \"solid\", rgba(0, 0, 0, 1)])\n*/\nexport function toPropertyObject(value: any[], model?: NameType): PropertyObject;\nexport function toPropertyObject(value: IObject, model?: NameType): IObject;\nexport function toPropertyObject(value: string, model?: NameType): PropertyObject | string;\nexport function toPropertyObject(value: string | IObject | any[], model?: NameType) {\n if (!isString(value)) {\n if (isArray(value)) {\n return arrayToPropertyObject(value, \",\");\n }\n return value;\n }\n let values: any = splitComma(value);\n\n if (values.length > 1) {\n return arrayToPropertyObject(values.map(v => toPropertyObject(v)), \",\");\n }\n values = splitSpace(value);\n\n if (values.length > 1) {\n return arrayToPropertyObject(values.map(v => toPropertyObject(v)), \" \");\n }\n values = /^(['\"])([^'\"]*)(['\"])$/g.exec(value);\n\n if (values && values[1] === values[3]) {\n // Quotes\n return new PropertyObject([toPropertyObject(values[2])], {\n prefix: values[1],\n suffix: values[1],\n });\n } else if (value.indexOf(\"(\") !== -1) {\n // color\n return stringToBracketObject(value);\n } else if (value.charAt(0) === \"#\" && model !== \"url\") {\n return stringToColorObject(value);\n }\n return value;\n}\nexport function toObject(object: PropertyObject, result: IObject = {}) {\n const model = object.model;\n\n if (model) {\n object.setOptions({\n model: \"\",\n suffix: \"\",\n prefix: \"\",\n });\n const value = object.size() > 1 ? object : object.get(0);\n\n result[model] = value;\n } else {\n object.forEach(obj => {\n toObject(obj, result);\n });\n }\n return result;\n}\n","import {\n ROLES, MAXIMUM, FIXED, ALIAS,\n PAUSED, RUNNING, PLAY, ENDED, PREFIX, PLAY_CSS, CURRENT_TIME, START_ANIMATION, EASINGS, NAME_SEPARATOR\n} from \"./consts\";\nimport PropertyObject from \"./PropertyObject\";\nimport Scene from \"./Scene\";\nimport SceneItem from \"./SceneItem\";\nimport {\n isArray, ANIMATION, ARRAY, OBJECT,\n PROPERTY, STRING, NUMBER, IS_WINDOW, IObject, $, document, isObject, addEvent, removeEvent, isString,\n} from \"@daybrush/utils\";\nimport { EasingType, EasingFunction, NameType } from \"./types\";\nimport { toPropertyObject } from \"./utils/property\";\nimport { bezier, steps } from \"./easing\";\n\nexport function isPropertyObject(value: any): value is PropertyObject {\n return value instanceof PropertyObject;\n}\nexport function setAlias(name: string, alias: string[]) {\n ALIAS[name] = alias;\n}\nexport function setRole(names: string[], isProperty?: boolean, isFixedProperty?: boolean) {\n const length = names.length;\n let roles: any = ROLES;\n let fixed: any = FIXED;\n\n for (let i = 0; i < length - 1; ++i) {\n !roles[names[i]] && (roles[names[i]] = {});\n roles = roles[names[i]];\n if (isFixedProperty) {\n !fixed[names[i]] && (fixed[names[i]] = {});\n fixed = fixed[names[i]];\n }\n }\n isFixedProperty && (fixed[names[length - 1]] = true);\n roles[names[length - 1]] = isProperty ? true : {};\n}\nexport function getType(value: any) {\n const type = typeof value;\n\n if (type === OBJECT) {\n if (isArray(value)) {\n return ARRAY;\n } else if (isPropertyObject(value)) {\n return PROPERTY;\n }\n } else if (type === STRING || type === NUMBER) {\n return \"value\";\n }\n return type;\n}\nexport function isPureObject(obj: any): obj is object {\n return isObject(obj) && obj.constructor === Object;\n}\nexport function getNames(names: IObject, stack: string[]) {\n let arr: string[][] = [];\n\n if (isPureObject(names)) {\n for (const name in names) {\n stack.push(name);\n arr = arr.concat(getNames(names[name], stack));\n stack.pop();\n }\n } else {\n arr.push(stack.slice());\n }\n return arr;\n}\nexport function updateFrame(names: IObject, properties: IObject) {\n for (const name in properties) {\n const value = properties[name];\n\n if (!isPureObject(value)) {\n names[name] = true;\n continue;\n }\n if (!isObject(names[name])) {\n names[name] = {};\n }\n updateFrame(names[name], properties[name]);\n }\n return names;\n}\nexport function toFixed(num: number) {\n return Math.round(num * MAXIMUM) / MAXIMUM;\n}\nexport function getValueByNames(\n names: Array,\n properties: IObject, length: number = names.length) {\n let value = properties;\n\n for (let i = 0; i < length; ++i) {\n if (!isObject(value) || value == null) {\n return undefined;\n }\n value = value[names[i]];\n }\n return value;\n}\nexport function isInProperties(roles: IObject, args: NameType[], isCheckTrue?: boolean) {\n const length = args.length;\n let role: any = roles;\n\n if (length === 0) {\n return false;\n }\n for (let i = 0; i < length; ++i) {\n if (role === true) {\n return false;\n }\n role = role[args[i]];\n if (!role || (!isCheckTrue && role === true)) {\n return false;\n }\n }\n return true;\n}\nexport function isRole(args: NameType[], isCheckTrue?: boolean) {\n return isInProperties(ROLES, args, isCheckTrue);\n}\nexport function isFixed(args: NameType[]) {\n return isInProperties(FIXED, args, true);\n}\n\nexport interface IterationInterface {\n currentTime: number;\n iterationCount: number;\n elapsedTime: number;\n}\nexport function setPlayCSS(item: Scene | SceneItem, isActivate: boolean) {\n item.state[PLAY_CSS] = isActivate;\n}\nexport function isPausedCSS(item: Scene | SceneItem) {\n return item.state[PLAY_CSS] && item.isPaused();\n}\nexport function isEndedCSS(item: Scene | SceneItem) {\n return !item.isEnded() && item.state[PLAY_CSS];\n}\n\nexport function makeId(selector?: boolean) {\n for (; ;) {\n const id = `${Math.floor(Math.random() * 10000000)}`;\n\n if (!IS_WINDOW || !selector) {\n return id;\n }\n const checkElement = $(`[data-scene-id=\"${id}\"]`);\n\n if (!checkElement) {\n return id;\n }\n }\n}\nexport function getRealId(item: Scene | SceneItem) {\n return item.getId() || item.setId(makeId(false)).getId();\n}\nexport function toId(text: number | string) {\n return `${text}`.match(/[0-9a-zA-Z]+/g).join(\"\");\n}\nexport function playCSS(\n item: Scene | SceneItem, isExportCSS?: boolean,\n playClassName?: string, properties: object = {}) {\n if (!ANIMATION || item.getPlayState() === RUNNING) {\n return;\n }\n const className = playClassName || START_ANIMATION;\n\n if (isPausedCSS(item)) {\n item.addPlayClass(true, className, properties);\n } else {\n if (item.isEnded()) {\n item.setTime(0);\n }\n isExportCSS && item.exportCSS({ className });\n const el = item.addPlayClass(false, className, properties);\n\n if (!el) {\n return;\n }\n addAnimationEvent(item, el);\n setPlayCSS(item, true);\n }\n item.setPlayState(RUNNING);\n}\n\nexport function addAnimationEvent(item: Scene | SceneItem, el: Element) {\n const state = item.state;\n const duration = item.getDuration();\n const isZeroDuration = !duration || !isFinite(duration);\n const animationend = () => {\n setPlayCSS(item, false);\n item.finish();\n };\n const animationstart = () => {\n item.trigger(PLAY);\n\n addEvent(el, \"animationcancel\", animationend);\n addEvent(el, \"animationend\", animationend);\n addEvent(el, \"animationiteration\", animationiteration);\n };\n item.once(ENDED, () => {\n removeEvent(el, \"animationcancel\", animationend);\n removeEvent(el, \"animationend\", animationend);\n removeEvent(el, \"animationiteration\", animationiteration);\n removeEvent(el, \"animationstart\", animationstart);\n });\n const animationiteration = ({ elapsedTime }: any) => {\n const currentTime = elapsedTime;\n const iterationCount = isZeroDuration ? 0 : (currentTime / duration);\n\n state[CURRENT_TIME] = currentTime;\n item.setIteration(iterationCount);\n };\n addEvent(el, \"animationstart\", animationstart);\n}\n\nexport function getEasing(curveArray: string | number[] | EasingFunction): EasingType {\n let easing: EasingType;\n\n if (isString(curveArray)) {\n if (curveArray in EASINGS) {\n easing = EASINGS[curveArray];\n } else {\n const obj = toPropertyObject(curveArray);\n\n if (isString(obj)) {\n return 0;\n } else {\n if (obj.model === \"cubic-bezier\") {\n curveArray = obj.value.map(v => parseFloat(v));\n easing = bezier(curveArray[0], curveArray[1], curveArray[2], curveArray[3]);\n } else if (obj.model === \"steps\") {\n easing = steps(parseFloat(obj.value[0]), obj.value[1]);\n } else {\n return 0;\n }\n }\n }\n } else if (isArray(curveArray)) {\n easing = bezier(curveArray[0], curveArray[1], curveArray[2], curveArray[3]);\n } else {\n easing = curveArray;\n }\n\n return easing;\n}\n\nexport function getFullName(names: NameType[]) {\n return names.join(NAME_SEPARATOR);\n}\n","import {\n THRESHOLD,\n ALTERNATE, ALTERNATE_REVERSE, REVERSE, INFINITE, NORMAL,\n ITERATION_COUNT, DELAY, FILL_MODE, DIRECTION, PLAY_SPEED,\n DURATION, EASING, ITERATION_TIME, EASING_NAME, PAUSED,\n RUNNING, PLAY, TIMEUPDATE, ENDED, PLAY_STATE, PREV_TIME, TICK_TIME, CURRENT_TIME, ITERATION, OPTIONS, EASINGS\n} from \"./consts\";\nimport EventTrigger from \"./EventTrigger\";\nimport { bezier, steps } from \"./easing\";\nimport { toFixed, getEasing } from \"./utils\";\nimport { splitUnit, isString, camelize, requestAnimationFrame, isArray, cancelAnimationFrame } from \"@daybrush/utils\";\nimport {\n IterationCountType, DirectionType, AnimatorState,\n EasingFunction, FillModeType, PlayStateType, EasingType, AnimatorOptions,\n} from \"./types\";\nimport { toPropertyObject } from \"./utils/property\";\n\nfunction GetterSetter {}>(\n getter: string[], setter: string[], parent: string) {\n return (constructor: T) => {\n const prototype = constructor.prototype;\n\n getter.forEach(name => {\n prototype[camelize(`get ${name}`)] = function() {\n return this[parent][name];\n };\n });\n setter.forEach(name => {\n prototype[camelize(`set ${name}`)] = function(value: any) {\n this[parent][name] = value;\n return this;\n };\n });\n };\n}\nexport function isDirectionReverse(iteration: number, iteraiontCount: IterationCountType, direction: DirectionType) {\n if (direction === REVERSE) {\n return true;\n } else if (iteraiontCount !== INFINITE && iteration === iteraiontCount && iteraiontCount % 1 === 0) {\n return direction === (iteration % 2 >= 1 ? ALTERNATE_REVERSE : ALTERNATE);\n }\n return direction === (iteration % 2 >= 1 ? ALTERNATE : ALTERNATE_REVERSE);\n}\n/**\n* @typedef {Object} AnimatorState The Animator options. Properties used in css animation.\n* @property {number} [duration] The duration property defines how long an animation should take to complete one cycle.\n* @property {\"none\"|\"forwards\"|\"backwards\"|\"both\"} [fillMode] The fillMode property specifies a style for the element when the animation is not playing (before it starts, after it ends, or both).\n* @property {\"infinite\"|number} [iterationCount] The iterationCount property specifies the number of times an animation should be played.\n* @property {array|function} [easing] The easing(timing-function) specifies the speed curve of an animation.\n* @property {number} [delay] The delay property specifies a delay for the start of an animation.\n* @property {\"normal\"|\"reverse\"|\"alternate\"|\"alternate-reverse\"} [direction] The direction property defines whether an animation should be played forwards, backwards or in alternate cycles.\n*/\n\nconst setters = [\"id\", ITERATION_COUNT, DELAY, FILL_MODE,\n DIRECTION, PLAY_SPEED, DURATION, PLAY_SPEED, ITERATION_TIME, PLAY_STATE];\nconst getters = [...setters, EASING, EASING_NAME];\n\n/**\n* play video, animation, the others\n* @extends EventTrigger\n* @see {@link https://www.w3schools.com/css/css3_animations.asp|CSS3 Animation}\n*/\n@GetterSetter(getters, setters, \"state\")\nclass Animator\n extends EventTrigger {\n public state: U;\n private timerId: number = 0;\n\n /**\n * @param - animator's options\n * @example\n const animator = new Animator({\n delay: 2,\n diretion: \"alternate\",\n duration: 2,\n fillMode: \"forwards\",\n iterationCount: 3,\n easing: Scene.easing.EASE,\n });\n */\n constructor(options?: Partial) {\n super();\n this.state = {\n id: \"\",\n easing: 0,\n easingName: \"linear\",\n iterationCount: 1,\n delay: 0,\n fillMode: \"forwards\",\n direction: NORMAL,\n playSpeed: 1,\n currentTime: 0,\n iterationTime: -1,\n iteration: 0,\n tickTime: 0,\n prevTime: 0,\n playState: PAUSED,\n duration: 0,\n } as U;\n this.setOptions(options);\n }\n /**\n * set animator's easing.\n * @param curverArray - The speed curve of an animation.\n * @return {Animator} An instance itself.\n * @example\n animator.({\n delay: 2,\n diretion: \"alternate\",\n duration: 2,\n fillMode: \"forwards\",\n iterationCount: 3,\n easing: Scene.easing.EASE,\n });\n */\n public setEasing(curveArray: string | number[] | EasingFunction): this {\n const easing: EasingType = getEasing(curveArray);\n const easingName = easing && easing[EASING_NAME] || \"linear\";\n const state = this.state;\n\n state[EASING] = easing;\n state[EASING_NAME] = easingName;\n return this;\n }\n /**\n * set animator's options.\n * @see {@link https://www.w3schools.com/css/css3_animations.asp|CSS3 Animation}\n * @param - animator's options\n * @return {Animator} An instance itself.\n * @example\n animator.({\n delay: 2,\n diretion: \"alternate\",\n duration: 2,\n fillMode: \"forwards\",\n iterationCount: 3,\n easing: Scene.eaasing.EASE,\n });\n */\n public setOptions(options: Partial = {}): this {\n for (const name in options) {\n const value = options[name];\n\n if (name === EASING) {\n this.setEasing(value);\n continue;\n } else if (name === DURATION) {\n value && this.setDuration(value);\n continue;\n }\n if (OPTIONS.indexOf(name as any) > -1) {\n this.state[name] = value;\n }\n }\n\n return this;\n }\n /**\n * Get the animator's total duration including delay\n * @return {number} Total duration\n * @example\n animator.getTotalDuration();\n */\n public getTotalDuration(): number {\n return this.getActiveDuration(true);\n }\n /**\n * Get the animator's total duration excluding delay\n * @return {number} Total duration excluding delay\n * @example\n animator.getActiveDuration();\n */\n public getActiveDuration(delay?: boolean): number {\n const state = this.state;\n const count = state[ITERATION_COUNT];\n if (count === INFINITE) {\n return Infinity;\n }\n return (delay ? state[DELAY] : 0) + this.getDuration() * count;\n }\n /**\n * Check if the animator has reached the end.\n * @return {boolean} ended\n * @example\n animator.isEnded(); // true or false\n */\n public isEnded(): boolean {\n if (this.state[TICK_TIME] === 0 && this.state[PLAY_STATE] === PAUSED) {\n return true;\n } else if (this.getTime() < this.getActiveDuration()) {\n return false;\n }\n return true;\n }\n /**\n *Check if the animator is paused:\n * @return {boolean} paused\n * @example\n animator.isPaused(); // true or false\n */\n public isPaused(): boolean {\n return this.state[PLAY_STATE] === PAUSED;\n }\n public start(delay: number = this.state[DELAY]): boolean {\n const state = this.state;\n\n state[PLAY_STATE] = RUNNING;\n if (state[TICK_TIME] >= delay) {\n /**\n * This event is fired when play animator.\n * @event Animator#play\n */\n this.trigger(PLAY);\n return true;\n }\n return false;\n }\n /**\n * play animator\n * @return {Animator} An instance itself.\n */\n public play(toTime?: number) {\n const state = this.state;\n const delay = state[DELAY];\n const currentTime = this.getTime();\n\n state[PLAY_STATE] = RUNNING;\n\n if (this.isEnded() && (currentTime === 0 || currentTime >= this.getActiveDuration())) {\n this.setTime(-delay, true);\n }\n\n this.timerId = requestAnimationFrame((time: number) => {\n state[PREV_TIME] = time;\n this.tick(time, toTime);\n });\n this.start();\n return this;\n }\n /**\n * pause animator\n * @return {Animator} An instance itself.\n */\n public pause(): this {\n const state = this.state;\n\n if (state[PLAY_STATE] !== PAUSED) {\n state[PLAY_STATE] = PAUSED;\n /**\n * This event is fired when animator is paused.\n * @event Animator#paused\n */\n this.trigger(PAUSED);\n }\n cancelAnimationFrame(this.timerId);\n return this;\n }\n /**\n * end animator\n * @return {Animator} An instance itself.\n */\n public finish() {\n this.setTime(0);\n this.state[TICK_TIME] = 0;\n this.end();\n return this;\n }\n /**\n * end animator\n * @return {Animator} An instance itself.\n */\n public end() {\n this.pause();\n /**\n * This event is fired when animator is ended.\n * @event Animator#ended\n */\n this.trigger(ENDED);\n return this;\n }\n /**\n * set currentTime\n * @param {Number|String} time - currentTime\n * @return {Animator} An instance itself.\n * @example\n\n animator.setTime(\"from\"); // 0\n animator.setTime(\"to\"); // 100%\n animator.setTime(\"50%\");\n animator.setTime(10);\n animator.getTime() // 10\n */\n public setTime(time: number | string, isTick?: boolean, isParent?: boolean) {\n const activeDuration = this.getActiveDuration();\n const state = this.state;\n const prevTime = state[TICK_TIME];\n const delay = state[DELAY];\n let currentTime = isTick ? (time as number) : this.getUnitTime(time);\n\n state[TICK_TIME] = delay + currentTime;\n if (currentTime < 0) {\n currentTime = 0;\n } else if (currentTime > activeDuration) {\n currentTime = activeDuration;\n }\n state[CURRENT_TIME] = currentTime;\n this.calculate();\n\n if (isTick && !isParent) {\n const tickTime = state[TICK_TIME];\n\n if (prevTime < delay && time >= 0) {\n this.start(0);\n }\n if (tickTime < prevTime || this.isEnded()) {\n this.end();\n return;\n }\n }\n if (this.isDelay()) {\n return this;\n }\n /**\n * This event is fired when the animator updates the time.\n * @event Animator#timeupdate\n * @param {Object} param The object of data to be sent to an event.\n * @param {Number} param.currentTime The total time that the animator is running.\n * @param {Number} param.time The iteration time during duration that the animator is running.\n * @param {Number} param.iterationCount The iteration count that the animator is running.\n */\n this.trigger(TIMEUPDATE, {\n currentTime,\n time: this.getIterationTime(),\n iterationCount: state[ITERATION],\n });\n\n return this;\n }\n /**\n * Get the animator's current time\n * @return {number} current time\n * @example\n animator.getTime();\n */\n public getTime(): number {\n return this.state[CURRENT_TIME];\n }\n public getUnitTime(time: string | number) {\n if (isString(time)) {\n const duration = this.getDuration() || 100;\n\n if (time === \"from\") {\n return 0;\n } else if (time === \"to\") {\n return duration;\n }\n const { unit, value } = splitUnit(time);\n\n if (unit === \"%\") {\n !this.getDuration() && (this.setDuration(duration));\n return toFixed(parseFloat(time) / 100 * duration);\n } else if (unit === \">\") {\n return value + THRESHOLD;\n } else {\n return value;\n }\n } else {\n return toFixed(time);\n }\n }\n /**\n * Check if the current state of animator is delayed.\n * @return {boolean} check delay state\n */\n public isDelay() {\n const state = this.state;\n const delay = state[DELAY];\n const tickTime = state[TICK_TIME];\n\n return delay > 0 && (tickTime < delay);\n }\n public setIteration(iterationCount: number): this {\n const state = this.state;\n const passIterationCount = Math.floor(iterationCount);\n const maxIterationCount = state[ITERATION_COUNT] === INFINITE ? Infinity : state[ITERATION_COUNT];\n\n if (state[ITERATION] < passIterationCount && passIterationCount < maxIterationCount) {\n /**\n * The event is fired when an iteration of an animation ends.\n * @event Animator#iteration\n * @param {Object} param The object of data to be sent to an event.\n * @param {Number} param.currentTime The total time that the animator is running.\n * @param {Number} param.iterationCount The iteration count that the animator is running.\n */\n this.trigger(\"iteration\", {\n currentTime: state[CURRENT_TIME],\n iterationCount: passIterationCount,\n });\n }\n state[ITERATION] = iterationCount;\n return this;\n }\n protected calculate() {\n const state = this.state;\n const iterationCount = state[ITERATION_COUNT];\n const fillMode = state[FILL_MODE];\n const direction = state[DIRECTION];\n const duration = this.getDuration();\n const time = this.getTime();\n const iteration = duration === 0 ? 0 : time / duration;\n let currentIterationTime = duration ? time % duration : 0;\n\n if (!duration) {\n this.setIterationTime(0);\n return this;\n }\n this.setIteration(iteration);\n\n // direction : normal, reverse, alternate, alternate-reverse\n // fillMode : forwards, backwards, both, none\n const isReverse = isDirectionReverse(iteration, iterationCount, direction);\n\n const isFiniteDuration = isFinite(duration);\n if (isFiniteDuration && isReverse) {\n currentIterationTime = duration - currentIterationTime;\n }\n if (isFiniteDuration && iterationCount !== INFINITE) {\n const isForwards = fillMode === \"both\" || fillMode === \"forwards\";\n\n // fill forwards\n if (iteration >= iterationCount) {\n currentIterationTime = duration * (isForwards ? (iterationCount % 1) || 1 : 0);\n isReverse && (currentIterationTime = duration - currentIterationTime);\n }\n }\n this.setIterationTime(currentIterationTime);\n return this;\n }\n private tick(now: number, to?: number) {\n if (this.isPaused()) {\n return;\n }\n const state = this.state;\n const playSpeed = state[PLAY_SPEED];\n const prevTime = state[PREV_TIME];\n const delay = state[DELAY];\n const tickTime = state[TICK_TIME];\n const currentTime = tickTime + Math.min(1000, now - prevTime) / 1000 * playSpeed;\n\n state[PREV_TIME] = now;\n this.setTime(currentTime - delay, true);\n if (to && to * 1000 < now) {\n this.pause();\n }\n if (state[PLAY_STATE] === PAUSED) {\n return;\n }\n\n this.timerId = requestAnimationFrame((time: number) => {\n this.tick(time, to);\n });\n }\n}\n/**\n * Specifies the unique indicator of the animator\n * @method Animator#setId\n * @param {number | string} - String or number of id to be set in the animator\n * @return {Animator} An instance itself.\n */\n/**\n * Specifies the unique indicator of the animator\n * @method Animator#getId\n * @return {number | string} the indicator of the item.\n */\n/**\n * Get a delay for the start of an animation.\n * @method Animator#getDelay\n * @return {number} delay\n */\n/**\n * Set a delay for the start of an animation.\n * @method Animator#setDelay\n * @param {number} delay - delay\n * @return {Animator} An instance itself.\n */\n/**\n * Get fill mode for the item when the animation is not playing (before it starts, after it ends, or both)\n * @method Animator#getFillMode\n * @return {FillModeType} fillMode\n */\n/**\n * Set fill mode for the item when the animation is not playing (before it starts, after it ends, or both)\n * @method Animator#setFillMode\n * @param {FillModeType} fillMode - fillMode\n * @return {Animator} An instance itself.\n */\n/**\n * Get the number of times an animation should be played.\n * @method Animator#getIterationCount\n * @return {IterationCountType} iterationCount\n */\n/**\n * Set the number of times an animation should be played.\n * @method Animator#setIterationCount\n * @param {IterationCountType} iterationCount - iterationCount\n * @return {Animator} An instance itself.\n */\n/**\n * Get whether an animation should be played forwards, backwards or in alternate cycles.\n * @method Animator#getDirection\n * @return {DirectionType} direction\n */\n/**\n * Set whether an animation should be played forwards, backwards or in alternate cycles.\n * @method Animator#setDirection\n * @param {DirectionType} direction - direction\n * @return {Animator} An instance itself.\n */\n/**\n * Get whether the animation is running or paused.\n * @method Animator#getPlayState\n * @return {PlayStateType} playState\n */\n/**\n * Set whether the animation is running or paused.\n * @method Animator#setPlayState\n * @param {PlayStateType} playState - playState\n * @return {Animator} An instance itself.\n */\n/**\n * Get the animator's play speed\n * @method Animator#getPlaySpeed\n * @return {number} playSpeed\n */\n/**\n * Set the animator's play speed\n * @method Animator#setPlaySpeed\n * @param {number} playSpeed - playSpeed\n * @return {Animator} An instance itself.\n */\n/**\n * Get how long an animation should take to complete one cycle.\n * @method Animator#getDuration\n * @return {number} duration\n */\n/**\n * Set how long an animation should take to complete one cycle.\n * @method Animator#setDuration\n * @param {number} duration - duration\n * @return {Animator} An instance itself.\n */\n/**\n * Get the speed curve of an animation.\n * @method Animator#getEasing\n * @return {EasingType} easing\n */\n/**\n * Get the speed curve's name\n * @method Animator#getEasingName\n * @return {string} the curve's name.\n */\n/**\n\t* Get the animator's current iteration time\n\t* @method Animator#getIterationTime\n\t* @return {number} current iteration time\n\t* @example\nanimator.getIterationTime();\n\t*/\n\n// tslint:disable-next-line:interface-name\ninterface Animator {\n setId(id: number | string): this;\n getId(): number | string;\n getIterationTime(): number;\n setIterationTime(time: number): this;\n setDelay(delay: number): this;\n getDelay(): number;\n setFillMode(fillMode: FillModeType): this;\n getFillMode(): FillModeType;\n setIterationCount(iterationCount: IterationCountType): this;\n getIterationCount(): IterationCountType;\n setDirection(direction: DirectionType): this;\n getDirection(): DirectionType;\n setPlayState(playState: PlayStateType): this;\n getPlayState(): PlayStateType;\n setPlaySpeed(playSpeed: number): this;\n getPlaySpeed(): number;\n setDuration(duration: number): this;\n getDuration(): number;\n getEasing(): EasingType;\n getEasingName(): string;\n}\nexport default Animator;\n","import {\n ALIAS, TIMING_FUNCTION, TRANSFORM_NAME, EASING_NAME, NAME_SEPARATOR\n} from \"./consts\";\nimport { isRole, getType, isPropertyObject, getValueByNames, isFixed, getNames, getEasing, getFullName } from \"./utils\";\nimport { toPropertyObject, splitStyle, toObject } from \"./utils/property\";\nimport {\n isObject, isArray, isString, getKeys,\n ANIMATION, TRANSFORM, FILTER, PROPERTY, FUNCTION, ARRAY, OBJECT, IObject, isUndefined,\n sortOrders,\n} from \"@daybrush/utils\";\nimport { NameType, KeyValueChildren } from \"./types\";\nimport OrderMap from \"order-map\";\n\nfunction toInnerProperties(obj: IObject, orders: NameType[] = []) {\n if (!obj) {\n return \"\";\n }\n const arrObj = [];\n\n const keys = getKeys(obj);\n\n sortOrders(keys, orders);\n\n keys.forEach(name => {\n arrObj.push(`${name.replace(/\\d$/g, \"\")}(${obj[name]})`);\n });\n\n return arrObj.join(\" \");\n}\n\n/* eslint-disable */\nfunction clone(target: IObject, toValue = false) {\n return merge({}, target, toValue);\n}\nfunction merge(to: IObject, from: IObject, toValue = false) {\n for (const name in from) {\n const value = from[name];\n const type = getType(value);\n\n if (type === PROPERTY) {\n to[name] = toValue ? value.toValue() : value.clone();\n } else if (type === FUNCTION) {\n to[name] = toValue ? getValue([name], value) : value;\n } else if (type === ARRAY) {\n to[name] = value.slice();\n } else if (type === OBJECT) {\n if (isObject(to[name]) && !isPropertyObject(to[name])) {\n merge(to[name], value, toValue);\n } else {\n to[name] = clone(value, toValue);\n }\n } else {\n to[name] = from[name];\n }\n }\n return to;\n}\n/* eslint-enable */\n\nfunction getPropertyName(args: NameType[]) {\n return args[0] in ALIAS ? ALIAS[args[0]] : args;\n}\nfunction getValue(names: NameType[], value: any): any {\n const type = getType(value);\n\n if (type === PROPERTY) {\n return value.toValue();\n } else if (type === FUNCTION) {\n if (names[0] !== TIMING_FUNCTION) {\n return getValue(names, value());\n }\n } else if (type === OBJECT) {\n return clone(value, true);\n }\n return value;\n}\n/**\n* Animation's Frame\n*/\nclass Frame {\n public properties: IObject = {};\n public orderMap: OrderMap = new OrderMap(NAME_SEPARATOR);\n /**\n * @param - properties\n * @example\n const frame = new Scene.Frame({\n display: \"none\"\n transform: {\n translate: \"50px\",\n scale: \"5, 5\",\n }\n });\n */\n constructor(properties: any = {}) {\n this.properties = {};\n // this.orders = [];\n this.set(properties);\n }\n /**\n * get property value\n * @param {...Number|String|PropertyObject} args - property name or value\n * @example\n frame.get(\"display\") // => \"none\", \"block\", ....\n frame.get(\"transform\", \"translate\") // => \"10px,10px\"\n */\n public get(...args: NameType[]) {\n const value = this.raw(...args);\n\n return getValue(getPropertyName(args), value);\n }\n /**\n * get properties orders\n * @param - property names\n * @example\n frame.getOrders([\"display\"]) // => []\n frame.getOrders([\"transform\"]) // => [\"translate\", \"scale\"]\n */\n public getOrders(names: NameType[]): NameType[] | undefined {\n return this.orderMap.get(names);\n }\n /**\n * set properties orders\n * @param - property names\n * @param - orders\n * @example\n frame.getOrders([\"transform\"]) // => [\"translate\", \"scale\"]\n frame.setOrders([\"transform\"], [\"scale\", \"tralsate\"])\n */\n public setOrders(names: NameType[], orders: NameType[]): NameType[] {\n return this.orderMap.set(names, orders);\n }\n public setOrderObject(obj: IObject) {\n this.orderMap.setObject(obj);\n }\n\n /**\n * get property keys\n * @param - property names\n * @example\n frame.gets(\"display\") // => []\n frame.gets(\"transform\") // => [\"translate\"]\n */\n public getKeys(...args: NameType[]): string[] {\n const value = this.raw(...args);\n const keys = getType(value) === OBJECT ? getKeys(value) : [];\n\n sortOrders(keys, this.orderMap.get(args));\n return keys;\n }\n /**\n * get properties array\n * @param - property names\n * @example\n frame.gets(\"display\") // => []\n frame.gets(\"transform\") // => [{ key: \"translate\", value: \"10px, 10px\", children: [] }]\n */\n public gets(...args: NameType[]): KeyValueChildren[] {\n const values = this.get(...args);\n const keys = this.getKeys(...args);\n\n return keys.map(key => {\n const nextValue = values[key];\n return { key, value: nextValue, children: this.gets(...args, key) };\n });\n }\n\n public raw(...args: NameType[]) {\n return getValueByNames(getPropertyName(args), this.properties);\n }\n /**\n * remove property value\n * @param {...String} args - property name\n * @return {Frame} An instance itself\n * @example\n frame.remove(\"display\")\n */\n public remove(...args: NameType[]) {\n const params = getPropertyName(args);\n const length = params.length;\n\n if (!length) {\n return this;\n }\n this.orderMap.remove(params);\n const value = getValueByNames(params, this.properties, length - 1);\n\n if (isObject(value)) {\n delete value[params[length - 1]];\n }\n return this;\n }\n /**\n * set property\n * @param {...Number|String|PropertyObject} args - property names or values\n * @return {Frame} An instance itself\n * @example\n // one parameter\n frame.set({\n display: \"none\",\n transform: {\n translate: \"10px, 10px\",\n scale: \"1\",\n },\n filter: {\n brightness: \"50%\",\n grayscale: \"100%\"\n }\n });\n\n // two parameters\n frame.set(\"transform\", {\n translate: \"10px, 10px\",\n scale: \"1\",\n });\n\n // three parameters\n frame.set(\"transform\", \"translate\", \"50px\");\n */\n public set(...args: any[]) {\n const self = this;\n const length = args.length;\n const params = args.slice(0, -1);\n const value = args[length - 1];\n const firstParam = params[0];\n\n if (length === 1 && value instanceof Frame) {\n self.merge(value);\n } else if (firstParam in ALIAS) {\n self._set(ALIAS[firstParam], value);\n } else if (length === 2 && isArray(firstParam)) {\n self._set(firstParam, value);\n } else if (isPropertyObject(value)) {\n if (isRole(params)) {\n self.set(...params, toObject(value));\n } else {\n self._set(params, value);\n }\n } else if (isArray(value)) {\n self._set(params, value);\n } else if (isObject(value)) {\n if (!self.has(...params) && isRole(params)) {\n self._set(params, {});\n }\n for (const name in value) {\n self.set(...params, name, value[name]);\n }\n } else if (isString(value)) {\n if (isRole(params, true)) {\n if (isFixed(params) || !isRole(params)) {\n this._set(params, value);\n } else {\n const obj = toPropertyObject(value);\n\n if (isObject(obj)) {\n self.set(...params, obj);\n }\n }\n return this;\n } else {\n const { styles, length: stylesLength } = splitStyle(value);\n\n for (const name in styles) {\n self.set(...params, name, styles[name]);\n }\n if (stylesLength) {\n return this;\n }\n }\n self._set(params, value);\n } else {\n self._set(params, value);\n }\n return self;\n }\n /**\n * Gets the names of properties.\n * @return the names of properties.\n * @example\n // one parameter\n frame.set({\n display: \"none\",\n transform: {\n translate: \"10px, 10px\",\n scale: \"1\",\n },\n });\n\n // [[\"display\"], [\"transform\", \"translate\"], [\"transform\", \"scale\"]]\n console.log(frame.getNames());\n */\n public getNames(): string[][] {\n return getNames(this.properties, []);\n }\n /**\n * check that has property.\n * @param {...String} args - property name\n * @example\n frame.has(\"property\", \"display\") // => true or false\n */\n public has(...args: NameType[]) {\n const params = getPropertyName(args);\n const length = params.length;\n\n if (!length) {\n return false;\n }\n return !isUndefined(getValueByNames(params, this.properties, length));\n }\n /**\n * clone frame.\n * @return {Frame} An instance of clone\n * @example\n frame.clone();\n */\n public clone() {\n const frame = new Frame();\n\n frame.setOrderObject(this.orderMap.orderMap);\n return frame.merge(this);\n }\n /**\n * merge one frame to other frame.\n * @param - target frame.\n * @return {Frame} An instance itself\n * @example\n frame.merge(frame2);\n */\n public merge(frame: Frame) {\n const properties = this.properties;\n const frameProperties = frame.properties;\n\n if (frameProperties) {\n merge(properties, frameProperties);\n }\n return this;\n }\n /**\n * Specifies an css object that coverted the frame.\n * @return {object} cssObject\n */\n public toCSSObject() {\n const properties = this.get();\n const cssObject: IObject = {};\n\n for (const name in properties) {\n if (isRole([name], true)) {\n continue;\n }\n const value = properties[name];\n\n if (name === TIMING_FUNCTION) {\n cssObject[TIMING_FUNCTION.replace(\"animation\", ANIMATION)] =\n (isString(value) ? value : value[EASING_NAME]) || \"initial\";\n } else {\n cssObject[name] = value;\n }\n }\n const transform = toInnerProperties(properties[TRANSFORM_NAME], this.orderMap.get([TRANSFORM_NAME]));\n const filter = toInnerProperties(properties.filter, this.orderMap.get([FILTER]));\n\n TRANSFORM && transform && (cssObject[TRANSFORM] = transform);\n FILTER && filter && (cssObject[FILTER] = filter);\n return cssObject;\n }\n /**\n * Specifies an css text that coverted the frame.\n * @return {string} cssText\n */\n public toCSS() {\n const cssObject = this.toCSSObject();\n const cssArray = [];\n const keys = getKeys(cssObject);\n\n sortOrders(keys, this.orderMap.get([]));\n keys.forEach(name => {\n cssArray.push(`${name}:${cssObject[name]};`);\n });\n return cssArray.join(\"\");\n }\n /**\n * Remove All Properties\n * @return {Frame} An instance itself\n */\n public clear() {\n this.properties = {};\n this.orderMap.clear();\n return this;\n }\n private _set(args: NameType[], value: any) {\n let properties = this.properties;\n const length = args.length;\n\n for (let i = 0; i < length - 1; ++i) {\n const name = args[i];\n\n !(name in properties) && (properties[name] = {});\n properties = properties[name];\n }\n if (!length) {\n return;\n }\n const lastParam = args[length - 1];\n\n this.orderMap.add(args);\n if (length === 1 && lastParam === TIMING_FUNCTION) {\n properties[lastParam] = getEasing(value);\n } else {\n properties[lastParam] = isString(value) && !isFixed(args)\n ? toPropertyObject(value, lastParam)\n : value;\n }\n }\n}\nexport default Frame;\n","\nimport PropertyObject from \"../PropertyObject\";\nimport { getType } from \"../utils\";\nimport { toPropertyObject } from \"./property\";\nimport { splitUnit, PROPERTY, FUNCTION, ARRAY, dot as dotNumber } from \"@daybrush/utils\";\nimport { EasingType } from \"../types\";\n\nfunction dotArray(a1: any[], a2: any, b1: number, b2: number): any {\n const length = a2.length;\n\n return a1.map((v1, i) => {\n if (i >= length) {\n return v1;\n } else {\n return dot(v1, a2[i], b1, b2);\n }\n });\n}\n\nfunction dotColor(color1: PropertyObject, color2: PropertyObject, b1: number, b2: number) {\n // convert array to PropertyObject(type=color)\n const value1 = color1.value;\n const value2 = color2.value;\n // If the model name is not same, the inner product is impossible.\n const model1 = color1.model;\n const model2 = color2.model;\n\n if (model1 !== model2) {\n // It is recognized as a string.\n return dot(color1.toValue(), color2.toValue(), b1, b2);\n }\n if (value1.length === 3) {\n value1[3] = 1;\n }\n if (value2.length === 3) {\n value2[3] = 1;\n }\n const v = dotArray(value1, value2, b1, b2);\n const colorModel = model1;\n\n for (let i = 0; i < 3; ++i) {\n v[i] = parseInt(v[i], 10);\n }\n const object = new PropertyObject(v, {\n type: \"color\",\n model: colorModel,\n prefix: `${colorModel}(`,\n suffix: \")\",\n });\n\n return object;\n}\n\nfunction dotObject(a1: PropertyObject, a2: PropertyObject, b1: number, b2: number) {\n const a1Type = a1.type;\n\n if (a1Type === \"color\") {\n return dotColor(a1, a2, b1, b2);\n }\n const value1 = a1.value;\n const value2 = a2.value;\n const arr = dotArray(value1, value2, b1, b2);\n\n return new PropertyObject(arr, {\n type: a1Type,\n separator: a1.separator || a2.separator,\n prefix: a1.prefix || a2.prefix,\n suffix: a1.suffix || a2.suffix,\n model: a1.model || a2.model,\n });\n}\n/**\n* The dot product of a1 and a2 for the b1 and b2.\n* @memberof Dot\n* @function dot\n* @param {String|Number|PropertyObject} a1 value1\n* @param {String|Number|PropertyObject} a2 value2\n* @param {Number} b1 b1 ratio\n* @param {Number} b2 b2 ratio\n* @return {String} Not Array, Not Separator, Only Number & Unit\n* @return {PropertyObject} Array with Separator.\n* @example\ndot(1, 3, 0.3, 0.7);\n// => 1.6\n*/\nexport function dot(a1: any, a2: any, b1: number, b2: number): any {\n if (b2 === 0) {\n return a2;\n } else if (b1 === 0 || b1 + b2 === 0) {\n // prevent division by zero.\n return a1;\n }\n // dot Object\n\n const type1 = getType(a1);\n const type2 = getType(a2);\n const isFunction1 = type1 === FUNCTION;\n const isFunction2 = type2 === FUNCTION;\n\n if (isFunction1 || isFunction2) {\n return () => {\n return dot(isFunction1 ? toPropertyObject(a1()) : a1, isFunction2 ? toPropertyObject(a2()) : a2, b1, b2);\n };\n } else if (type1 === type2) {\n if (type1 === PROPERTY) {\n return dotObject(a1, a2, b1, b2);\n } else if (type1 === ARRAY) {\n return dotArray(a1, a2, b1, b2);\n } else if (type1 !== \"value\") {\n return a1;\n }\n } else {\n return a1;\n }\n const v1 = splitUnit(`${a1}`);\n const v2 = splitUnit(`${a2}`);\n let v;\n\n // 숫자가 아닐경우 첫번째 값을 반환 b2가 0일경우 두번째 값을 반환\n if (isNaN(v1.value) || isNaN(v2.value)) {\n return a1;\n } else {\n v = dotNumber(v1.value, v2.value, b1, b2);\n }\n const prefix = v1.prefix || v2.prefix;\n const unit = v1.unit || v2.unit;\n\n if (!prefix && !unit) {\n return v;\n }\n return prefix + v + unit;\n}\n\nexport function dotValue(\n time: number,\n prevTime: number,\n nextTime: number,\n prevValue: any,\n nextValue: any,\n easing?: EasingType) {\n if (time === prevTime) {\n return prevValue;\n } else if (time === nextTime) {\n return nextValue;\n } else if (!easing) {\n return dot(prevValue, nextValue, time - prevTime, nextTime - time);\n }\n const ratio = easing((time - prevTime) / (nextTime - prevTime));\n const value = dot(prevValue, nextValue, ratio, 1 - ratio);\n\n return value;\n}\n","import Animator, { isDirectionReverse } from \"./Animator\";\nimport Frame from \"./Frame\";\nimport {\n toFixed,\n isFixed,\n playCSS,\n toId,\n getRealId,\n makeId,\n isPausedCSS,\n isRole,\n getValueByNames,\n isEndedCSS,\n setPlayCSS,\n getNames,\n updateFrame,\n} from \"./utils\";\nimport { dotValue } from \"./utils/dot\";\nimport {\n START_ANIMATION,\n PREFIX, THRESHOLD,\n TIMING_FUNCTION, ALTERNATE, ALTERNATE_REVERSE, INFINITE,\n REVERSE, EASING, FILL_MODE, DIRECTION, ITERATION_COUNT,\n EASING_NAME, DELAY, PLAY_SPEED, DURATION, PAUSE_ANIMATION,\n DATA_SCENE_ID, SELECTOR, ROLES, NAME_SEPARATOR\n} from \"./consts\";\nimport {\n isObject, isArray, isUndefined, decamelize,\n ANIMATION, fromCSS, addClass, removeClass, hasClass,\n KEYFRAMES, isFunction,\n IObject, $, splitComma, toArray, isString, IArrayFormat,\n dot as dotNumber,\n find,\n findIndex,\n getKeys,\n sortOrders,\n} from \"@daybrush/utils\";\nimport {\n NameType, AnimateElement, AnimatorState,\n SceneItemState, SceneItemOptions, EasingType, PlayCondition, DirectionType\n} from \"./types\";\nimport OrderMap from \"order-map\";\nimport styled, { InjectResult, StyledInjector } from \"css-styled\";\n\nfunction getNearTimeIndex(times: number[], time: number) {\n const length = times.length;\n\n for (let i = 0; i < length; ++i) {\n if (times[i] === time) {\n return [i, i];\n } else if (times[i] > time) {\n return [i > 0 ? i - 1 : 0, i];\n }\n }\n return [length - 1, length - 1];\n}\nfunction makeAnimationProperties(properties: object) {\n const cssArray = [];\n\n for (const name in properties) {\n cssArray.push(`${ANIMATION}-${decamelize(name)}:${properties[name]};`);\n }\n return cssArray.join(\"\");\n}\nfunction addTime(times: number[], time: number) {\n const length = times.length;\n for (let i = 0; i < length; ++i) {\n if (time < times[i]) {\n times.splice(i, 0, time);\n return;\n }\n }\n times[length] = time;\n}\nfunction addEntry(entries: number[][], time: number, keytime: number) {\n const prevEntry = entries[entries.length - 1];\n\n (!prevEntry || prevEntry[0] !== time || prevEntry[1] !== keytime) &&\n entries.push([toFixed(time), toFixed(keytime)]);\n}\nexport function getEntries(times: number[], states: AnimatorState[]) {\n let entries = times.map(time => ([time, time]));\n let nextEntries = [];\n\n states.forEach(state => {\n const iterationCount = state[ITERATION_COUNT] as number;\n const delay = state[DELAY];\n const playSpeed = state[PLAY_SPEED];\n const direction = state[DIRECTION];\n const intCount = Math.ceil(iterationCount);\n const currentDuration = entries[entries.length - 1][0];\n const length = entries.length;\n const lastTime = currentDuration * iterationCount;\n\n for (let i = 0; i < intCount; ++i) {\n const isReverse =\n direction === REVERSE ||\n direction === ALTERNATE && i % 2 ||\n direction === ALTERNATE_REVERSE && !(i % 2);\n\n for (let j = 0; j < length; ++j) {\n const entry = entries[isReverse ? length - j - 1 : j];\n const time = entry[1];\n const currentTime = currentDuration * i + (isReverse ? currentDuration - entry[0] : entry[0]);\n const prevEntry = entries[isReverse ? length - j : j - 1];\n\n if (currentTime > lastTime) {\n if (j !== 0) {\n const prevTime = currentDuration * i +\n (isReverse ? currentDuration - prevEntry[0] : prevEntry[0]);\n const divideTime = dotNumber(prevEntry[1], time, lastTime - prevTime, currentTime - lastTime);\n\n addEntry(nextEntries, (delay + currentDuration * iterationCount) / playSpeed, divideTime);\n }\n break;\n } else if (\n currentTime === lastTime\n && nextEntries.length\n && nextEntries[nextEntries.length - 1][0] === lastTime + delay\n ) {\n break;\n }\n addEntry(nextEntries, (delay + currentTime) / playSpeed, time);\n }\n }\n // delay time\n delay && nextEntries.unshift([0, nextEntries[0][1]]);\n\n entries = nextEntries;\n nextEntries = [];\n });\n\n return entries;\n}\n/**\n* manage Frame Keyframes and play keyframes.\n* @extends Animator\n* @example\nconst item = new SceneItem({\n\t0: {\n\t\tdisplay: \"none\",\n\t},\n\t1: {\n\t\tdisplay: \"block\",\n\t\topacity: 0,\n\t},\n\t2: {\n\t\topacity: 1,\n\t}\n});\n*/\nclass SceneItem extends Animator {\n public times: number[] = [];\n public items: IObject = {};\n public nameMap = new OrderMap(NAME_SEPARATOR);\n public elements: AnimateElement[] = [];\n public styled: StyledInjector;\n public styledInjector: InjectResult;\n public temp: Frame;\n private needUpdate: boolean = true;\n private target: any;\n private targetFunc: (frame: Frame) => void;\n\n /**\n * @param - properties\n * @param - options\n * @example\n const item = new SceneItem({\n 0: {\n display: \"none\",\n },\n 1: {\n display: \"block\",\n opacity: 0,\n },\n 2: {\n opacity: 1,\n }\n });\n */\n constructor(properties?: any, options?: Partial) {\n super();\n this.load(properties, options);\n }\n public getDuration() {\n const times = this.times;\n const length = times.length;\n\n return (length === 0 ? 0 : times[length - 1]) || this.state[DURATION];\n }\n /**\n * get size of list\n * @return {Number} length of list\n */\n public size() {\n return this.times.length;\n }\n public setDuration(duration: number) {\n if (!duration) {\n return this;\n }\n const originalDuration = this.getDuration();\n\n if (originalDuration > 0) {\n const ratio = duration / originalDuration;\n const { times, items } = this;\n const obj: IObject = {};\n\n this.times = times.map(time => {\n const time2 = toFixed(time * ratio);\n\n obj[time2] = items[time];\n\n return time2;\n });\n this.items = obj;\n } else {\n this.newFrame(duration);\n }\n return this;\n }\n public setId(id?: number | string) {\n const state = this.state;\n const elements = this.elements;\n const length = elements.length;\n\n state.id = id || makeId(!!length);\n\n if (length && !state[SELECTOR]) {\n const sceneId = toId(this.getId());\n\n state[SELECTOR] = `[${DATA_SCENE_ID}=\"${sceneId}\"]`;\n elements.forEach(element => {\n element.setAttribute(DATA_SCENE_ID, sceneId);\n });\n }\n return this;\n }\n\n /**\n * Set properties to the sceneItem at that time\n * @param {Number} time - time\n * @param {...String|Object} [properties] - property names or values\n * @return {SceneItem} An instance itself\n * @example\n item.set(0, \"a\", \"b\") // item.getFrame(0).set(\"a\", \"b\")\n console.log(item.get(0, \"a\")); // \"b\"\n */\n public set(time: any, ...args: any[]) {\n if (time instanceof SceneItem) {\n return this.set(0, time);\n } else if (isArray(time)) {\n const length = time.length;\n\n for (let i = 0; i < length; ++i) {\n const t = length === 1 ? 0 : this.getUnitTime(`${i / (length - 1) * 100}%`);\n\n this.set(t, time[i]);\n }\n } else if (isObject(time)) {\n for (const t in time) {\n const value = time[t];\n\n splitComma(t).forEach(eachTime => {\n const realTime = this.getUnitTime(eachTime);\n\n if (isNaN(realTime)) {\n getNames(value, [eachTime]).forEach(names => {\n const innerValue = getValueByNames(names.slice(1), value);\n const arr = isArray(innerValue) ?\n innerValue : [getValueByNames(names, this.target), innerValue];\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n this.newFrame(`${i / (length - 1) * 100}%`).set(...names, arr[i]);\n }\n });\n } else {\n this.set(realTime, value);\n }\n });\n }\n } else if (!isUndefined(time)) {\n const value = args[0];\n\n splitComma(time + \"\").forEach(eachTime => {\n const realTime = this.getUnitTime(eachTime);\n\n if (value instanceof SceneItem) {\n const delay = value.getDelay();\n const frames = value.toObject(!this.hasFrame(realTime + delay));\n const duration = value.getDuration();\n const direction = value.getDirection();\n const isReverse = direction.indexOf(\"reverse\") > -1;\n\n for (const frameTime in frames) {\n const nextTime = isReverse ? duration - parseFloat(frameTime) : parseFloat(frameTime);\n this.set(realTime + nextTime, frames[frameTime]);\n }\n } else if (args.length === 1 && isArray(value)) {\n value.forEach((item: any) => {\n this.set(realTime, item);\n });\n } else {\n const frame = this.newFrame(realTime);\n\n frame.set(...args);\n }\n });\n }\n this.needUpdate = true;\n return this;\n }\n /**\n * Get properties of the sceneItem at that time\n * @param {Number} time - time\n * @param {...String|Object} args property's name or properties\n * @return {Number|String|PropertyObejct} property value\n * @example\n item.get(0, \"a\"); // item.getFrame(0).get(\"a\");\n item.get(0, \"transform\", \"translate\"); // item.getFrame(0).get(\"transform\", \"translate\");\n */\n public get(time: string | number, ...args: NameType[]) {\n const frame = this.getFrame(time);\n\n return frame && frame.get(...args);\n }\n /**\n * get properties orders\n * @param - property names\n * @example\n item.getOrders([\"display\"]) // => []\n item.getOrders([\"transform\"]) // => [\"translate\", \"scale\"]\n */\n public getOrders(names: NameType[]): NameType[] | undefined {\n this.needUpdate && this.update();\n\n return this.nameMap.get(names);\n }\n /**\n * set properties orders\n * @param - property names\n * @param - orders\n * @example\n item.getOrders([\"transform\"]) // => [\"translate\", \"scale\"]\n item.setOrders([\"transform\"], [\"scale\", \"tralsate\"])\n */\n public setOrders(names: NameType[], orders: NameType[]): NameType[] {\n this.needUpdate && this.update();\n\n const result = this.nameMap.set(names, orders);\n\n this.updateFrameOrders();\n\n return result;\n }\n public setOrderObject(obj: IObject) {\n this.nameMap.setObject(obj);\n\n this.updateFrameOrders();\n }\n public remove(time: string | number, ...args: any[]): this;\n /**\n * remove properties to the sceneItem at that time\n * @param {Number} time - time\n * @param {...String|Object} [properties] - property names or values\n * @return {SceneItem} An instance itself\n * @example\n item.remove(0, \"a\");\n */\n public remove(time: string | number, ...args: NameType[]) {\n if (args.length) {\n const frame = this.getFrame(time);\n\n frame && frame.remove(...args);\n } else {\n this.removeFrame(time);\n }\n this.needUpdate = true;\n return this;\n }\n /**\n * Append the item or object at the last time.\n * @param - the scene item or item object\n * @return An instance itself\n * @example\n item.append(new SceneItem({\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n }\n }));\n item.append({\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n }\n });\n item.set(item.getDuration(), {\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n }\n });\n */\n public append(item: SceneItem | IObject) {\n if (item instanceof SceneItem) {\n this.set(this.getDuration(), item);\n } else {\n this.append(new SceneItem(item));\n }\n return this;\n }\n /**\n * Push the front frames for the time and prepend the scene item or item object.\n * @param - the scene item or item object\n * @return An instance itself\n */\n public prepend(item: SceneItem | IObject) {\n if (item instanceof SceneItem) {\n const unshiftTime = item.getDuration() + item.getDelay();\n const firstFrame = this.getFrame(0);\n // remove first frame\n this.removeFrame(0);\n this.unshift(unshiftTime);\n this.set(0, item);\n this.set(unshiftTime + THRESHOLD, firstFrame);\n } else {\n this.prepend(new SceneItem(item));\n }\n return this;\n }\n /**\n * Push out the amount of time.\n * @param - time to push\n * @example\n item.get(0); // frame 0\n item.unshift(3);\n item.get(3) // frame 0\n */\n public unshift(time: number) {\n const { times, items } = this;\n const obj: IObject = {};\n\n this.times = times.map(t => {\n const time2 = toFixed(time + t);\n\n obj[time2] = items[t];\n return time2;\n });\n this.items = obj;\n return this;\n }\n /**\n * Get the frames in the item in object form.\n * @return {}\n * @example\n item.toObject();\n // {0: {display: \"none\"}, 1: {display: \"block\"}}\n */\n public toObject(isStartZero = true): IObject {\n const obj: IObject = {};\n const delay = this.getDelay();\n\n this.forEach((frame: Frame, time: number) => {\n obj[(!time && !isStartZero ? THRESHOLD : 0) + delay + time] = frame.clone();\n });\n return obj;\n }\n /**\n * Specifies an element to synchronize items' keyframes.\n * @param {string} selectors - Selectors to find elements in items.\n * @return {SceneItem} An instance itself\n * @example\nitem.setSelector(\"#id.class\");\n */\n public setSelector(target: string | boolean | ((id: number | string) => string)) {\n if (isFunction(target)) {\n this.setElement(target(this.getId()));\n } else {\n this.setElement(target);\n }\n return this;\n }\n /**\n * Get the elements connected to SceneItem.\n */\n public getElements(): AnimateElement[] {\n return this.elements;\n }\n /**\n * Specifies an element to synchronize item's keyframes.\n * @param - elements to synchronize item's keyframes.\n * @param - Make sure that you have peusdo.\n * @return {SceneItem} An instance itself\n * @example\nitem.setElement(document.querySelector(\"#id.class\"));\nitem.setElement(document.querySelectorAll(\".class\"));\n */\n public setElements(target: boolean | string | AnimateElement | IArrayFormat): this {\n return this.setElement(target);\n }\n /**\n * Specifies an element to synchronize item's keyframes.\n * @param - elements to synchronize item's keyframes.\n * @param - Make sure that you have peusdo.\n * @return {SceneItem} An instance itself\n * @example\nitem.setElement(document.querySelector(\"#id.class\"));\nitem.setElement(document.querySelectorAll(\".class\"));\n */\n public setElement(target: boolean | string | AnimateElement | IArrayFormat) {\n const state = this.state;\n let elements: AnimateElement[] = [];\n\n if (!target) {\n return this;\n } else if (target === true || isString(target)) {\n const selector = target === true ? `${state.id}` : target;\n const matches = /([\\s\\S]+)(:+[a-zA-Z]+)$/g.exec(selector);\n\n elements = toArray($(matches ? matches[1] : selector, true));\n state[SELECTOR] = selector;\n } else {\n elements = (target instanceof Element) ? [target] : toArray(target);\n }\n if (!elements.length) {\n return this;\n }\n this.elements = elements;\n this.setId(this.getId());\n this.target = elements[0].style;\n this.targetFunc = (frame: Frame) => {\n const attributes = frame.get(\"attribute\");\n\n if (attributes) {\n for (const name in attributes) {\n elements.forEach(el => {\n el.setAttribute(name, attributes[name]);\n });\n }\n }\n if (frame.has(\"html\")) {\n const html = frame.get(\"html\");\n\n elements.forEach(el => {\n el.innerHTML = html;\n });\n }\n const cssText = frame.toCSS();\n\n if (state.cssText !== cssText) {\n state.cssText = cssText;\n\n elements.forEach(el => {\n el.style.cssText += cssText;\n });\n return frame;\n }\n };\n return this;\n }\n public setTarget(target: any): this {\n this.target = target;\n this.targetFunc = (frame: Frame) => {\n const obj = frame.get();\n\n for (const name in obj) {\n target[name] = obj[name];\n }\n };\n return this;\n }\n /**\n * add css styles of items's element to the frame at that time.\n * @param {Array} properties - elements to synchronize item's keyframes.\n * @return {SceneItem} An instance itself\n * @example\n item.setElement(document.querySelector(\"#id.class\"));\n item.setCSS(0, [\"opacity\"]);\n item.setCSS(0, [\"opacity\", \"width\", \"height\"]);\n */\n public setCSS(time: number, properties: string[]) {\n this.set(time, fromCSS(this.elements, properties));\n return this;\n }\n public setTime(time: number | string, isTick?: boolean, isParent?: boolean, parentEasing?: EasingType) {\n super.setTime(time, isTick, isParent);\n\n const iterationTime = this.getIterationTime();\n const easing = this.getEasing() || parentEasing;\n const frame = this.getNowFrame(iterationTime, easing);\n const currentTime = this.getTime();\n\n this.temp = frame;\n /**\n * This event is fired when timeupdate and animate.\n * @event SceneItem#animate\n * @param {Number} param.currentTime The total time that the animator is running.\n * @param {Number} param.time The iteration time during duration that the animator is running.\n * @param {Frame} param.frame frame of that time.\n */\n this.trigger(\"animate\", {\n frame,\n currentTime,\n time: iterationTime,\n });\n this.targetFunc && this.targetFunc(frame);\n return this;\n }\n /**\n * update property names used in frames.\n * @return {SceneItem} An instance itself\n * @example\n item.update();\n */\n public update() {\n const prevNameMap = this.nameMap;\n const names = {};\n this.forEach(frame => {\n updateFrame(names, frame.properties);\n });\n\n const nameMap = new OrderMap(NAME_SEPARATOR);\n\n function pushKeys(map: IObject, stack: NameType[]) {\n const keys = getKeys(map);\n\n sortOrders(keys, prevNameMap.get(stack));\n\n nameMap.set(stack, keys);\n keys.forEach(key => {\n const nextMap = map[key];\n if (isObject(nextMap)) {\n pushKeys(nextMap, [...stack, key]);\n }\n });\n }\n pushKeys(names, []);\n\n this.nameMap = nameMap;\n\n this.forEach(frame => {\n frame.setOrderObject(nameMap.orderMap);\n });\n this.needUpdate = false;\n return this;\n }\n /**\n * Create and add a frame to the sceneItem at that time\n * @param {Number} time - frame's time\n * @return {Frame} Created frame.\n * @example\n item.newFrame(time);\n */\n public newFrame(time: string | number) {\n let frame = this.getFrame(time);\n\n if (frame) {\n return frame;\n }\n frame = new Frame();\n\n this.setFrame(time, frame);\n return frame;\n }\n /**\n * Add a frame to the sceneItem at that time\n * @param {Number} time - frame's time\n * @return {SceneItem} An instance itself\n * @example\n item.setFrame(time, frame);\n */\n public setFrame(time: string | number, frame: Frame) {\n const realTime = this.getUnitTime(time);\n\n this.items[realTime] = frame;\n addTime(this.times, realTime);\n this.needUpdate = true;\n return this;\n }\n public getFrame(time: number | string, ...names: any[]): Frame;\n /**\n * get sceneItem's frame at that time\n * @param {Number} time - frame's time\n * @return {Frame} sceneItem's frame at that time\n * @example\n const frame = item.getFrame(time);\n */\n public getFrame(time: number | string) {\n return this.items[this.getUnitTime(time)];\n }\n public removeFrame(time: number | string, ...names: any[]): this;\n /**\n * remove sceneItem's frame at that time\n * @param - frame's time\n * @return {SceneItem} An instance itself\n * @example\n item.removeFrame(time);\n */\n public removeFrame(time: number | string) {\n const realTime = this.getUnitTime(time);\n const items = this.items;\n const index = this.times.indexOf(realTime);\n\n delete items[realTime];\n\n // remove time\n if (index > -1) {\n this.times.splice(index, 1);\n }\n this.needUpdate = true;\n return this;\n }\n /**\n * check if the item has a frame at that time\n * @param {Number} time - frame's time\n * @return {Boolean} true: the item has a frame // false: not\n * @example\n if (item.hasFrame(10)) {\n // has\n } else {\n // not\n }\n */\n public hasFrame(time: number | string) {\n return this.getUnitTime(time) in this.items;\n }\n /**\n * Check if keyframes has propery's name\n * @param - property's time\n * @return {boolean} true: if has property, false: not\n * @example\n item.hasName([\"transform\", \"translate\"]); // true or not\n */\n public hasName(args: string[]) {\n this.needUpdate && this.update();\n return !!this.nameMap.get(args);\n }\n /**\n * merge frame of the previous time at the next time.\n * @param - The time of the frame to merge\n * @param - The target frame\n * @return {SceneItem} An instance itself\n * @example\n // getFrame(1) contains getFrame(0)\n item.merge(0, 1);\n */\n public mergeFrame(time: number | string, frame: Frame) {\n if (frame) {\n const toFrame = this.newFrame(time);\n\n toFrame.merge(frame);\n }\n return this;\n }\n /**\n * Get frame of the current time\n * @param {Number} time - the current time\n * @param {function} easing - the speed curve of an animation\n * @return {Frame} frame of the current time\n * @example\n let item = new SceneItem({\n 0: {\n display: \"none\",\n },\n 1: {\n display: \"block\",\n opacity: 0,\n },\n 2: {\n opacity: 1,\n }\n });\n // opacity: 0.7; display:\"block\";\n const frame = item.getNowFrame(1.7);\n */\n public getNowFrame(time: number, easing?: EasingType, isAccurate?: boolean) {\n this.needUpdate && this.update();\n const frame = new Frame();\n const [left, right] = getNearTimeIndex(this.times, time);\n let realEasing = this.getEasing() || easing;\n let nameMap = this.nameMap;\n\n if (this.hasName([TIMING_FUNCTION])) {\n const nowEasing = this.getNowValue(time, [TIMING_FUNCTION], left, right, false, 0, true);\n\n isFunction(nowEasing) && (realEasing = nowEasing);\n }\n if (isAccurate) {\n const prevFrame = this.getFrame(time);\n const prevOrderMap = prevFrame.orderMap.filter([], orders => {\n return prevFrame.has(...orders);\n });\n\n for (const name in ROLES) {\n const orders = nameMap.get([name]);\n if (prevOrderMap.get([name]) && orders) {\n prevOrderMap.set([name], orders);\n }\n }\n nameMap = prevOrderMap;\n }\n const names = nameMap.gets([]);\n\n frame.setOrderObject(nameMap.orderMap);\n names.forEach(properties => {\n const value = this.getNowValue(time, properties, left, right, isAccurate, realEasing, isFixed(properties));\n\n if (isUndefined(value)) {\n return;\n }\n frame.set(properties, value);\n });\n return frame;\n }\n public load(properties: any = {}, options = properties.options) {\n options && this.setOptions(options);\n\n if (isArray(properties)) {\n this.set(properties);\n } else if (properties.keyframes) {\n this.set(properties.keyframes);\n } else {\n for (const time in properties) {\n if (time !== \"options\") {\n this.set({\n [time]: properties[time],\n });\n }\n }\n }\n if (options && options[DURATION]) {\n this.setDuration(options[DURATION]);\n }\n return this;\n }\n /**\n * clone SceneItem.\n * @return {SceneItem} An instance of clone\n * @example\n * item.clone();\n */\n public clone() {\n const item = new SceneItem();\n\n item.setOptions(this.state);\n item.setOrderObject(this.nameMap.orderMap);\n\n this.forEach((frame: Frame, time: number) => {\n item.setFrame(time, frame.clone());\n });\n return item;\n }\n /**\n * executes a provided function once for each scene item.\n * @param - Function to execute for each element, taking three arguments\n * @return {Keyframes} An instance itself\n */\n public forEach(callback: (item: Frame, time: number, items: IObject) => void) {\n const times = this.times;\n const items = this.items;\n\n times.forEach(time => {\n callback(items[time], time, items);\n });\n return this;\n }\n public setOptions(options: Partial = {}) {\n super.setOptions(options);\n const { id, selector, elements, element, target } = options;\n\n id && this.setId(id);\n if (target) {\n this.setTarget(target);\n } else if (selector) {\n this.setSelector(selector);\n } else if (elements || element) {\n this.setElement(elements || element);\n }\n return this;\n }\n public toCSS(\n playCondition: PlayCondition = { className: START_ANIMATION },\n parentDuration = this.getDuration(), states: AnimatorState[] = []) {\n const itemState = this.state;\n const selector = itemState[SELECTOR];\n\n if (!selector) {\n return \"\";\n }\n const originalDuration = this.getDuration();\n itemState[DURATION] = originalDuration;\n states.push(itemState);\n\n const reversedStates = toArray(states).reverse();\n const id = toId(getRealId(this));\n const superParent = states[0];\n const infiniteIndex = findIndex(reversedStates, state => {\n return state[ITERATION_COUNT] === INFINITE || !isFinite(state[DURATION]);\n }, states.length - 1);\n const finiteStates = reversedStates.slice(0, infiniteIndex);\n const duration = parentDuration || finiteStates.reduce((prev, cur) => {\n return (cur[DELAY] + prev * (cur[ITERATION_COUNT] as number)) / cur[PLAY_SPEED];\n }, originalDuration);\n const delay = reversedStates.slice(infiniteIndex).reduce((prev, cur) => {\n return (prev + cur[DELAY]) / cur[PLAY_SPEED];\n }, 0);\n const easingName = find(reversedStates, state => (state[EASING] && state[EASING_NAME]), itemState)[EASING_NAME];\n const iterationCount = reversedStates[infiniteIndex][ITERATION_COUNT];\n const fillMode = superParent[FILL_MODE];\n const direction = reversedStates[infiniteIndex][DIRECTION];\n const cssText = makeAnimationProperties({\n fillMode,\n direction,\n iterationCount,\n delay: `${delay}s`,\n name: `${PREFIX}KEYFRAMES_${id}`,\n duration: `${duration / superParent[PLAY_SPEED]}s`,\n timingFunction: easingName,\n });\n const selectors = splitComma(selector).map(sel => {\n const matches = /([\\s\\S]+)(:+[a-zA-Z]+)$/g.exec(sel);\n\n if (matches) {\n return [matches[1], matches[2]];\n } else {\n return [sel, \"\"];\n }\n });\n const className = playCondition.className;\n const selectorCallback = playCondition.selector;\n const preselector = isFunction(selectorCallback) ? selectorCallback(this, selector) : selectorCallback;\n\n return `\n ${preselector || selectors.map(([sel, peusdo]) => `${sel}.${className}${peusdo}`)} {${cssText}}\n ${selectors.map(([sel, peusdo]) => `${sel}.${PAUSE_ANIMATION}${peusdo}`)} {${ANIMATION}-play-state: paused;}\n @${KEYFRAMES} ${PREFIX}KEYFRAMES_${id}{${this._toKeyframes(duration, finiteStates, direction)}}`;\n }\n /**\n * Export the CSS of the items to the style.\n * @param - Add a selector or className to play.\n * @return {SceneItem} An instance itself\n */\n public exportCSS(\n playCondition?: PlayCondition,\n duration?: number, options?: AnimatorState[]) {\n if (!this.elements.length) {\n return \"\";\n }\n const css = this.toCSS(playCondition, duration, options);\n const isParent = options && !isUndefined(options[ITERATION_COUNT]);\n\n if (!isParent) {\n if (this.styledInjector) {\n this.styledInjector.destroy();\n this.styledInjector = null;\n }\n this.styled = styled(css);\n this.styledInjector = this.styled.inject(this.getAnimationElement(), { original: true });\n }\n return this;\n }\n public pause() {\n super.pause();\n isPausedCSS(this) && this.pauseCSS();\n return this;\n }\n public pauseCSS() {\n this.elements.forEach(element => {\n addClass(element, PAUSE_ANIMATION);\n });\n return this;\n }\n public endCSS() {\n this.elements.forEach(element => {\n removeClass(element, PAUSE_ANIMATION);\n removeClass(element, START_ANIMATION);\n });\n setPlayCSS(this, false);\n return this;\n }\n public end() {\n isEndedCSS(this) && this.endCSS();\n super.end();\n return this;\n }\n /**\n * Play using the css animation and keyframes.\n * @param - Check if you want to export css.\n * @param [playClassName=\"startAnimation\"] - Add a class name to play.\n * @param - The shorthand properties for six of the animation properties.\n * @see {@link https://www.w3schools.com/cssref/css3_pr_animation.asp}\n * @example\n item.playCSS();\n item.playCSS(false, \"startAnimation\", {\n direction: \"reverse\",\n fillMode: \"forwards\",\n });\n */\n public playCSS(isExportCSS = true, playClassName?: string, properties: object = {}) {\n playCSS(this, isExportCSS, playClassName, properties);\n return this;\n }\n public getAnimationElement(): AnimateElement {\n return this.elements[0];\n }\n public addPlayClass(isPaused: boolean, playClassName?: string, properties: object = {}) {\n const elements = this.elements;\n const length = elements.length;\n const cssText = makeAnimationProperties(properties);\n\n if (!length) {\n return;\n }\n if (isPaused) {\n elements.forEach(element => {\n removeClass(element, PAUSE_ANIMATION);\n });\n } else {\n elements.forEach(element => {\n element.style.cssText += cssText;\n\n if (hasClass(element, START_ANIMATION)) {\n removeClass(element, START_ANIMATION);\n }\n });\n elements.forEach(element => {\n element.clientWidth;\n });\n elements.forEach(element => {\n addClass(element, START_ANIMATION);\n });\n }\n return elements[0];\n }\n /**\n * Clear All Frames\n * @return {SceneItem} An instance itself\n */\n public clear() {\n this.times = [];\n this.items = {};\n this.nameMap = new OrderMap(NAME_SEPARATOR);\n\n if (this.styledInjector) {\n this.styledInjector.destroy();\n }\n this.styled = null;\n this.styledInjector = null;\n this.temp = null;\n this.needUpdate = true;\n return this;\n }\n public getNowValue(\n time: number,\n properties: NameType[],\n left?: number,\n right?: number,\n isAccurate?: boolean,\n easing?: EasingType,\n usePrevValue?: boolean,\n ) {\n const times = this.times;\n const length = times.length;\n\n let prevTime: number;\n let nextTime: number;\n let prevFrame: Frame;\n let nextFrame: Frame;\n const isUndefinedLeft = isUndefined(left);\n const isUndefinedRight = isUndefined(right);\n if (isUndefinedLeft || isUndefinedRight) {\n const indicies = getNearTimeIndex(times, time);\n isUndefinedLeft && (left = indicies[0]);\n isUndefinedRight && (right = indicies[1]);\n }\n\n for (let i = left; i >= 0; --i) {\n const frame = this.getFrame(times[i]);\n\n if (frame.has(...properties)) {\n prevTime = times[i];\n prevFrame = frame;\n break;\n }\n }\n const prevValue = prevFrame && prevFrame.raw(...properties);\n\n if (isAccurate && !isRole([properties[0]])) {\n return prevTime === time ? prevValue : undefined;\n }\n if (usePrevValue) {\n return prevValue;\n }\n for (let i = right; i < length; ++i) {\n const frame = this.getFrame(times[i]);\n\n if (frame.has(...properties)) {\n nextTime = times[i];\n nextFrame = frame;\n break;\n }\n }\n const nextValue = nextFrame && nextFrame.raw(...properties);\n\n if (!prevFrame || isUndefined(prevValue)) {\n return nextValue;\n }\n if (!nextFrame || isUndefined(nextValue) || prevValue === nextValue) {\n return prevValue;\n }\n return dotValue(time, Math.max(prevTime, 0), nextTime, prevValue, nextValue, easing);\n }\n private _toKeyframes(duration: number, states: AnimatorState[], direction: DirectionType) {\n const frames: IObject = {};\n const times = this.times.slice();\n\n if (!times.length) {\n return \"\";\n }\n const originalDuration = this.getDuration();\n (!this.getFrame(0)) && times.unshift(0);\n (!this.getFrame(originalDuration)) && times.push(originalDuration);\n const entries = getEntries(times, states);\n const lastEntry = entries[entries.length - 1];\n\n // end delay time\n lastEntry[0] < duration && addEntry(entries, duration, lastEntry[1]);\n let prevTime = -1;\n\n return entries.map(([time, keytime]) => {\n if (!frames[keytime]) {\n frames[keytime] =\n (!this.hasFrame(keytime) || keytime === 0 || keytime === originalDuration ?\n this.getNowFrame(keytime) : this.getNowFrame(keytime, 0, true)).toCSS();\n }\n\n let frameTime = time / duration * 100;\n\n if (frameTime - prevTime < THRESHOLD) {\n frameTime += THRESHOLD;\n }\n prevTime = frameTime;\n return `${Math.min(frameTime, 100)}%{\n ${time === 0 && !isDirectionReverse(0, 1, direction) ? \"\" : frames[keytime]}\n }`;\n }).join(\"\");\n }\n private updateFrameOrders() {\n const nameMap = this.nameMap.orderMap;\n\n this.forEach(frame => {\n frame.setOrderObject(nameMap);\n });\n }\n}\n\nexport default SceneItem;\n","import Animator from \"./Animator\";\nimport SceneItem from \"./SceneItem\";\nimport { SELECTOR, DURATION, DELAY, RUNNING, NAME_SEPARATOR } from \"./consts\";\nimport { playCSS, getRealId, isPausedCSS, isEndedCSS, setPlayCSS } from \"./utils\";\nimport { isFunction, IS_WINDOW, IObject, $, IArrayFormat } from \"@daybrush/utils\";\nimport {\n AnimateElement, SceneState, SceneOptions, EasingType,\n AnimatorState, SceneItemOptions, PlayCondition, NameType\n} from \"./types\";\nimport Frame from \"./Frame\";\nimport OrderMap from \"order-map\";\nimport styled, { InjectResult, StyledInjector } from \"css-styled\";\n/**\n * manage sceneItems and play Scene.\n * @sort 1\n */\nclass Scene extends Animator {\n /**\n * version info\n * @type {string}\n * @example\n * Scene.VERSION // #__VERSION__#\n */\n public static VERSION: string = \"#__VERSION__#\";\n public items: IObject = {};\n public orderMap = new OrderMap(NAME_SEPARATOR);\n public styled: StyledInjector;\n public styledInjector: InjectResult;\n public temp: IObject;\n /**\n * @param - properties\n * @param - options\n * @example\n const scene = new Scene({\n item1: {\n 0: {\n display: \"none\",\n },\n 1: {\n display: \"block\",\n opacity: 0,\n },\n 2: {\n opacity: 1,\n },\n },\n item2: {\n 2: {\n opacity: 1,\n },\n }\n });\n */\n constructor(properties?: { options?: Partial } & IObject, options?: Partial) {\n super();\n this.load(properties, options);\n }\n public getDuration() {\n let time = 0;\n\n this.forEach(item => {\n time = Math.max(time, item.getTotalDuration() / item.getPlaySpeed());\n });\n return time || this.state[DURATION];\n }\n public setDuration(duration: number) {\n const items = this.items;\n const sceneDuration = this.getDuration();\n\n if (duration === 0 || !isFinite(sceneDuration)) {\n return this;\n }\n if (sceneDuration === 0) {\n this.forEach(item => {\n item.setDuration(duration);\n });\n } else {\n const ratio = duration / sceneDuration;\n\n this.forEach(item => {\n item.setDelay(item.getDelay() * ratio);\n item.setDuration(item.getDuration() * ratio);\n });\n }\n super.setDuration(duration);\n return this;\n }\n public getItem(name: number | string): T;\n /**\n * get item in scene by name\n * @param - The item's name\n * @return {Scene | SceneItem} item\n * @example\n const item = scene.getItem(\"item1\")\n */\n public getItem(name: number | string) {\n return this.items[name];\n }\n /**\n * create item in scene\n * @param {} name - name of item to create\n * @param {} options - The option object of SceneItem\n * @return {} Newly created item\n * @example\n const item = scene.newItem(\"item1\")\n */\n public newItem(name: number | string, options: Partial = {}): Scene | SceneItem {\n if (this.items[name]) {\n return this.items[name];\n }\n const item = new SceneItem();\n\n this.setItem(name, item);\n item.setOptions(options);\n\n return item;\n }\n /**\n * remove item in scene\n * @param - name of item to remove\n * @return An instance itself\n * @example\n const item = scene.newItem(\"item1\")\n\n scene.removeItem(\"item1\");\n */\n public removeItem(name: number | string): this {\n delete this.items[name];\n\n this.orderMap.remove([name]);\n return this;\n }\n /**\n * add a sceneItem to the scene\n * @param - name of item to create\n * @param - sceneItem\n * @example\n const item = scene.newItem(\"item1\")\n */\n public setItem(name: number | string, item: Scene | SceneItem) {\n item.setId(name);\n this.items[name] = item;\n\n this.orderMap.add([name]);\n return this;\n }\n public setTime(time: number | string, isTick?: boolean, isParent?: boolean, parentEasing?: EasingType) {\n super.setTime(time, isTick, isParent);\n\n const iterationTime = this.getIterationTime();\n const easing = this.getEasing() || parentEasing;\n const frames: IObject = {};\n\n this.forEach(item => {\n item.setTime(iterationTime * item.getPlaySpeed() - item.getDelay(), isTick, true, easing);\n\n frames[item.getId()] = item.temp;\n });\n this.temp = frames;\n\n /**\n * This event is fired when timeupdate and animate.\n * @event Scene#animate\n * @param {object} param The object of data to be sent to an event.\n * @param {number} param.currentTime The total time that the animator is running.\n * @param {number} param.time The iteration time during duration that the animator is running.\n * @param {object} param.frames frames of that time.\n * @example\nconst scene = new Scene({\n a: {\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n }\n },\n b: {\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n }\n }\n}).on(\"animate\", e => {\n console.log(e.frames);\n // {a: Frame, b: Frame}\n console.log(e.frames.a.get(\"opacity\"));\n});\n */\n this.trigger(\"animate\", {\n frames,\n currentTime: this.getTime(),\n time: iterationTime,\n });\n\n return this;\n }\n /**\n * executes a provided function once for each scene item.\n * @param - Function to execute for each element, taking three arguments\n * @return {Scene} An instance itself\n */\n public forEach(\n func: (\n item: Scene | SceneItem,\n id: string | number,\n index: number,\n items: IObject,\n ) => void,\n ) {\n const items = this.items;\n this.orderMap.get([]).forEach((id, index) => {\n func(items[id], id, index, items);\n });\n return this;\n }\n public toCSS(\n playCondition?: PlayCondition,\n duration: number = this.getDuration(), parentStates: AnimatorState[] = []) {\n const totalDuration = !duration || !isFinite(duration) ? 0 : duration;\n const styles: string[] = [];\n const state = this.state;\n\n state[DURATION] = this.getDuration();\n\n this.forEach(item => {\n styles.push(item.toCSS(playCondition, totalDuration, parentStates.concat(state)));\n });\n return styles.join(\"\");\n }\n /**\n * Export the CSS of the items to the style.\n * @param - Add a selector or className to play.\n * @return {Scene} An instance itself\n */\n public exportCSS(\n playCondition?: PlayCondition, duration?: number, parentStates?: AnimatorState[]) {\n const css = this.toCSS(playCondition, duration, parentStates);\n\n if (!parentStates || !parentStates.length) {\n if (this.styledInjector) {\n this.styledInjector.destroy();\n this.styledInjector = null;\n }\n this.styled = styled(css);\n this.styledInjector = this.styled.inject(this.getAnimationElement(), { original: true });\n // && exportCSS(getRealId(this), css);\n }\n return this;\n }\n public append(item: SceneItem | Scene) {\n item.setDelay(item.getDelay() + this.getDuration());\n this.setItem(getRealId(item), item);\n }\n public pauseCSS() {\n return this.forEach(item => {\n item.pauseCSS();\n });\n }\n public pause() {\n super.pause();\n\n isPausedCSS(this) && this.pauseCSS();\n this.forEach(item => {\n item.pause();\n });\n return this;\n }\n public endCSS() {\n this.forEach(item => {\n item.endCSS();\n });\n setPlayCSS(this, false);\n }\n public end() {\n isEndedCSS(this) && this.endCSS();\n super.end();\n return this;\n }\n /**\n * get item orders\n * @example\n scene.getOrders() // => [\"item1\", \"item2\"]\n */\n public getOrders(): NameType[] {\n return this.orderMap.get([]);\n }\n /**\n * set item orders\n * @param - orders\n * @example\n frame.setOrders([\"item2\", \"item1\"]) // => [\"item2\", \"item1\"]\n */\n public setOrders(orders: NameType[]): NameType[] {\n return this.orderMap.set([], orders);\n }\n public getAnimationElement() {\n let animtionElement: AnimateElement;\n\n this.forEach(item => {\n const el = item.getAnimationElement();\n\n !animtionElement && (animtionElement = el);\n });\n return animtionElement;\n }\n public addPlayClass(isPaused: boolean, playClassName?: string, properties: object = {}) {\n let animtionElement: AnimateElement;\n\n this.forEach(item => {\n const el = item.addPlayClass(isPaused, playClassName, properties);\n\n !animtionElement && (animtionElement = el);\n });\n return animtionElement;\n }\n /**\n * Play using the css animation and keyframes.\n * @param - Check if you want to export css.\n * @param [playClassName=\"startAnimation\"] - Add a class name to play.\n * @param - The shorthand properties for six of the animation properties.\n * @return {Scene} An instance itself\n * @see {@link https://www.w3schools.com/cssref/css3_pr_animation.asp}\n * @example\n scene.playCSS();\n scene.playCSS(false, {\n direction: \"reverse\",\n fillMode: \"forwards\",\n });\n */\n public playCSS(isExportCSS = true, playClassName?: string, properties: Partial = {}) {\n playCSS(this, isExportCSS, playClassName, properties);\n return this;\n }\n public set(properties: any, ...args: any[]): this;\n /**\n * Set properties to the Scene.\n * @param - properties\n * @return An instance itself\n * @example\nscene.set({\n \".a\": {\n 0: {\n opacity: 0,\n },\n 1: {\n opacity: 1,\n },\n },\n});\n// 0\nconsole.log(scene.getItem(\".a\").get(0, \"opacity\"));\n// 1\nconsole.log(scene.getItem(\".a\").get(1, \"opacity\"));\n */\n public set(properties: any) {\n this.load(properties);\n return this;\n }\n /**\n * Clear All Items\n * @return {Scene} An instance itself\n */\n public clear() {\n this.finish();\n this.items = {};\n this.orderMap = new OrderMap(NAME_SEPARATOR);\n\n if (this.styledInjector) {\n this.styledInjector.destroy();\n }\n this.styled = null;\n this.styledInjector = null;\n }\n public load(properties: any = {}, options = properties.options) {\n if (!properties) {\n return this;\n }\n const selector = options && options[SELECTOR] || this.state[SELECTOR];\n for (const name in properties) {\n if (name === \"options\") {\n continue;\n }\n const object = properties[name];\n let item;\n\n if (object instanceof Scene || object instanceof SceneItem) {\n this.setItem(name, object);\n item = object;\n } else if (isFunction(object) && selector) {\n const elements =\n IS_WINDOW\n ? $(`${isFunction(selector) ? selector(name) : name}`, true) as IArrayFormat\n : ([] as AnimateElement[]);\n const length = elements.length;\n const scene = new Scene();\n\n for (let i = 0; i < length; ++i) {\n (scene.newItem(i) as SceneItem).setId().setElement(elements[i]).load(object(i, elements[i]));\n }\n this.setItem(name, scene);\n continue;\n } else {\n item = this.newItem(name);\n item.load(object);\n }\n selector && item.setSelector(selector);\n }\n this.setOptions(options);\n }\n public setOptions(options: Partial = {}): this {\n super.setOptions(options);\n\n const selector = options.selector;\n\n if (selector) {\n this.state[SELECTOR] = selector;\n }\n return this;\n }\n public setSelector(target?: string | boolean | ((id: number | string) => string)) {\n const state = this.state;\n const selector = target || state[SELECTOR];\n\n state[SELECTOR] = selector;\n const isItFunction = isFunction(target);\n if (selector) {\n this.forEach((item, name) => {\n item.setSelector(isItFunction ? (target as (id: number | string) => string)(name) : selector);\n });\n }\n return this;\n }\n public start(delay: number = this.state[DELAY]): boolean {\n const result = super.start(delay);\n\n if (result) {\n this.forEach(item => {\n item.start(0);\n });\n } else {\n this.forEach(item => {\n item.setPlayState(RUNNING);\n });\n }\n return result;\n }\n}\n\nexport default Scene;\n","import { IObject } from \"@daybrush/utils\";\nimport Scene from \"./Scene\";\nimport SceneItem from \"./SceneItem\";\nimport { SceneOptions, SceneItemOptions } from \"./types\";\n\nexport function animate(properties?: IObject, options?: Partial) {\n return new Scene(properties, options).play();\n}\nexport function animateItem(properties?: IObject, options?: Partial) {\n return new SceneItem(properties, options).play();\n}\n","import Scene, * as others from \"./index\";\n\nfor (const name in others) {\n (Scene as any)[name] = (others as any)[name];\n}\n\nexport default Scene;\n"],"names":["cubic","y1","y2","t","t2","solveFromX","x1","x2","x","solveX","dx","Math","abs","bezier","func","max","min","easingName","steps","count","position","time","level","floor","STEP_START","STEP_END","LINEAR","EASE","EASE_IN","EASE_OUT","EASE_IN_OUT","PREFIX","DATA_SCENE_ID","TIMING_FUNCTION","ROLES","transform","filter","attribute","html","ALIAS","easing","FIXED","_a","MAXIMUM","THRESHOLD","DURATION","FILL_MODE","DIRECTION","ITERATION_COUNT","DELAY","EASING","PLAY_SPEED","EASING_NAME","ITERATION_TIME","PAUSED","ENDED","TIMEUPDATE","ANIMATE","PLAY","RUNNING","ITERATION","START_ANIMATION","PAUSE_ANIMATION","ALTERNATE","REVERSE","ALTERNATE_REVERSE","NORMAL","INFINITE","PLAY_STATE","PLAY_CSS","PREV_TIME","TICK_TIME","CURRENT_TIME","SELECTOR","TRANSFORM_NAME","EASINGS","NAME_SEPARATOR","OPTIONS","EVENTS","events","name","callback","once","isObject","n","_on","isArray","forEach","_this","push","callback2","_i","args","off","callbacks","index","indexOf","splice","data","event","target","type","currentTarget","toArray","apply","value","options","setOptions","isString","split","separator","newOptions","length","prefix","suffix","model","arr","map","v","PropertyObject","clone","join","toValue","splitStyle","str","properties","splitText","obj","i","matches","trim","toPropertyObject","styles","arrayToColorObject","RGBA","stringToBracketObject","text","splitBracket","afterModel","COLOR_MODELS","stringToRGBA","arrayToPropertyObject","stringToColorObject","result","values","splitComma","splitSpace","exec","charAt","toObject","object","size","get","isPropertyObject","setAlias","alias","setRole","names","isProperty","isFixedProperty","roles","fixed","getType","OBJECT","ARRAY","PROPERTY","STRING","NUMBER","isPureObject","constructor","Object","getNames","stack","concat","pop","slice","updateFrame","toFixed","num","round","getValueByNames","undefined","isInProperties","isCheckTrue","role","isRole","isFixed","setPlayCSS","item","isActivate","state","isPausedCSS","isPaused","isEndedCSS","isEnded","makeId","selector","id","random","IS_WINDOW","checkElement","$","getRealId","getId","setId","toId","match","playCSS","isExportCSS","playClassName","ANIMATION","getPlayState","className","addPlayClass","setTime","exportCSS","el","addAnimationEvent","setPlayState","duration","getDuration","isZeroDuration","isFinite","animationend","finish","animationstart","trigger","addEvent","animationiteration","removeEvent","elapsedTime","currentTime","iterationCount","setIteration","getEasing","curveArray","parseFloat","GetterSetter","getter","setter","parent","prototype","camelize","isDirectionReverse","iteration","iteraiontCount","direction","setters","getters","__extends","_super","delay","fillMode","playSpeed","iterationTime","tickTime","prevTime","playState","setEasing","setDuration","getActiveDuration","Infinity","getTime","toTime","timerId","requestAnimationFrame","tick","start","cancelAnimationFrame","end","pause","isTick","isParent","activeDuration","getUnitTime","calculate","isDelay","getIterationTime","splitUnit","unit","passIterationCount","maxIterationCount","currentIterationTime","setIterationTime","isReverse","isFiniteDuration","isForwards","now","to","Animator","EventTrigger","toInnerProperties","orders","arrObj","keys","getKeys","sortOrders","replace","merge","from","FUNCTION","getValue","getPropertyName","OrderMap","set","raw","orderMap","setObject","key","nextValue","children","gets","params","remove","self","firstParam","Frame","_set","has","stylesLength","isUndefined","frame","setOrderObject","frameProperties","cssObject","FILTER","TRANSFORM","toCSSObject","cssArray","clear","lastParam","add","dotArray","a1","a2","b1","b2","v1","dot","dotColor","color1","color2","value1","value2","model1","model2","colorModel","parseInt","dotObject","a1Type","type1","type2","isFunction1","isFunction2","v2","isNaN","dotNumber","dotValue","nextTime","prevValue","ratio","getNearTimeIndex","times","makeAnimationProperties","decamelize","addTime","addEntry","entries","keytime","prevEntry","getEntries","states","nextEntries","intCount","ceil","currentDuration","lastTime","j","entry","divideTime","unshift","load","originalDuration","ratio_1","items_1","obj_1","time2","items","newFrame","elements","sceneId_1","element","setAttribute","SceneItem","eachTime","realTime","innerValue","value_1","getDelay","frames","hasFrame","getDirection","frameTime","needUpdate","getFrame","update","nameMap","updateFrameOrders","removeFrame","append","unshiftTime","firstFrame","prepend","isStartZero","isFunction","setElement","Element","style","targetFunc","attributes","html_1","innerHTML","cssText","toCSS","fromCSS","parentEasing","getNowFrame","temp","prevNameMap","pushKeys","nextMap","setFrame","toFrame","isAccurate","left","right","realEasing","hasName","nowEasing","getNowValue","prevFrame_1","prevOrderMap","keyframes","setTarget","setSelector","playCondition","parentDuration","itemState","reversedStates","reverse","superParent","infiniteIndex","findIndex","finiteStates","reduce","prev","cur","find","timingFunction","selectors","sel","selectorCallback","preselector","peusdo","KEYFRAMES","_toKeyframes","css","styledInjector","destroy","styled","inject","getAnimationElement","original","pauseCSS","addClass","removeClass","endCSS","hasClass","clientWidth","usePrevValue","prevFrame","nextFrame","isUndefinedLeft","isUndefinedRight","indicies","lastEntry","getTotalDuration","getPlaySpeed","sceneDuration","setDelay","setItem","parentStates","totalDuration","animtionElement","Scene","scene","newItem","isItFunction","animate","play","animateItem","others"],"mappings":"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"}