{"version":3,"file":"site.8cd215fa.js","sources":["../../../node_modules/@oddcamp/js-utils/src/selector.js","../../../node_modules/@oddcamp/js-utils/src/event.js","../../../node_modules/@oddcamp/js-utils/src/smart-outline.js","../../../assets/javascripts/common/base/smart-outline.js","../../../assets/javascripts/common/atoms/form-file.js","../../../node_modules/raf-throttle/lib/rafThrottle.js","../../../assets/javascripts/common/atoms/overflow-mask.js","../../../node_modules/js-cookie/dist/js.cookie.mjs","../../../assets/javascripts/common/atoms/reset-cookie.js","../../../assets/javascripts/common/atoms/linkable.js","../../../node_modules/lottie-web/build/player/lottie.js","../../../assets/javascripts/common/components/animation.js","../../../assets/javascripts/common/components/button.js","../../../node_modules/a11y-dialog/dist/a11y-dialog.esm.js","../../../assets/javascripts/common/components/modal.js","../../../node_modules/@oddcamp/js-utils/src/attribute.js","../../../assets/javascripts/common/components/tabbed-content.js","../../../assets/javascripts/common/components/rating-stars.js","../../../assets/javascripts/common/components/cookie-bar.js","../../../assets/javascripts/common/components/share-bar.js","../../../assets/javascripts/common/components/reading-progress.js","../../../node_modules/ssr-window/ssr-window.esm.js","../../../node_modules/dom7/dom7.esm.js","../../../node_modules/swiper/shared/dom.js","../../../node_modules/swiper/shared/utils.js","../../../node_modules/swiper/shared/get-support.js","../../../node_modules/swiper/shared/get-device.js","../../../node_modules/swiper/shared/get-browser.js","../../../node_modules/swiper/core/modules/resize/resize.js","../../../node_modules/swiper/core/modules/observer/observer.js","../../../node_modules/swiper/core/events-emitter.js","../../../node_modules/swiper/core/update/updateSize.js","../../../node_modules/swiper/core/update/updateSlides.js","../../../node_modules/swiper/core/update/updateAutoHeight.js","../../../node_modules/swiper/core/update/updateSlidesOffset.js","../../../node_modules/swiper/core/update/updateSlidesProgress.js","../../../node_modules/swiper/core/update/updateProgress.js","../../../node_modules/swiper/core/update/updateSlidesClasses.js","../../../node_modules/swiper/core/update/updateActiveIndex.js","../../../node_modules/swiper/core/update/updateClickedSlide.js","../../../node_modules/swiper/core/update/index.js","../../../node_modules/swiper/core/translate/getTranslate.js","../../../node_modules/swiper/core/translate/setTranslate.js","../../../node_modules/swiper/core/translate/minTranslate.js","../../../node_modules/swiper/core/translate/maxTranslate.js","../../../node_modules/swiper/core/translate/translateTo.js","../../../node_modules/swiper/core/translate/index.js","../../../node_modules/swiper/core/transition/setTransition.js","../../../node_modules/swiper/core/transition/transitionEmit.js","../../../node_modules/swiper/core/transition/transitionStart.js","../../../node_modules/swiper/core/transition/transitionEnd.js","../../../node_modules/swiper/core/transition/index.js","../../../node_modules/swiper/core/slide/slideTo.js","../../../node_modules/swiper/core/slide/slideToLoop.js","../../../node_modules/swiper/core/slide/slideNext.js","../../../node_modules/swiper/core/slide/slidePrev.js","../../../node_modules/swiper/core/slide/slideReset.js","../../../node_modules/swiper/core/slide/slideToClosest.js","../../../node_modules/swiper/core/slide/slideToClickedSlide.js","../../../node_modules/swiper/core/slide/index.js","../../../node_modules/swiper/core/loop/loopCreate.js","../../../node_modules/swiper/core/loop/loopFix.js","../../../node_modules/swiper/core/loop/loopDestroy.js","../../../node_modules/swiper/core/loop/index.js","../../../node_modules/swiper/core/grab-cursor/setGrabCursor.js","../../../node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","../../../node_modules/swiper/core/grab-cursor/index.js","../../../node_modules/swiper/core/events/onTouchStart.js","../../../node_modules/swiper/core/events/onTouchMove.js","../../../node_modules/swiper/core/events/onTouchEnd.js","../../../node_modules/swiper/core/events/onResize.js","../../../node_modules/swiper/core/events/onClick.js","../../../node_modules/swiper/core/events/onScroll.js","../../../node_modules/swiper/core/events/index.js","../../../node_modules/swiper/core/breakpoints/setBreakpoint.js","../../../node_modules/swiper/core/breakpoints/getBreakpoint.js","../../../node_modules/swiper/core/breakpoints/index.js","../../../node_modules/swiper/core/classes/addClasses.js","../../../node_modules/swiper/core/classes/removeClasses.js","../../../node_modules/swiper/core/classes/index.js","../../../node_modules/swiper/core/images/loadImage.js","../../../node_modules/swiper/core/images/preloadImages.js","../../../node_modules/swiper/core/images/index.js","../../../node_modules/swiper/core/check-overflow/index.js","../../../node_modules/swiper/core/defaults.js","../../../node_modules/swiper/core/moduleExtendParams.js","../../../node_modules/swiper/core/core.js","../../../node_modules/swiper/modules/keyboard/keyboard.js","../../../node_modules/swiper/shared/create-element-if-not-defined.js","../../../node_modules/swiper/modules/navigation/navigation.js","../../../node_modules/swiper/shared/classes-to-selector.js","../../../node_modules/swiper/modules/pagination/pagination.js","../../../node_modules/swiper/modules/a11y/a11y.js","../../../assets/javascripts/common/components/images-carousel.js","../../../assets/javascripts/common/components/characters-teaser.js","../../../assets/javascripts/common/components/characters-bar.js","../../../assets/javascripts/common/components/article-toc.js","../../../assets/javascripts/common/components/product-slider.js","../../../assets/javascripts/common/components/turnstile.js","../../../node_modules/scroll-lock/dist/scroll-lock.js","../../../assets/javascripts/site/components/header.js","../../../assets/javascripts/site/pages/articles-page.js","../../../assets/javascripts/site/pages/product-page.js","../../../assets/javascripts/site/pages/products-page.js"],"sourcesContent":["/*\n ------------------------------------------------------------------------------\n Accepts String, Element, NodeList, Array and returns Array of elements\n\n @param {String|Array|Element|NodeList} elements\n @returns {Array}\n*/\n\nconst getElements = (elements, source = document) => {\n if (typeof elements === `string`) {\n return [...source.querySelectorAll(elements)]\n }\n\n if (isNodeList(elements)) {\n return [...elements]\n }\n\n if (Array.isArray(elements)) {\n return elements\n }\n\n // Element\n return [elements]\n}\n\n/*\n ------------------------------------------------------------------------------\n Based on how Element.closest() works. Returns true if `element` has the\n closest ancestor (or is itself) that matches the `matches` (element|selector)\n\n @param {String|Element} element\n @param {String|Element} matches\n @returns {Bool}\n*/\n\nconst hasClosest = (element, matches) => {\n element = getElements(element)[0]\n\n if (typeof matches === `string`) {\n return element.closest(matches) ? true : false\n } else {\n while (element) {\n if (element === matches) {\n return true\n }\n element = element.parentNode\n }\n return false\n }\n}\n\n/*\n ------------------------------------------------------------------------------\n Returns an Array of parents of `element` that matches the given `selector`\n up until the `until` matching element|selector\n\n @param {String|Element} element\n @param {String} selector [optional]\n @param {String|Element} until [optional]\n @returns {Array}\n*/\n\nconst getParents = (element, selector = ``, until = null) => {\n element = getElements(element)[0]\n element = element.parentNode\n const parents = []\n\n while (element) {\n if (element === document) {\n break\n }\n\n if (!selector || element.matches(selector)) {\n parents.push(element)\n }\n\n if (until) {\n if (typeof until === `string`) {\n if (element.matches(until)) {\n break\n }\n } else if (element === until) {\n break\n }\n }\n\n element = element.parentNode\n }\n return parents\n}\n\n/*\n ------------------------------------------------------------------------------\n Checks if provided `nodes` is a type of NodeList\n\n @param {Any} nodes\n @returns {Bool}\n*/\n\nconst isNodeList = (nodes) => {\n const stringRepr = Object.prototype.toString.call(nodes)\n\n return (\n typeof nodes === `object` &&\n /^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(stringRepr) &&\n typeof nodes.length === `number` &&\n (nodes.length === 0 ||\n (typeof nodes[0] === `object` && nodes[0].nodeType > 0))\n )\n}\n\n/*\n ------------------------------------------------------------------------------\n*/\n\nexport { getElements, hasClosest, getParents, isNodeList }\n","import { getElements } from \"./selector.js\"\n\n// local variables\n\nconst nativeEvents = [`click`, `focus`, `blur`]\n\n/*\n ------------------------------------------------------------------------------\n Adds event listener to an element. Using namespaces is available.\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} eventNames Space separated event names with optional namespaces\n @param {Function} callback The function to execute when the event occurs\n @param {Object} options [optional] Optional options\n*/\n\nconst addEventListener = (elements, eventNames, callback, options = false) => {\n elements = getElements(elements)\n\n elements.forEach((element) => {\n // eslint-disable-next-line no-prototype-builtins\n if (!element.hasOwnProperty(`registeredEvents`)) {\n element.registeredEvents = []\n }\n\n eventNames.split(` `).forEach((eventName) => {\n const [eventNameType] = eventName.split(`.`)\n\n const theCallback = (...args) => callback(...args, element)\n\n element.registeredEvents.push({\n eventName: eventName,\n callback: theCallback,\n options: options,\n })\n\n element.addEventListener(eventNameType, theCallback, options)\n })\n })\n}\n\n/*\n ------------------------------------------------------------------------------\n Delegates event listener to an element. Using namespaces is available.\n\n @param {String} elements Selector\n @param {String} eventNames Space separated event names with optional namespaces\n @param {Function} callback The function to execute when the event occurs\n*/\n\nconst delegateEventListener = (selector, eventNames, callback) => {\n addEventListener(document, eventNames, (e) => {\n const element = e.target.closest(selector)\n if (element) {\n callback(e, element)\n }\n })\n}\n\n/*\n ------------------------------------------------------------------------------\n Removes event listener from an element. Using namespaces is available.\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} eventNames Space separated event names with optional namespaces\n @param {Function} callback The function to execute when the event occurs\n @param {Object} options [optional] Optional options\n*/\n\nconst removeEventListener = (\n elements,\n eventName = false,\n callback = false,\n options = false\n) => {\n elements = getElements(elements)\n\n elements.forEach((element) => {\n // eslint-disable-next-line no-prototype-builtins\n if (!element.hasOwnProperty(`registeredEvents`)) {\n return\n }\n\n // remove all event listeners\n\n if (!eventName && !callback && !options) {\n element.registeredEvents.forEach((regEvent) => {\n element.removeEventListener(\n regEvent.eventName.split(`.`)[0],\n regEvent.callback,\n regEvent.options\n )\n })\n\n element.registeredEvents = []\n return\n }\n\n // remove specific and/or namespaced event listeners\n\n const [eventNameType, eventNameSpace] = eventName.split(`.`)\n\n element.registeredEvents.forEach((regEvent) => {\n const [regEventNameType, regEventNameSpace] =\n regEvent.eventName.split(`.`)\n const regEventNameMatch =\n regEvent.eventName === eventName ||\n (!eventNameSpace &&\n eventNameType &&\n eventNameType === regEventNameType) ||\n (!eventNameType &&\n eventNameSpace &&\n eventNameSpace === regEventNameSpace)\n let doRemove = false\n\n // only 'eventName' provided\n if (eventName && !callback && !options) {\n if (regEventNameMatch) {\n doRemove = true\n }\n }\n\n // only 'callback' provided\n else if (!eventName && callback && !options) {\n if (callback === regEvent.callback) {\n doRemove = true\n }\n }\n\n // only 'options' provided\n else if (!eventName && !callback && options) {\n if (options === regEvent.options) {\n doRemove = true\n }\n }\n\n // 'eventName' and 'callback' provided\n else if (eventName && callback && !options) {\n if (regEventNameMatch && callback === regEvent.callback) {\n doRemove = true\n }\n }\n\n // 'callback' and 'options' provided\n else if (!eventName && callback && options) {\n if (callback === regEvent.callback && options === regEvent.options) {\n doRemove = true\n }\n }\n\n // everything's provided\n else {\n if (\n regEventNameMatch &&\n callback === regEvent.callback &&\n options === regEvent.options\n ) {\n doRemove = true\n }\n }\n\n if (doRemove) {\n element.removeEventListener(\n regEventNameType,\n regEvent.callback,\n regEvent.options\n )\n element.registeredEvents = element.registeredEvents.filter(\n (e) => e !== regEvent\n )\n }\n })\n })\n}\n\n/*\n ------------------------------------------------------------------------------\n Triggers event on an element. Using namespaces is available.\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} eventNames Space separated event names with optional namespaces\n @param {Mixed} data The data to pass. Not available for `nativeEvents` events\n*/\n\nconst triggerEvent = (elements, eventNames, data = null) => {\n elements = getElements(elements)\n\n elements.forEach((element) => {\n eventNames.split(` `).forEach((eventName) => {\n const [eventNameType, eventNameSpace] = eventName.split(`.`)\n let eventTriggered = false\n\n // trigger registered event\n // eslint-disable-next-line no-prototype-builtins\n if (element.hasOwnProperty(`registeredEvents`)) {\n const eventsTriggered = []\n\n element.registeredEvents.forEach((registeredEvent) => {\n const [regEventNameType, regEventNameSpace] =\n registeredEvent.eventName.split(`.`)\n\n // do not trigger the exact events more than once\n if (eventsTriggered.includes(registeredEvent.eventName)) {\n return\n }\n\n if (\n // type (and namespace) trigger (e.g. 'click.goBaby')\n eventName === registeredEvent.eventName ||\n // type only trigger (e.g. 'click')\n (!eventNameSpace && eventNameType === regEventNameType) ||\n // namespace only trigger (e.g. '.goBaby')\n (!eventNameType && eventNameSpace === regEventNameSpace)\n ) {\n // trigger native event\n if (nativeEvents.includes(regEventNameType)) {\n element[regEventNameType]()\n }\n // trigger custom event\n else {\n const event = new CustomEvent(registeredEvent.eventName, {\n detail: data,\n })\n element.dispatchEvent(event)\n }\n\n eventsTriggered.push(registeredEvent.eventName)\n eventTriggered = true\n }\n })\n }\n\n // trigger non-registered event\n if (!eventTriggered && eventNameType) {\n // trigger native event\n if (nativeEvents.includes(eventNameType)) {\n element[eventNameType]()\n }\n // trigger custom event\n else {\n const event = new CustomEvent(eventNameType, {\n detail: data,\n })\n element.dispatchEvent(event)\n }\n }\n })\n })\n}\n\n/*\n ------------------------------------------------------------------------------\n*/\n\nexport {\n addEventListener,\n delegateEventListener,\n removeEventListener,\n triggerEvent,\n}\n","import { addEventListener, removeEventListener } from \"./event.js\"\n\n// local functions\n\nconst insertStyles = (selectors) => {\n const css = `\n ${selectors.join(`, `)} {\n outline: none !important;\n }\n `\n\n const newStyle = document.createElement(`style`)\n newStyle.setAttribute(`data-smart-outline`, ``)\n newStyle.appendChild(document.createTextNode(css))\n document.head.appendChild(newStyle)\n}\n\nconst removeOldStyles = () => {\n const oldStyle = getOldStylesEl()\n if (oldStyle) {\n oldStyle.parentNode.removeChild(oldStyle)\n }\n}\n\nconst getOldStylesEl = () => {\n return document.head.querySelector(`style[data-smart-outline]`)\n}\n\n/*\n ------------------------------------------------------------------------------\n Disables outline on mouse and re-enables on keyboard activity\n\n @param {Array} selectors The list of selectors to disable outline for\n*/\n\nconst initSmartOutline = (selectors) => {\n selectors = selectors || [\n `input:focus`,\n `button:focus`,\n `textarea:focus`,\n `select:focus`,\n ]\n\n haltSmartOutline()\n insertStyles(selectors)\n\n addEventListener(document, `mousedown.smartOutline`, function () {\n if (!getOldStylesEl()) {\n insertStyles(selectors)\n }\n })\n\n addEventListener(document, `keyup.smartOutline`, function (e) {\n if (e.which == 9) {\n // tab\n removeOldStyles()\n }\n })\n}\n\n/*\n ------------------------------------------------------------------------------\n Temporarily reveals outline\n*/\n\nconst showSmartOutline = () => {\n removeOldStyles()\n}\n\n/*\n ------------------------------------------------------------------------------\n Halts Smart Outline\n*/\n\nconst haltSmartOutline = () => {\n removeOldStyles()\n removeEventListener(document, `mousedown.smartOutline`)\n removeEventListener(document, `keyup.smartOutline`)\n}\n\n/*\n ------------------------------------------------------------------------------\n*/\n\nexport { initSmartOutline as default, haltSmartOutline, showSmartOutline }\n","import initSmartOutline from \"@oddcamp/js-utils/src/smart-outline\"\n\ninitSmartOutline([\n `input:focus`,\n `button:focus`,\n `textarea:focus`,\n `select:focus`,\n `.choices.is-focused`,\n `.choices__item.is-highlighted`,\n])\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass FormFile extends Controller {\n static values = {\n selectedText: String,\n selected: { type: Boolean, default: false },\n }\n\n static targets = [`placeholder`]\n\n #placeholderHtml = ``\n\n connect() {\n this.#placeholderHtml = this.placeholderTarget.innerHTML\n }\n\n changed(e) {\n let text = ``\n\n if (e.target.files && e.target.files.length > 1)\n text = (this.selectedTextValue || ``).replace(\n `{{COUNT}}`,\n e.target.files.length\n )\n else text = e.target.value.split(`\\\\`).pop()\n\n this.placeholderTarget.innerHTML = text || this.#placeholderHtml\n this.selectedValue = !!(e.target.files && e.target.files.length)\n }\n}\n\nStimulus.register(`form-file`, FormFile)\n","'use strict';\n\nvar rafThrottle = function rafThrottle(callback) {\n var requestId = null;\n var lastArgs;\n\n var later = function later(context) {\n return function () {\n requestId = null;\n callback.apply(context, lastArgs);\n };\n };\n\n var throttled = function throttled() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (requestId === null) {\n requestId = requestAnimationFrame(later(this));\n }\n };\n\n throttled.cancel = function () {\n cancelAnimationFrame(requestId);\n requestId = null;\n };\n\n return throttled;\n};\n\nmodule.exports = rafThrottle;\n","import { Controller } from \"@hotwired/stimulus\"\nimport throttle from \"raf-throttle\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass OverflowMask extends Controller {\n static values = { edges: String }\n\n #scrollHandler = null\n #resizeHandler = null\n\n connect() {\n this.element.classList.add(`overflow-mask`)\n this.#scrollHandler = throttle(this.setEdges)\n this.#resizeHandler = throttle(this.setEdges)\n\n this.element.addEventListener(`scroll`, this.#scrollHandler, {\n passive: true,\n })\n\n window.addEventListener(`resize`, this.#resizeHandler, { passive: true })\n\n this.setEdges()\n }\n\n disconnect() {\n this.element.removeEventListener(`resize`, this.#scrollHandler, {\n passive: true,\n })\n\n window.removeEventListener(`resize`, this.#resizeHandler, { passive: true })\n }\n\n setEdges = () => {\n const edges = []\n const el = this.element\n\n if (el.scrollWidth > el.offsetWidth) {\n if (el.scrollLeft > 5) edges.push(`left`)\n if (el.scrollLeft + el.offsetWidth <= el.scrollWidth - 5)\n edges.push(`right`)\n }\n\n if (el.scrollHeight > el.offsetHeight) {\n if (el.scrollTop > 5) edges.push(`top`)\n if (el.scrollTop + el.offsetHeight <= el.scrollHeight - 5)\n edges.push(`bottom`)\n }\n\n this.edgesValue = edges\n }\n}\n\nStimulus.register(`overflow-mask`, OverflowMask)\n","/*! js-cookie v3.0.1 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport default api;\n","import { Controller } from \"@hotwired/stimulus\"\nimport Cookies from \"js-cookie\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass ResetCookie extends Controller {\n static values = { name: String }\n\n do() {\n Cookies.remove(this.nameValue)\n window.scrollTo({ top: 0, behavior: `instant` })\n window.location.reload()\n }\n}\n\nStimulus.register(`reset-cookie`, ResetCookie)\n","import { delegateEventListener } from \"@oddcamp/js-utils/src/event\"\n\ndelegateEventListener(`[data-linkable]`, `click`, (e, target) => {\n if (e.defaultPrevented) return\n if (e.target.closest(`a, button, label, input, select, textarea`)) return\n\n const url = (target.dataset.linkable || ``).trim()\n if (!url) return\n\n if (e.ctrlKey || e.metaKey) {\n window.open(url, `_blank`)\n } else if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n})\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n xhr.open('GET', path, true);\n } catch (error) {\n xhr.open('GET', fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_pause');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_play');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.9.6';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n var zeroWidthJoiner = [65039, 8205];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName);\n\n var index = _char2.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue;\n\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof$2(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n\n var registeredEffects = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n function registerEffect(id, effect, countsAsEffect) {\n registeredEffects[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n var filId;\n var fil;\n var gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n // eslint-disable-line eqeqeq\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n // eslint-disable-line eqeqeq\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n // eslint-disable-line eqeqeq\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n /* var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix); */\n /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n\n i += 1;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = len;\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n };\n\n function CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n /* if(op === 1){\r\n return;\r\n } */\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n\n if (kfw > width) {\n width = kfw;\n }\n }\n\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$1(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof(a);\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof(a);\n\n var tOfB = _typeof(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n return ob;\n }();\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect(20, SVGTintFilter, true);\n registerEffect(21, SVGFillFilter, true);\n registerEffect(22, SVGStrokeEffect, false);\n registerEffect(23, SVGTritoneFilter, true);\n registerEffect(24, SVGProLevelsFilter, true);\n registerEffect(25, SVGDropShadowEffect, true);\n registerEffect(28, SVGMatte3Effect, false);\n registerEffect(29, SVGGaussianBlurEffect, true);\n\n return lottie;\n\n}));\n","import { Controller } from \"@hotwired/stimulus\"\nimport bodymovin from \"lottie-web\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass Animation extends Controller {\n static targets = [`stage`]\n #animation\n\n connect() {\n const animationName = this.stageTarget.dataset.animationName\n const animationLoop = this.stageTarget.hasAttribute(`data-animation-loop`)\n const animationAutoplay =\n this.stageTarget.hasAttribute(`data-animation-loop`)\n\n this.#animation = bodymovin.loadAnimation({\n container: this.stageTarget,\n renderer: `svg`,\n loop: animationLoop,\n autoplay: animationAutoplay,\n path: `/animations/${animationName}.json`,\n })\n }\n\n disconnect() {\n this.#animation.destroy()\n }\n}\n\nStimulus.register(`animation`, Animation)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass Button extends Controller {\n static values = { disableOnFormSubmit: Boolean }\n\n static targets = [`text`]\n\n connect() {\n this.initDisableOnFormSubmit(true)\n\n document.documentElement.addEventListener(\n `turbo:before-visit`,\n this.beforeTurboVisit\n )\n }\n\n disconnect() {\n this.initDisableOnFormSubmit(false)\n\n document.documentElement.removeEventListener(\n `turbo:before-visit`,\n this.beforeTurboVisit\n )\n }\n\n initDisableOnFormSubmit = (on) => {\n if (this.disableOnFormSubmitValue) {\n const formEl = this.element.closest(`form`)\n if (formEl) {\n formEl[on ? `addEventListener` : `removeEventListener`](\n `submit`,\n this.disableOnFormSubmit\n )\n }\n }\n }\n\n disableOnFormSubmit = () => {\n this.setDisabled(true)\n this.setLoading(true)\n }\n\n beforeTurboVisit = () => {\n if (this.disableOnFormSubmitValue) {\n this.setDisabled(false)\n this.setLoading(false)\n }\n }\n\n setDisabled = (disabled = true) => {\n this.element.disabled = disabled\n this.element.classList.toggle(`button--disabled`, disabled)\n }\n\n setLoading = (loading = true) => {\n this.element.classList.toggle(`button--loading`, loading)\n }\n\n setText = (text = ``) => {\n this.textTarget.innerHTML = text\n }\n\n setTextColor = (color) => {\n this.element.style.setProperty(`--text-color`, `var(--color-${color})`)\n }\n\n setFillColor = (color) => {\n this.element.style.setProperty(`--fill-color`, `var(--color-${color})`)\n }\n\n setOutlineColor = (color) => {\n this.element.style.setProperty(`--outline-color`, `var(--color-${color})`)\n }\n}\n\nStimulus.register(`button`, Button)\n","var focusableSelectors = [\n 'a[href]:not([tabindex^=\"-\"])',\n 'area[href]:not([tabindex^=\"-\"])',\n 'input:not([type=\"hidden\"]):not([type=\"radio\"]):not([disabled]):not([tabindex^=\"-\"])',\n 'input[type=\"radio\"]:not([disabled]):not([tabindex^=\"-\"])',\n 'select:not([disabled]):not([tabindex^=\"-\"])',\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\n 'button:not([disabled]):not([tabindex^=\"-\"])',\n 'iframe:not([tabindex^=\"-\"])',\n 'audio[controls]:not([tabindex^=\"-\"])',\n 'video[controls]:not([tabindex^=\"-\"])',\n '[contenteditable]:not([tabindex^=\"-\"])',\n '[tabindex]:not([tabindex^=\"-\"])',\n];\n\nvar TAB_KEY = 'Tab';\nvar ESCAPE_KEY = 'Escape';\n\n/**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} element\n */\nfunction A11yDialog(element) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n this.$el = element;\n this.shown = false;\n this._id = this.$el.getAttribute('data-a11y-dialog') || this.$el.id;\n this._previouslyFocused = null;\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create();\n}\n\n/**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\nA11yDialog.prototype.create = function () {\n this.$el.setAttribute('aria-hidden', true);\n this.$el.setAttribute('aria-modal', true);\n this.$el.setAttribute('tabindex', -1);\n\n if (!this.$el.hasAttribute('role')) {\n this.$el.setAttribute('role', 'dialog');\n }\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this._id + '\"]');\n this._openers.forEach(\n function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this)\n );\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n const $el = this.$el;\n\n this._closers = $$('[data-a11y-dialog-hide]', this.$el)\n // This filter is necessary in case there are nested dialogs, so that\n // only closers from the current dialog are retrieved and effective\n .filter(function (closer) {\n // Testing for `[aria-modal=\"true\"]` is not enough since this attribute\n // and the collect of closers is done at instantation time, when nested\n // dialogs might not have yet been instantiated. Note that if the dialogs\n // are manually instantiated, this could still fail because none of these\n // selectors would match; this would cause closers to close all parent\n // dialogs instead of just the current one\n return closer.closest('[aria-modal=\"true\"], [data-a11y-dialog]') === $el\n })\n .concat($$('[data-a11y-dialog-hide=\"' + this._id + '\"]'));\n\n this._closers.forEach(\n function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this\n};\n\n/**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this\n }\n\n // Keep a reference to the currently focused element to be able to restore\n // it later\n this._previouslyFocused = document.activeElement;\n this.$el.removeAttribute('aria-hidden');\n this.shown = true;\n\n // Set the focus to the dialog element\n moveFocusToDialog(this.$el);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this\n};\n\n/**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this\n }\n\n this.shown = false;\n this.$el.setAttribute('aria-hidden', 'true');\n\n // If there was a focused element before the dialog was opened (and it has a\n // `focus` method), restore the focus back to it\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/108\n if (this._previouslyFocused && this._previouslyFocused.focus) {\n this._previouslyFocused.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this\n};\n\n/**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\nA11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(\n function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this)\n );\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(\n function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this\n};\n\n/**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this\n};\n\n/**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.off = function (type, handler) {\n var index = (this._listeners[type] || []).indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this\n};\n\n/**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any). Also\n * dispatch a custom event on the DOM element itself to make it possible to\n * react to the lifecycle of auto-instantiated dialogs.\n *\n * @access private\n * @param {string} type\n * @param {CustomEvent} event\n */\nA11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n var domEvent = new CustomEvent(type, { detail: event });\n\n this.$el.dispatchEvent(domEvent);\n\n listeners.forEach(\n function (listener) {\n listener(this.$el, event);\n }.bind(this)\n );\n};\n\n/**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._bindKeypress = function (event) {\n // This is an escape hatch in case there are nested dialogs, so the keypresses\n // are only reacted to for the most recent one\n const focused = document.activeElement;\n if (focused && focused.closest('[aria-modal=\"true\"]') !== this.$el) return\n\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog, unless its role\n // is 'alertdialog', which should be modal\n if (\n this.shown &&\n event.key === ESCAPE_KEY &&\n this.$el.getAttribute('role') !== 'alertdialog'\n ) {\n event.preventDefault();\n this.hide(event);\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.key === TAB_KEY) {\n trapTabKey(this.$el, event);\n }\n};\n\n/**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within a dialog element (either\n // this one or another one in case of nested dialogs) or within an element\n // with the `data-a11y-dialog-focus-trap-ignore` attribute, move it back to\n // its first focusable child.\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/177\n if (\n this.shown &&\n !event.target.closest('[aria-modal=\"true\"]') &&\n !event.target.closest('[data-a11y-dialog-ignore-focus-trap]')\n ) {\n moveFocusToDialog(this.$el);\n }\n};\n\n/**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\nfunction toArray(collection) {\n return Array.prototype.slice.call(collection)\n}\n\n/**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\nfunction $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector))\n}\n\n/**\n * Set the focus to the first element with `autofocus` with the element or the\n * element itself\n *\n * @param {Element} node\n */\nfunction moveFocusToDialog(node) {\n var focused = node.querySelector('[autofocus]') || node;\n\n focused.focus();\n}\n\n/**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction getFocusableChildren(node) {\n return $$(focusableSelectors.join(','), node).filter(function (child) {\n return !!(\n child.offsetWidth ||\n child.offsetHeight ||\n child.getClientRects().length\n )\n })\n}\n\n/**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\nfunction trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (\n !event.shiftKey &&\n focusedItemIndex === focusableChildren.length - 1\n ) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n}\n\nfunction instantiateDialogs() {\n $$('[data-a11y-dialog]').forEach(function (node) {\n new A11yDialog(node);\n });\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', instantiateDialogs);\n } else {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(instantiateDialogs);\n } else {\n window.setTimeout(instantiateDialogs, 16);\n }\n }\n}\n\nexport { A11yDialog as default };\n","import { Controller } from \"@hotwired/stimulus\"\nimport Stimulus from \"../../common/utils/stimulus\"\n\nimport A11yDialog from \"a11y-dialog\"\nclass Modal extends Controller {\n connect() {\n this.dialog = new A11yDialog(this.element)\n this.dialog.show()\n }\n\n disconnect() {\n this.dialog.destroy()\n }\n\n hide() {\n this.element.remove()\n }\n}\n\nStimulus.register(`modal`, Modal)\n","import { getElements } from \"./selector.js\"\n\n// local functions\n\nconst manipulateClass = (type, elements, classnames, force = undefined) => {\n elements = getElements(elements)\n classnames = classnames.split(` `)\n\n elements.forEach((element) => {\n classnames.forEach((classname) => {\n if (type == `toggle`) {\n element.classList.toggle(classname, force)\n } else {\n element.classList[type](classname)\n }\n })\n })\n}\n\nconst getElement = (element) => {\n return typeof element === `string` ? document.querySelector(element) : element\n}\n\n/*\n ------------------------------------------------------------------------------\n An extended implementation of Element.classList.add(): adds classname(s) to\n single or multiple elements\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} classnames Space separated if multiple\n*/\n\nconst addClass = (...args) => {\n manipulateClass(`add`, ...args)\n}\n\n/*\n ------------------------------------------------------------------------------\n An extended implementation of Element.classList.remove(): removes classname(s)\n from single or multiple elements\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} classnames Space separated if multiple\n*/\n\nconst removeClass = (...args) => {\n manipulateClass(`remove`, ...args)\n}\n\n/*\n ------------------------------------------------------------------------------\n An extended implementation of Element.classList.remove(): toggles classname(s)\n from single or multiple elements\n\n @param {String|Element|NodeList|Array} elements Selector, single or multiple elements\n @param {String} classnames Space separated if multiple\n @param {Bool} [optional] force\n*/\n\nconst toggleClass = (...args) => {\n manipulateClass(`toggle`, ...args)\n}\n\n/*\n ------------------------------------------------------------------------------\n Check if an element contains at least one classname\n\n @param {String|Element} elements Selector, single element\n @param {String} classnames Space separated if multiple\n*/\n\nconst containsAnyClass = (element, classnames) => {\n element = getElement(element)\n if (!element) return null\n\n let contains = false\n classnames.split(` `).some((classname) => {\n contains = element.classList.contains(classname)\n return contains\n })\n\n return contains\n}\n\n/*\n ------------------------------------------------------------------------------\n Check if an element contains all classnames\n\n @param {String|Element} elements Selector, single element\n @param {String} classnames Space separated if multiple\n*/\n\nconst containsAllClasses = (element, classnames) => {\n element = getElement(element)\n if (!element) return null\n\n let contains = false\n classnames.split(` `).every((classname) => {\n contains = element.classList.contains(classname)\n return contains\n })\n\n return contains\n}\n\n/*\n ------------------------------------------------------------------------------\n*/\n\nexport {\n addClass,\n removeClass,\n toggleClass,\n containsAnyClass,\n containsAllClasses,\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { removeClass, addClass } from \"@oddcamp/js-utils/src/attribute\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass TabbedContent extends Controller {\n static values = {\n activeIndex: Number,\n }\n\n static targets = [`tabButton`, `tabContainer`, `content`]\n\n #clicked = false\n #onTabSwitchHandlers = []\n\n connect() {\n if (!this.hasTabContainerTarget) return\n\n window.addEventListener(`keyup`, this.windowKeyup, { passive: true })\n }\n\n disconnect() {\n if (!this.hasTabContainerTarget) return\n\n window.removeEventListener(`keyup`, this.windowKeyup, { passive: true })\n }\n\n activeIndexValueChanged() {\n if (!this.hasTabContainerTarget) return\n\n removeClass(this.tabContainerTargets, `--active`)\n addClass(this.tabContainerTargets[this.activeIndexValue], `--active`)\n\n this.tabButtonTargets.forEach((t) => {\n t.ariaSelected = false\n t.tabIndex = -1\n })\n this.tabButtonTargets[this.activeIndexValue].ariaSelected = true\n this.tabButtonTargets[this.activeIndexValue].tabIndex = 0\n if (this.#clicked) this.tabButtonTargets[this.activeIndexValue].focus()\n this.#clicked = false\n\n removeClass(this.contentTargets, `--active`)\n const content = this.contentTargets[this.activeIndexValue]\n if (content) addClass(content, `--active`)\n\n this.#onTabSwitchHandlers.forEach((handler) =>\n handler({ element: this.element, activeIndex: this.activeIndexValue })\n )\n }\n\n switchTab(e) {\n this.#clicked = true\n this.activeIndexValue = this.tabButtonTargets.indexOf(e.currentTarget)\n }\n\n windowKeyup = (e) => {\n if (!this.hasTabContainerTarget) return\n\n if (\n [`ArrowLeft`, `ArrowRight`, `ArrowUp`, `ArrowDown`].includes(e.key) &&\n this.tabButtonTargets.indexOf(document.activeElement) > -1\n ) {\n this.#clicked = true\n let index = this.activeIndexValue\n if ([`ArrowLeft`, `ArrowUp`].includes(e.key)) {\n index--\n this.activeIndexValue =\n index < 0 ? this.tabButtonTargets.length - 1 : index\n } else {\n index++\n this.activeIndexValue =\n index >= this.tabButtonTargets.length ? 0 : index\n }\n }\n }\n\n onTabSwitch(handler) {\n this.#onTabSwitchHandlers.push(handler)\n }\n}\n\nStimulus.register(`tabbed-content`, TabbedContent)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass RatingStars extends Controller {\n static targets = [`stars`, `selected`, `ratingform`, `submitbutton`]\n\n static values = {\n rating: Number,\n }\n\n connect() {\n console.log(this.submitbuttonTarget)\n this.ratingformTarget.style.opacity = 0\n this.submitbuttonTarget.disabled = true\n this.ratingValue = 0\n this.selectedTarget.style.width = `${this.ratingValue * 20}%`\n }\n\n mouseOver(e) {\n const increments = Math.floor(this.starsTarget.clientWidth / 10)\n const rating = Math.min(Math.round(e.layerX / increments) / 2, 5)\n this.selectedTarget.style.width = `${rating * 20}%`\n }\n\n mouseOut(e) {\n this.selectedTarget.style.width = `${this.ratingValue * 20}%`\n }\n\n click(e) {\n this.ratingformTarget.style.opacity = 1\n this.submitbuttonTarget.disabled = false\n const increments = Math.floor(this.starsTarget.clientWidth / 10)\n this.ratingValue = Math.min(Math.round(e.layerX / increments) / 2, 5)\n this.ratingformTarget.value = this.ratingValue\n }\n}\n\nStimulus.register(`rating-stars`, RatingStars)\n","import { delegateEventListener } from \"@oddcamp/js-utils/src/event\"\nimport { Controller } from \"@hotwired/stimulus\"\nimport Cookies from \"js-cookie\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass CookieBar extends Controller {\n static values = { name: String }\n\n accept() {\n this.set(`accept`)\n }\n\n deny() {\n this.set(`deny`)\n }\n\n set = (value) => {\n Cookies.set(this.nameValue, value, { expires: 365 })\n this.element.classList.add(`hidden`)\n }\n}\n\nStimulus.register(`cookie-bar`, CookieBar)\n\n// resetter\n\ndelegateEventListener(`.js--cookie-consent-reset`, `click`, (e, triggerEl) => {\n e.preventDefault()\n Cookies.remove(triggerEl.dataset.cookieName)\n // window.scrollTo(0, 0)\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: `instant`,\n })\n window.location.reload()\n})\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass ShareBar extends Controller {\n static values = { url: String, copied: Boolean }\n\n copyUrl() {\n window.navigator.clipboard.writeText(this.urlValue)\n this.copiedValue = true\n window.setTimeout(() => (this.copiedValue = false), 4000)\n }\n}\n\nStimulus.register(`share-bar`, ShareBar)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass ReadingProgress extends Controller {\n static targets = [`progress`]\n\n connect() {\n window.addEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n disconnect() {\n window.removeEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n winScroll = () => {\n const parent = this.element.parentNode\n const { top, height } = parent.getBoundingClientRect()\n const headerStickyHeight =\n window.parseInt(\n window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(`--header-sticky-height`)\n ) || 0\n\n this.progressTarget.value =\n top < 0 && height > window.innerHeight\n ? (-top * 100) / (height - headerStickyHeight)\n : 0\n }\n}\n\nStimulus.register(`reading-progress`, ReadingProgress)\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n\n const handlePointerUp = () => {\n swiper.a11y.clicked = false;\n };\n\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n }\n };\n\n const init = () => {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n initSlides(); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(``);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","import { Controller } from \"@hotwired/stimulus\"\nimport Swiper, { Navigation, Pagination, A11y, Keyboard } from \"swiper\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\n// item\n\nclass ImagesCarousel extends Controller {\n static values = { prevMsg: String, nextMsg: String, paginationMsg: String }\n\n static targets = [`swiper`, `prev`, `next`, `pagination`]\n\n connect() {\n new Swiper(this.swiperTarget, {\n modules: [Navigation, Pagination, A11y, Keyboard],\n slidesPerView: 1,\n spaceBetween: 20,\n navigation: {\n prevEl: this.prevTarget,\n nextEl: this.nextTarget,\n },\n pagination: {\n el: this.paginationTarget,\n clickable: true,\n },\n a11y: {\n prevSlideMessage: this.prevMsgValue,\n nextSlideMessage: this.nextMsgValue,\n paginationBulletMessage: `${this.paginationMsgValue} {{index}}`,\n },\n keyboard: {\n enabled: true,\n },\n })\n }\n}\n\nStimulus.register(`images-carousel`, ImagesCarousel)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Swiper, { Pagination, A11y, Keyboard } from \"swiper\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\n// item\n\nclass CharactersTeaser extends Controller {\n static values = {\n swipered: Boolean,\n paginationShown: Boolean,\n paginationMsg: String,\n }\n\n static targets = [`swiper`, `pagination`]\n\n connect() {\n this.swiperedValue = true\n\n const swiper = new Swiper(this.swiperTarget, {\n modules: [Pagination, A11y, Keyboard],\n spaceBetween: 20,\n slidesPerView: 1,\n breakpoints: {\n 980: {\n slidesPerView: 3,\n },\n 400: {\n slidesPerView: 2,\n },\n 0: {\n slidesPerView: 1,\n },\n },\n pagination: {\n el: this.paginationTarget,\n clickable: true,\n },\n a11y: {\n paginationBulletMessage: `${this.paginationMsgValue} {{index}}`,\n },\n keyboard: {\n enabled: true,\n },\n })\n\n swiper.on(\n `paginationUpdate`,\n () => (this.paginationShownValue = swiper.pagination.bullets.length > 1)\n )\n }\n}\n\nStimulus.register(`characters-teaser`, CharactersTeaser)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass CharactersBar extends Controller {\n static targets = [`bar`]\n\n connect() {\n window.addEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n disconnect() {\n window.removeEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n winScroll = () => {\n const sticky =\n window.scrollY > window.innerHeight / 2 &&\n window.scrollY < document.body.scrollHeight - window.innerHeight * 1.5\n if (sticky) this.barTarget.classList.add(`--visible`)\n else this.barTarget.classList.remove(`--visible`)\n }\n}\n\nStimulus.register(`characters-bar`, CharactersBar)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass ArticleTOC extends Controller {\n // Query all headings in the article body\n #articleHeadings = document\n .getElementById(`article-body`)\n .querySelectorAll(`h1, h2, h3, h4, h5, h6`)\n\n connect() {\n // If article has no headings, skip\n // check for empty headings, and don't count those\n let count = 0\n this.#articleHeadings.forEach((h, i) => {\n if (!h.innerText) return\n else count++\n })\n\n if (count === 0) return\n\n // Create and append the title for the TOC\n const tocTitle = document.createElement(`h2`)\n tocTitle.innerText = `In this article`\n this.element.append(tocTitle)\n\n // Create and append the TOC list\n const tocList = document.createElement(`ul`)\n this.element.append(tocList)\n\n // Cycle through all article headings\n this.#articleHeadings.forEach((h, i) => {\n // if heading is empty, skip this\n if (!h.innerText) return\n\n // Set heading ID\n const headingId = `heading-${i}`\n\n // Create one li for each heading in the article\n const tocHeading = document.createElement(`li`)\n\n // Create one a for each heading in the article\n const tocLink = document.createElement(`a`)\n\n // Set the ID for this heading\n h.id = headingId\n\n // Set the link on the TOC item to the corresponding heading\n tocLink.href = `#${headingId}`\n\n // Set the link's title the same as the heading\n tocLink.innerText = h.outerText\n\n // Add link to the list item\n tocHeading.append(tocLink)\n\n // Add the list item to the TOC list\n tocList.append(tocHeading)\n })\n }\n}\n\nStimulus.register(`article-toc`, ArticleTOC)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Swiper, { Pagination, A11y, Keyboard } from \"swiper\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\n// item\n\nclass ProductSlider extends Controller {\n static values = {\n swipered: Boolean,\n paginationShown: Boolean,\n columns: String,\n paginationMsg: String,\n }\n\n static targets = [`swiper`, `pagination`]\n\n connect() {\n this.swiperedValue = true\n\n const swiper = new Swiper(this.swiperTarget, {\n modules: [Pagination, A11y, Keyboard],\n spaceBetween: 20,\n slidesPerView: this.columnsValue,\n breakpoints: {\n 600: {\n slidesPerView: 2,\n },\n 0: {\n slidesPerView: 1,\n },\n },\n pagination: {\n el: this.paginationTarget,\n clickable: true,\n },\n a11y: {\n paginationBulletMessage: `${this.paginationMsgValue} {{index}}`,\n },\n keyboard: {\n enabled: true,\n },\n })\n\n swiper.on(\n `paginationUpdate`,\n () => (this.paginationShownValue = swiper.pagination.bullets.length > 1)\n )\n }\n}\n\nStimulus.register(`product-slider`, ProductSlider)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass Turnstile extends Controller {\n static targets = [`container`]\n static values = { sitekey: String }\n\n connect() {\n this.turnstileId = window.turnstile.render(this.containerTarget, {\n sitekey: this.sitekeyValue,\n theme: `light`,\n })\n }\n\n disconnect() {\n window.turnstile.remove(this.turnstileId)\n }\n}\n\nStimulus.register(`turnstile`, Turnstile)\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"scrollLock\"] = factory();\n\telse\n\t\troot[\"scrollLock\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/tools.js\nvar argumentAsArray = function argumentAsArray(argument) {\n return Array.isArray(argument) ? argument : [argument];\n};\nvar isElement = function isElement(target) {\n return target instanceof Node;\n};\nvar isElementList = function isElementList(nodeList) {\n return nodeList instanceof NodeList;\n};\nvar eachNode = function eachNode(nodeList, callback) {\n if (nodeList && callback) {\n nodeList = isElementList(nodeList) ? nodeList : [nodeList];\n\n for (var i = 0; i < nodeList.length; i++) {\n if (callback(nodeList[i], i, nodeList.length) === true) {\n break;\n }\n }\n }\n};\nvar throwError = function throwError(message) {\n return console.error(\"[scroll-lock] \".concat(message));\n};\nvar arrayAsSelector = function arrayAsSelector(array) {\n if (Array.isArray(array)) {\n var selector = array.join(', ');\n return selector;\n }\n};\nvar nodeListAsArray = function nodeListAsArray(nodeList) {\n var nodes = [];\n eachNode(nodeList, function (node) {\n return nodes.push(node);\n });\n return nodes;\n};\nvar findParentBySelector = function findParentBySelector($el, selector) {\n var self = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var $root = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : document;\n\n if (self && nodeListAsArray($root.querySelectorAll(selector)).indexOf($el) !== -1) {\n return $el;\n }\n\n while (($el = $el.parentElement) && nodeListAsArray($root.querySelectorAll(selector)).indexOf($el) === -1) {\n ;\n }\n\n return $el;\n};\nvar elementHasSelector = function elementHasSelector($el, selector) {\n var $root = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n var has = nodeListAsArray($root.querySelectorAll(selector)).indexOf($el) !== -1;\n return has;\n};\nvar elementHasOverflowHidden = function elementHasOverflowHidden($el) {\n if ($el) {\n var computedStyle = getComputedStyle($el);\n var overflowIsHidden = computedStyle.overflow === 'hidden';\n return overflowIsHidden;\n }\n};\nvar elementScrollTopOnStart = function elementScrollTopOnStart($el) {\n if ($el) {\n if (elementHasOverflowHidden($el)) {\n return true;\n }\n\n var scrollTop = $el.scrollTop;\n return scrollTop <= 0;\n }\n};\nvar elementScrollTopOnEnd = function elementScrollTopOnEnd($el) {\n if ($el) {\n if (elementHasOverflowHidden($el)) {\n return true;\n }\n\n var scrollTop = $el.scrollTop;\n var scrollHeight = $el.scrollHeight;\n var scrollTopWithHeight = scrollTop + $el.offsetHeight;\n return scrollTopWithHeight >= scrollHeight;\n }\n};\nvar elementScrollLeftOnStart = function elementScrollLeftOnStart($el) {\n if ($el) {\n if (elementHasOverflowHidden($el)) {\n return true;\n }\n\n var scrollLeft = $el.scrollLeft;\n return scrollLeft <= 0;\n }\n};\nvar elementScrollLeftOnEnd = function elementScrollLeftOnEnd($el) {\n if ($el) {\n if (elementHasOverflowHidden($el)) {\n return true;\n }\n\n var scrollLeft = $el.scrollLeft;\n var scrollWidth = $el.scrollWidth;\n var scrollLeftWithWidth = scrollLeft + $el.offsetWidth;\n return scrollLeftWithWidth >= scrollWidth;\n }\n};\nvar elementIsScrollableField = function elementIsScrollableField($el) {\n var selector = 'textarea, [contenteditable=\"true\"]';\n return elementHasSelector($el, selector);\n};\nvar elementIsInputRange = function elementIsInputRange($el) {\n var selector = 'input[type=\"range\"]';\n return elementHasSelector($el, selector);\n};\n// CONCATENATED MODULE: ./src/scroll-lock.js\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"disablePageScroll\", function() { return disablePageScroll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enablePageScroll\", function() { return enablePageScroll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getScrollState\", function() { return getScrollState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clearQueueScrollLocks\", function() { return clearQueueScrollLocks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTargetScrollBarWidth\", function() { return scroll_lock_getTargetScrollBarWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrentTargetScrollBarWidth\", function() { return scroll_lock_getCurrentTargetScrollBarWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPageScrollBarWidth\", function() { return getPageScrollBarWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrentPageScrollBarWidth\", function() { return getCurrentPageScrollBarWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addScrollableTarget\", function() { return scroll_lock_addScrollableTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeScrollableTarget\", function() { return scroll_lock_removeScrollableTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addScrollableSelector\", function() { return scroll_lock_addScrollableSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeScrollableSelector\", function() { return scroll_lock_removeScrollableSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addLockableTarget\", function() { return scroll_lock_addLockableTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addLockableSelector\", function() { return scroll_lock_addLockableSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setFillGapMethod\", function() { return scroll_lock_setFillGapMethod; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addFillGapTarget\", function() { return scroll_lock_addFillGapTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeFillGapTarget\", function() { return scroll_lock_removeFillGapTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addFillGapSelector\", function() { return scroll_lock_addFillGapSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeFillGapSelector\", function() { return scroll_lock_removeFillGapSelector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"refillGaps\", function() { return refillGaps; });\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nvar FILL_GAP_AVAILABLE_METHODS = ['padding', 'margin', 'width', 'max-width', 'none'];\nvar TOUCH_DIRECTION_DETECT_OFFSET = 3;\nvar state = {\n scroll: true,\n queue: 0,\n scrollableSelectors: ['[data-scroll-lock-scrollable]'],\n lockableSelectors: ['body', '[data-scroll-lock-lockable]'],\n fillGapSelectors: ['body', '[data-scroll-lock-fill-gap]', '[data-scroll-lock-lockable]'],\n fillGapMethod: FILL_GAP_AVAILABLE_METHODS[0],\n //\n startTouchY: 0,\n startTouchX: 0\n};\nvar disablePageScroll = function disablePageScroll(target) {\n if (state.queue <= 0) {\n state.scroll = false;\n scroll_lock_hideLockableOverflow();\n fillGaps();\n }\n\n scroll_lock_addScrollableTarget(target);\n state.queue++;\n};\nvar enablePageScroll = function enablePageScroll(target) {\n state.queue > 0 && state.queue--;\n\n if (state.queue <= 0) {\n state.scroll = true;\n scroll_lock_showLockableOverflow();\n unfillGaps();\n }\n\n scroll_lock_removeScrollableTarget(target);\n};\nvar getScrollState = function getScrollState() {\n return state.scroll;\n};\nvar clearQueueScrollLocks = function clearQueueScrollLocks() {\n state.queue = 0;\n};\nvar scroll_lock_getTargetScrollBarWidth = function getTargetScrollBarWidth($target) {\n var onlyExists = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (isElement($target)) {\n var currentOverflowYProperty = $target.style.overflowY;\n\n if (onlyExists) {\n if (!getScrollState()) {\n $target.style.overflowY = $target.getAttribute('data-scroll-lock-saved-overflow-y-property');\n }\n } else {\n $target.style.overflowY = 'scroll';\n }\n\n var width = scroll_lock_getCurrentTargetScrollBarWidth($target);\n $target.style.overflowY = currentOverflowYProperty;\n return width;\n } else {\n return 0;\n }\n};\nvar scroll_lock_getCurrentTargetScrollBarWidth = function getCurrentTargetScrollBarWidth($target) {\n if (isElement($target)) {\n if ($target === document.body) {\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n var currentWidth = windowWidth - documentWidth;\n return currentWidth;\n } else {\n var borderLeftWidthCurrentProperty = $target.style.borderLeftWidth;\n var borderRightWidthCurrentProperty = $target.style.borderRightWidth;\n $target.style.borderLeftWidth = '0px';\n $target.style.borderRightWidth = '0px';\n\n var _currentWidth = $target.offsetWidth - $target.clientWidth;\n\n $target.style.borderLeftWidth = borderLeftWidthCurrentProperty;\n $target.style.borderRightWidth = borderRightWidthCurrentProperty;\n return _currentWidth;\n }\n } else {\n return 0;\n }\n};\nvar getPageScrollBarWidth = function getPageScrollBarWidth() {\n var onlyExists = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return scroll_lock_getTargetScrollBarWidth(document.body, onlyExists);\n};\nvar getCurrentPageScrollBarWidth = function getCurrentPageScrollBarWidth() {\n return scroll_lock_getCurrentTargetScrollBarWidth(document.body);\n};\nvar scroll_lock_addScrollableTarget = function addScrollableTarget(target) {\n if (target) {\n var targets = argumentAsArray(target);\n targets.map(function ($targets) {\n eachNode($targets, function ($target) {\n if (isElement($target)) {\n $target.setAttribute('data-scroll-lock-scrollable', '');\n } else {\n throwError(\"\\\"\".concat($target, \"\\\" is not a Element.\"));\n }\n });\n });\n }\n};\nvar scroll_lock_removeScrollableTarget = function removeScrollableTarget(target) {\n if (target) {\n var targets = argumentAsArray(target);\n targets.map(function ($targets) {\n eachNode($targets, function ($target) {\n if (isElement($target)) {\n $target.removeAttribute('data-scroll-lock-scrollable');\n } else {\n throwError(\"\\\"\".concat($target, \"\\\" is not a Element.\"));\n }\n });\n });\n }\n};\nvar scroll_lock_addScrollableSelector = function addScrollableSelector(selector) {\n if (selector) {\n var selectors = argumentAsArray(selector);\n selectors.map(function (selector) {\n state.scrollableSelectors.push(selector);\n });\n }\n};\nvar scroll_lock_removeScrollableSelector = function removeScrollableSelector(selector) {\n if (selector) {\n var selectors = argumentAsArray(selector);\n selectors.map(function (selector) {\n state.scrollableSelectors = state.scrollableSelectors.filter(function (sSelector) {\n return sSelector !== selector;\n });\n });\n }\n};\nvar scroll_lock_addLockableTarget = function addLockableTarget(target) {\n if (target) {\n var targets = argumentAsArray(target);\n targets.map(function ($targets) {\n eachNode($targets, function ($target) {\n if (isElement($target)) {\n $target.setAttribute('data-scroll-lock-lockable', '');\n } else {\n throwError(\"\\\"\".concat($target, \"\\\" is not a Element.\"));\n }\n });\n });\n\n if (!getScrollState()) {\n scroll_lock_hideLockableOverflow();\n }\n }\n};\nvar scroll_lock_addLockableSelector = function addLockableSelector(selector) {\n if (selector) {\n var selectors = argumentAsArray(selector);\n selectors.map(function (selector) {\n state.lockableSelectors.push(selector);\n });\n\n if (!getScrollState()) {\n scroll_lock_hideLockableOverflow();\n }\n\n scroll_lock_addFillGapSelector(selector);\n }\n};\nvar scroll_lock_setFillGapMethod = function setFillGapMethod(method) {\n if (method) {\n if (FILL_GAP_AVAILABLE_METHODS.indexOf(method) !== -1) {\n state.fillGapMethod = method;\n refillGaps();\n } else {\n var methods = FILL_GAP_AVAILABLE_METHODS.join(', ');\n throwError(\"\\\"\".concat(method, \"\\\" method is not available!\\nAvailable fill gap methods: \").concat(methods, \".\"));\n }\n }\n};\nvar scroll_lock_addFillGapTarget = function addFillGapTarget(target) {\n if (target) {\n var targets = argumentAsArray(target);\n targets.map(function ($targets) {\n eachNode($targets, function ($target) {\n if (isElement($target)) {\n $target.setAttribute('data-scroll-lock-fill-gap', '');\n\n if (!state.scroll) {\n scroll_lock_fillGapTarget($target);\n }\n } else {\n throwError(\"\\\"\".concat($target, \"\\\" is not a Element.\"));\n }\n });\n });\n }\n};\nvar scroll_lock_removeFillGapTarget = function removeFillGapTarget(target) {\n if (target) {\n var targets = argumentAsArray(target);\n targets.map(function ($targets) {\n eachNode($targets, function ($target) {\n if (isElement($target)) {\n $target.removeAttribute('data-scroll-lock-fill-gap');\n\n if (!state.scroll) {\n scroll_lock_unfillGapTarget($target);\n }\n } else {\n throwError(\"\\\"\".concat($target, \"\\\" is not a Element.\"));\n }\n });\n });\n }\n};\nvar scroll_lock_addFillGapSelector = function addFillGapSelector(selector) {\n if (selector) {\n var selectors = argumentAsArray(selector);\n selectors.map(function (selector) {\n if (state.fillGapSelectors.indexOf(selector) === -1) {\n state.fillGapSelectors.push(selector);\n\n if (!state.scroll) {\n scroll_lock_fillGapSelector(selector);\n }\n }\n });\n }\n};\nvar scroll_lock_removeFillGapSelector = function removeFillGapSelector(selector) {\n if (selector) {\n var selectors = argumentAsArray(selector);\n selectors.map(function (selector) {\n state.fillGapSelectors = state.fillGapSelectors.filter(function (fSelector) {\n return fSelector !== selector;\n });\n\n if (!state.scroll) {\n scroll_lock_unfillGapSelector(selector);\n }\n });\n }\n};\nvar refillGaps = function refillGaps() {\n if (!state.scroll) {\n fillGaps();\n }\n};\n\nvar scroll_lock_hideLockableOverflow = function hideLockableOverflow() {\n var selector = arrayAsSelector(state.lockableSelectors);\n scroll_lock_hideLockableOverflowSelector(selector);\n};\n\nvar scroll_lock_showLockableOverflow = function showLockableOverflow() {\n var selector = arrayAsSelector(state.lockableSelectors);\n scroll_lock_showLockableOverflowSelector(selector);\n};\n\nvar scroll_lock_hideLockableOverflowSelector = function hideLockableOverflowSelector(selector) {\n var $targets = document.querySelectorAll(selector);\n eachNode($targets, function ($target) {\n scroll_lock_hideLockableOverflowTarget($target);\n });\n};\n\nvar scroll_lock_showLockableOverflowSelector = function showLockableOverflowSelector(selector) {\n var $targets = document.querySelectorAll(selector);\n eachNode($targets, function ($target) {\n scroll_lock_showLockableOverflowTarget($target);\n });\n};\n\nvar scroll_lock_hideLockableOverflowTarget = function hideLockableOverflowTarget($target) {\n if (isElement($target) && $target.getAttribute('data-scroll-lock-locked') !== 'true') {\n var computedStyle = window.getComputedStyle($target);\n $target.setAttribute('data-scroll-lock-saved-overflow-y-property', computedStyle.overflowY);\n $target.setAttribute('data-scroll-lock-saved-inline-overflow-property', $target.style.overflow);\n $target.setAttribute('data-scroll-lock-saved-inline-overflow-y-property', $target.style.overflowY);\n $target.style.overflow = 'hidden';\n $target.setAttribute('data-scroll-lock-locked', 'true');\n }\n};\n\nvar scroll_lock_showLockableOverflowTarget = function showLockableOverflowTarget($target) {\n if (isElement($target) && $target.getAttribute('data-scroll-lock-locked') === 'true') {\n $target.style.overflow = $target.getAttribute('data-scroll-lock-saved-inline-overflow-property');\n $target.style.overflowY = $target.getAttribute('data-scroll-lock-saved-inline-overflow-y-property');\n $target.removeAttribute('data-scroll-lock-saved-overflow-property');\n $target.removeAttribute('data-scroll-lock-saved-inline-overflow-property');\n $target.removeAttribute('data-scroll-lock-saved-inline-overflow-y-property');\n $target.removeAttribute('data-scroll-lock-locked');\n }\n};\n\nvar fillGaps = function fillGaps() {\n state.fillGapSelectors.map(function (selector) {\n scroll_lock_fillGapSelector(selector);\n });\n};\n\nvar unfillGaps = function unfillGaps() {\n state.fillGapSelectors.map(function (selector) {\n scroll_lock_unfillGapSelector(selector);\n });\n};\n\nvar scroll_lock_fillGapSelector = function fillGapSelector(selector) {\n var $targets = document.querySelectorAll(selector);\n var isLockable = state.lockableSelectors.indexOf(selector) !== -1;\n eachNode($targets, function ($target) {\n scroll_lock_fillGapTarget($target, isLockable);\n });\n};\n\nvar scroll_lock_fillGapTarget = function fillGapTarget($target) {\n var isLockable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (isElement($target)) {\n var scrollBarWidth;\n\n if ($target.getAttribute('data-scroll-lock-lockable') === '' || isLockable) {\n scrollBarWidth = scroll_lock_getTargetScrollBarWidth($target, true);\n } else {\n var $lockableParent = findParentBySelector($target, arrayAsSelector(state.lockableSelectors));\n scrollBarWidth = scroll_lock_getTargetScrollBarWidth($lockableParent, true);\n }\n\n if ($target.getAttribute('data-scroll-lock-filled-gap') === 'true') {\n scroll_lock_unfillGapTarget($target);\n }\n\n var computedStyle = window.getComputedStyle($target);\n $target.setAttribute('data-scroll-lock-filled-gap', 'true');\n $target.setAttribute('data-scroll-lock-current-fill-gap-method', state.fillGapMethod);\n\n if (state.fillGapMethod === 'margin') {\n var currentMargin = parseFloat(computedStyle.marginRight);\n $target.style.marginRight = \"\".concat(currentMargin + scrollBarWidth, \"px\");\n } else if (state.fillGapMethod === 'width') {\n $target.style.width = \"calc(100% - \".concat(scrollBarWidth, \"px)\");\n } else if (state.fillGapMethod === 'max-width') {\n $target.style.maxWidth = \"calc(100% - \".concat(scrollBarWidth, \"px)\");\n } else if (state.fillGapMethod === 'padding') {\n var currentPadding = parseFloat(computedStyle.paddingRight);\n $target.style.paddingRight = \"\".concat(currentPadding + scrollBarWidth, \"px\");\n }\n }\n};\n\nvar scroll_lock_unfillGapSelector = function unfillGapSelector(selector) {\n var $targets = document.querySelectorAll(selector);\n eachNode($targets, function ($target) {\n scroll_lock_unfillGapTarget($target);\n });\n};\n\nvar scroll_lock_unfillGapTarget = function unfillGapTarget($target) {\n if (isElement($target)) {\n if ($target.getAttribute('data-scroll-lock-filled-gap') === 'true') {\n var currentFillGapMethod = $target.getAttribute('data-scroll-lock-current-fill-gap-method');\n $target.removeAttribute('data-scroll-lock-filled-gap');\n $target.removeAttribute('data-scroll-lock-current-fill-gap-method');\n\n if (currentFillGapMethod === 'margin') {\n $target.style.marginRight = \"\";\n } else if (currentFillGapMethod === 'width') {\n $target.style.width = \"\";\n } else if (currentFillGapMethod === 'max-width') {\n $target.style.maxWidth = \"\";\n } else if (currentFillGapMethod === 'padding') {\n $target.style.paddingRight = \"\";\n }\n }\n }\n};\n\nvar onResize = function onResize(e) {\n refillGaps();\n};\n\nvar onTouchStart = function onTouchStart(e) {\n if (!state.scroll) {\n state.startTouchY = e.touches[0].clientY;\n state.startTouchX = e.touches[0].clientX;\n }\n};\n\nvar scroll_lock_onTouchMove = function onTouchMove(e) {\n if (!state.scroll) {\n var startTouchY = state.startTouchY,\n startTouchX = state.startTouchX;\n var currentClientY = e.touches[0].clientY;\n var currentClientX = e.touches[0].clientX;\n\n if (e.touches.length < 2) {\n var selector = arrayAsSelector(state.scrollableSelectors);\n var direction = {\n up: startTouchY < currentClientY,\n down: startTouchY > currentClientY,\n left: startTouchX < currentClientX,\n right: startTouchX > currentClientX\n };\n var directionWithOffset = {\n up: startTouchY + TOUCH_DIRECTION_DETECT_OFFSET < currentClientY,\n down: startTouchY - TOUCH_DIRECTION_DETECT_OFFSET > currentClientY,\n left: startTouchX + TOUCH_DIRECTION_DETECT_OFFSET < currentClientX,\n right: startTouchX - TOUCH_DIRECTION_DETECT_OFFSET > currentClientX\n };\n\n var handle = function handle($el) {\n var skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if ($el) {\n var parentScrollableEl = findParentBySelector($el, selector, false);\n\n if (elementIsInputRange($el)) {\n return false;\n }\n\n if (skip || elementIsScrollableField($el) && findParentBySelector($el, selector) || elementHasSelector($el, selector)) {\n var prevent = false;\n\n if (elementScrollLeftOnStart($el) && elementScrollLeftOnEnd($el)) {\n if (direction.up && elementScrollTopOnStart($el) || direction.down && elementScrollTopOnEnd($el)) {\n prevent = true;\n }\n } else if (elementScrollTopOnStart($el) && elementScrollTopOnEnd($el)) {\n if (direction.left && elementScrollLeftOnStart($el) || direction.right && elementScrollLeftOnEnd($el)) {\n prevent = true;\n }\n } else if (directionWithOffset.up && elementScrollTopOnStart($el) || directionWithOffset.down && elementScrollTopOnEnd($el) || directionWithOffset.left && elementScrollLeftOnStart($el) || directionWithOffset.right && elementScrollLeftOnEnd($el)) {\n prevent = true;\n }\n\n if (prevent) {\n if (parentScrollableEl) {\n handle(parentScrollableEl, true);\n } else {\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n }\n } else {\n handle(parentScrollableEl);\n }\n } else {\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n };\n\n handle(e.target);\n }\n }\n};\n\nvar onTouchEnd = function onTouchEnd(e) {\n if (!state.scroll) {\n state.startTouchY = 0;\n state.startTouchX = 0;\n }\n};\n\nif (typeof window !== 'undefined') {\n window.addEventListener('resize', onResize);\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('touchstart', onTouchStart);\n document.addEventListener('touchmove', scroll_lock_onTouchMove, {\n passive: false\n });\n document.addEventListener('touchend', onTouchEnd);\n}\n\nvar deprecatedMethods = {\n hide: function hide(target) {\n throwError('\"hide\" is deprecated! Use \"disablePageScroll\" instead. \\n https://github.com/FL3NKEY/scroll-lock#disablepagescrollscrollabletarget');\n disablePageScroll(target);\n },\n show: function show(target) {\n throwError('\"show\" is deprecated! Use \"enablePageScroll\" instead. \\n https://github.com/FL3NKEY/scroll-lock#enablepagescrollscrollabletarget');\n enablePageScroll(target);\n },\n toggle: function toggle(target) {\n throwError('\"toggle\" is deprecated! Do not use it.');\n\n if (getScrollState()) {\n disablePageScroll();\n } else {\n enablePageScroll(target);\n }\n },\n getState: function getState() {\n throwError('\"getState\" is deprecated! Use \"getScrollState\" instead. \\n https://github.com/FL3NKEY/scroll-lock#getscrollstate');\n return getScrollState();\n },\n getWidth: function getWidth() {\n throwError('\"getWidth\" is deprecated! Use \"getPageScrollBarWidth\" instead. \\n https://github.com/FL3NKEY/scroll-lock#getpagescrollbarwidth');\n return getPageScrollBarWidth();\n },\n getCurrentWidth: function getCurrentWidth() {\n throwError('\"getCurrentWidth\" is deprecated! Use \"getCurrentPageScrollBarWidth\" instead. \\n https://github.com/FL3NKEY/scroll-lock#getcurrentpagescrollbarwidth');\n return getCurrentPageScrollBarWidth();\n },\n setScrollableTargets: function setScrollableTargets(target) {\n throwError('\"setScrollableTargets\" is deprecated! Use \"addScrollableTarget\" instead. \\n https://github.com/FL3NKEY/scroll-lock#addscrollabletargetscrollabletarget');\n scroll_lock_addScrollableTarget(target);\n },\n setFillGapSelectors: function setFillGapSelectors(selector) {\n throwError('\"setFillGapSelectors\" is deprecated! Use \"addFillGapSelector\" instead. \\n https://github.com/FL3NKEY/scroll-lock#addfillgapselectorfillgapselector');\n scroll_lock_addFillGapSelector(selector);\n },\n setFillGapTargets: function setFillGapTargets(target) {\n throwError('\"setFillGapTargets\" is deprecated! Use \"addFillGapTarget\" instead. \\n https://github.com/FL3NKEY/scroll-lock#addfillgaptargetfillgaptarget');\n scroll_lock_addFillGapTarget(target);\n },\n clearQueue: function clearQueue() {\n throwError('\"clearQueue\" is deprecated! Use \"clearQueueScrollLocks\" instead. \\n https://github.com/FL3NKEY/scroll-lock#clearqueuescrolllocks');\n clearQueueScrollLocks();\n }\n};\n\nvar scrollLock = _objectSpread({\n disablePageScroll: disablePageScroll,\n enablePageScroll: enablePageScroll,\n getScrollState: getScrollState,\n clearQueueScrollLocks: clearQueueScrollLocks,\n getTargetScrollBarWidth: scroll_lock_getTargetScrollBarWidth,\n getCurrentTargetScrollBarWidth: scroll_lock_getCurrentTargetScrollBarWidth,\n getPageScrollBarWidth: getPageScrollBarWidth,\n getCurrentPageScrollBarWidth: getCurrentPageScrollBarWidth,\n addScrollableSelector: scroll_lock_addScrollableSelector,\n removeScrollableSelector: scroll_lock_removeScrollableSelector,\n addScrollableTarget: scroll_lock_addScrollableTarget,\n removeScrollableTarget: scroll_lock_removeScrollableTarget,\n addLockableSelector: scroll_lock_addLockableSelector,\n addLockableTarget: scroll_lock_addLockableTarget,\n addFillGapSelector: scroll_lock_addFillGapSelector,\n removeFillGapSelector: scroll_lock_removeFillGapSelector,\n addFillGapTarget: scroll_lock_addFillGapTarget,\n removeFillGapTarget: scroll_lock_removeFillGapTarget,\n setFillGapMethod: scroll_lock_setFillGapMethod,\n refillGaps: refillGaps,\n _state: state\n}, deprecatedMethods);\n\n/* harmony default export */ var scroll_lock = __webpack_exports__[\"default\"] = (scrollLock);\n\n/***/ })\n/******/ ])[\"default\"];\n});","import { Controller } from \"@hotwired/stimulus\"\nimport { disablePageScroll, enablePageScroll } from \"scroll-lock\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass Header extends Controller {\n static values = {\n sticky: Boolean,\n mobileNav: Boolean,\n userNav: Boolean,\n cart: Boolean,\n }\n\n static targets = [`nav`, `cta`]\n\n #stickyPlaceholder = null\n #stickyPlaceholderHeight = 0\n\n connect() {\n window.addEventListener(`scroll`, this.winScroll, { passive: true })\n window.addEventListener(`resize`, this.trackMobileHeaderHeight)\n document.addEventListener(`turbo:before-cache`, this.turboBeforeCache)\n }\n\n disconnect() {\n window.removeEventListener(`scroll`, this.winScroll, { passive: true })\n window.removeEventListener(`resize`, this.trackMobileHeaderHeight)\n document.removeEventListener(`turbo:before-cache`, this.turboBeforeCache)\n }\n\n toggleMobileNav() {\n this.mobileNavValue = !this.mobileNavValue\n }\n\n toggleCart() {\n this.cartValue = !this.cartValue\n this.userNavValue = false\n }\n\n toggleUserNav() {\n this.userNavValue = !this.userNavValue\n this.cartValue = false\n }\n\n stickyValueChanged() {\n if (this.stickyValue) {\n this.#stickyPlaceholder = document.createElement(`div`)\n this.#stickyPlaceholder.style.height = `${\n this.#stickyPlaceholderHeight\n }px`\n this.element.after(this.#stickyPlaceholder)\n document.documentElement.classList.add(`--header-sticky`)\n this.trackMobileHeaderHeight()\n } else if (this.#stickyPlaceholder) {\n this.#stickyPlaceholder.remove()\n this.#stickyPlaceholder = null\n document.documentElement.style.removeProperty(`--header-sticky-height`)\n }\n }\n\n mobileNavValueChanged() {\n if (this.mobileNavValue) disablePageScroll(this.navTarget)\n else enablePageScroll(this.navTarget)\n }\n\n winScroll = () => {\n const sticky = window.scrollY > window.innerHeight / 2\n if (sticky) this.#stickyPlaceholderHeight = this.element.offsetHeight\n this.stickyValue = sticky\n }\n\n trackMobileHeaderHeight = () => {\n if (this.stickyValue)\n document.documentElement.style.setProperty(\n `--header-sticky-height`,\n `${this.element.offsetHeight}px`\n )\n }\n\n turboBeforeCache = () => {\n this.mobileNavValue = false\n this.userNavValue = false\n }\n}\n\nStimulus.register(`header`, Header)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\n// toolbar\n\nclass ArticlesPageToolbar extends Controller {\n static values = { selects: Boolean }\n\n static targets = [`toggle`, `selectOption`, `submit`]\n\n toggleSelects() {\n this.selectsValue = !this.selectsValue\n }\n\n updateCounter() {\n const count = this.selectOptionTargets.filter((o) => o.checked).length\n if (count > 0) this.toggleTarget.dataset.count = count\n else delete this.toggleTarget.dataset.count\n }\n\n flashButton = () => {\n this.submitTarget.classList.add(`--pulse`)\n\n setTimeout(() => {\n this.submitTarget.classList.remove(`--pulse`)\n }, 1400)\n }\n}\n\nStimulus.register(`articles-page-toolbar`, ArticlesPageToolbar)\n\n// toolbar text\n\nclass ArticlesPageToolbarText extends Controller {\n static values = { filled: Boolean }\n\n static targets = [`input`]\n\n connect() {\n this.toggleClear()\n }\n\n toggleClear() {\n this.filledValue = !!this.inputTarget.value\n }\n\n clear() {\n this.inputTarget.value = ``\n this.toggleClear()\n }\n}\n\nStimulus.register(`articles-page-toolbar-text`, ArticlesPageToolbarText)\n\n// toolbar select\n\nclass ArticlesPageToolbarSelect extends Controller {\n static values = { active: Boolean }\n\n static targets = [`toggle`, `options`, `option`]\n\n connect() {\n window.addEventListener(`keyup`, this.winKeyup)\n document.addEventListener(`click`, this.docClick)\n this.updateCounter()\n }\n\n disconnect() {\n window.removeEventListener(`keyup`, this.winKeyup)\n document.removeEventListener(`click`, this.docClick)\n }\n\n toggle() {\n this.activeValue = !this.activeValue\n\n this.optionsTarget.tabIndex = 0\n if (this.activeValue) this.optionsTarget.focus()\n }\n\n activeValueChanged() {\n this.toggleTarget.ariaExpanded = this.activeValue\n }\n\n winKeyup = (e) => {\n if (e.key == `Escape`) this.activeValue = false\n }\n\n docClick = (e) => {\n if (this.activeValue && !this.element.contains(e.target))\n this.activeValue = false\n }\n\n updateCounter = () => {\n const count = this.optionTargets.filter((o) => o.checked).length\n if (count > 0) this.toggleTarget.dataset.count = count\n else delete this.toggleTarget.dataset.count\n }\n}\n\nStimulus.register(`articles-page-toolbar-select`, ArticlesPageToolbarSelect)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\nclass ProductPage extends Controller {\n static values = {\n sticky: Boolean,\n }\n\n connect() {\n window.addEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n disconnect() {\n window.removeEventListener(`scroll`, this.winScroll, { passive: true })\n }\n\n winScroll = () => {\n const sticky = window.scrollY > window.innerHeight / 2\n this.stickyValue = sticky\n }\n}\n\nStimulus.register(`product-page`, ProductPage)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../common/utils/stimulus\"\n\n// toolbar\n\nclass ProductsPageToolbar extends Controller {\n static values = { selects: Boolean }\n\n static targets = [`toggle`, `selectOption`, `submit`]\n\n toggleSelects() {\n this.selectsValue = !this.selectsValue\n }\n\n updateCounter() {\n const count = this.selectOptionTargets.filter((o) => o.checked).length\n if (count > 0) this.toggleTarget.dataset.count = count\n else delete this.toggleTarget.dataset.count\n }\n\n flashButton = () => {\n this.submitTarget.classList.add(`--pulse`)\n\n setTimeout(() => {\n this.submitTarget.classList.remove(`--pulse`)\n }, 1400)\n }\n}\n\nStimulus.register(`products-page-toolbar`, ProductsPageToolbar)\n\n// toolbar text\n\nclass ProductsPageToolbarText extends Controller {\n static values = { filled: Boolean }\n\n static targets = [`input`]\n\n connect() {\n this.toggleClear()\n }\n\n toggleClear() {\n this.filledValue = !!this.inputTarget.value\n }\n\n clear() {\n this.inputTarget.value = ``\n this.toggleClear()\n }\n}\n\nStimulus.register(`products-page-toolbar-text`, ProductsPageToolbarText)\n\n// toolbar select\n\nclass ProductsPageToolbarSelect extends Controller {\n static values = { active: Boolean }\n\n static targets = [`toggle`, `options`, `option`]\n\n connect() {\n window.addEventListener(`keyup`, this.winKeyup)\n document.addEventListener(`click`, this.docClick)\n this.updateCounter()\n }\n\n disconnect() {\n window.removeEventListener(`keyup`, this.winKeyup)\n document.removeEventListener(`click`, this.docClick)\n }\n\n toggle() {\n this.activeValue = !this.activeValue\n\n this.optionsTarget.tabIndex = 0\n if (this.activeValue) this.optionsTarget.focus()\n }\n\n activeValueChanged() {\n this.toggleTarget.ariaExpanded = this.activeValue\n }\n\n winKeyup = (e) => {\n if (e.key == `Escape`) this.activeValue = false\n }\n\n docClick = (e) => {\n if (this.activeValue && !this.element.contains(e.target))\n this.activeValue = false\n }\n\n updateCounter = () => {\n const count = this.optionTargets.filter((o) => o.checked).length\n if (count > 0) this.toggleTarget.dataset.count = count\n else delete this.toggleTarget.dataset.count\n }\n}\n\nStimulus.register(`products-page-toolbar-select`, ProductsPageToolbarSelect)\n"],"names":["elements","source","nodes","stringRepr","eventNames","callback","options","element","eventName","eventNameType","theCallback","args","selector","e","regEvent","eventNameSpace","regEventNameType","regEventNameSpace","regEventNameMatch","doRemove","selectors","css","newStyle","oldStyle","__privateAdd","_placeholderHtml","__privateSet","text","__privateGet","__publicField","requestId","lastArgs","later","context","throttled","_len","_key","_scrollHandler","_resizeHandler","edges","el","throttle","target","i","key","value","converter","defaultAttributes","set","attributes","stringifiedAttributes","attributeName","get","cookies","jar","parts","foundKey","Cookies","url","global","factory","this","flag","type","sources","destination","len","sourcePrototype","attr","object","prop","prototype","ProxyFunction","AudioController","audioFactory","audio","rateValue","assetPath","createRegularArray","arr","createTypedArrayFactory","obj","propertyNames","val","tOfVal","absArr","currentTime","totalTime","frameMultiplier","totalLoops","currentLoop","firstFrame","totalFrames","nativeError","_count","h","s","v","r","g","b","f","p","q","t","max","min","d","color","offset","hsv","colorMap","hex","_counterId","processes","workerFn","workerInstance","workerProxy","path","_workerSelf","data","createWorker","fn","blob","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","maskProps","convertPathsToAbsoluteValues","findCompLayers","completeShapes","completeText","completeChars","chars","assets","findComp","id","comp","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","checkPathProperties","pathData","checkColors","iterateShapes","shapes","checkShapes","completeClosingShapes","completeData","moduleOb","formatResponse","xhr","contentTypeHeader","loadAsset","fullPath","errorCallback","response","err","animation","event","process","createProcess","onComplete","onError","loadAnimation","processId","loadData","completeAnimation","anim","proxyImage","canvas","ctx","imageLoaded","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","box","createImageData","ob","createImgData","createFootageData","footageData","loadAssets","cb","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","callbacks","parsePayloadLines","payload","lines","keys","line","keysCount","_markers","markers","_marker","markerData","registerComposition","_thisProjectFunction","name","params","animType","RendererClass","wrapper","wrapperAttributes","loop","autoplay","prerender","newLayers","expressionsPlugin","segments","segment","segmentPath","animData","error","markerName","marker","isFrame","numValue","nextValue","_isComplete","init","end","pendingFrame","forceFlag","index","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","setupAnimation","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","setSpeed","setDirection","play","resume","nowTime","elapsedTime","first","pause","goToAndStop","stop","togglePause","searchAnimations","standalone","renderer","animElements","body","div","resize","freeze","unfreeze","setVolume","mute","unmute","getBezierEasing","beziers","a","c","nm","str","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","x","mY1","mY2","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","_double","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","create","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","dist1","dist2","dist3","diffDist","getBezierLength","pt1","pt2","pt3","pt4","curveSegments","ptCoord","perc","addedLength","ptDistance","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","closed","pathV","pathO","pathI","lengths","totalLength","BezierData","length","PointData","partial","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","percents","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","initFrame","mathAbs","interpolateValue","frameNum","caching","offsetTime","newValue","iterationIndex","keyData","nextKeyData","keyframeMetadata","fnc","nextKeyTime","keyTime","endValue","ind","distanceInLine","segmentPerc","outX","outY","inX","inY","keyValue","quatStart","createQuaternion","quatEnd","time","quaternionToEuler","slerp","out","ax","ay","az","aw","bx","by","bz","bw","omega","cosom","sinom","scale0","scale1","quat","qx","qy","qz","qw","heading","attitude","bank","values","c1","c2","c3","s1","s2","s3","w","y","z","getValueAtCurrentTime","endTime","renderResult","setVValue","multipliedValue","processEffectsSequence","finalValue","addEffect","effectFunction","ValueProperty","elem","mult","container","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","to","ti","arrLen","getProp","pos","replace","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePath","clone","shape","cloned","newShapeCollection","shapeCollection","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","kf","interpolateShapeCurrentTime","lastFrame","resetShape","shapesEqual","shape1","shape2","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","rad","roundness","perimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","v0","v1","round","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","_cos","_sin","_tan","_rnd","reset","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","sy","skew","skewFromAxis","scale","sz","setTransform","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","isIdentity","equals","matr","cloneFromProps","props","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_a","_b","_c","_d","_e","_f","href","prefix","plugin","variable","vars","pair","modifiers","registerModifier","getModifier","shapeLength","totalModifierLength","shapeSegments","segmentOb","shapeS","shapeE","pathsData","_isFirstFrame","_s","shapePaths","totalShapeLength","localShapeCollection","newShapesData","lastShapeInCollection","lastShape","newPaths","newShape","shapeSegment","currentLengthData","segmentCount","segmentLength","amount","centerPoint","pathLength","clonedPath","defaultVector","applyToMatrix","mat","_mdf","processKeys","forceRender","frameRate","v2","px","py","precalculateMatrix","autoOrient","addDynamicProperty","TransformProperty","getTransformProperty","pMatrix","rMatrix","sMatrix","inv","scaleX","scaleY","elemsData","newElements","renderFlag","items","itemsTransform","cont","hasReloaded","copies","group","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","currentV","currentI","currentO","closerV","distance","newPosPerc","rd","fontData","styles","fWeight","fStyle","styleName","maxWaitingTime","emptyChar","combinedCharacters","surrogateModifiers","zeroWidthJoiner","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","family","parentNode","node","width","checkLoadedFonts","loadedCount","createHelper","def","engine","helper","fontProps","tHelper","tCanvasHelper","measure","addFonts","defs","fontArr","_pendingFonts","shouldLoadFont","loadedSelector","sc","addChars","found","getCharData","_char","style","measureText","_char2","fontName","size","doubleSize","singleSize","getFontByName","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","isCombinedCharacter","_char3","setIsLoaded","Font","fontPrototype","component","num","MaskInterface","mask","MaskManager","maskManager","_masksInterfaces","maskFunction","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","property","valueProp","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","_thisFunction","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","transformMat","toWorldVec","toWorld","fromWorldVec","fromWorld","applyPoint","matrix","invertPoint","fromComp","sampleImage","transformInterface","_registerMaskInterface","_thisLayerFunction","_registerEffectsInterface","effects","anchorPointDescriptor","interfaceFunction","parentPropertyGroup","propertyName","propertyGroup","_propertyGroup","createEffectsInterface","effectElements","effectsData","createGroupInterface","groupInterface","createValueInterface","expressionProperty","view","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","content","_dashPropertyGroup","dashOb","addPropertyToDashOb","_interfaceFunction","parentGroupWrapper","_prevValue","_sourceText","stringValue","blendModeEnums","mode","effectItem","eff","effectsInterface","blendModeValue","globalData","isVisible","outlineInterfaceFactory","currentPropertyName","currentProperty","searchProperty","propertyNameIndex","dataInterfaceFactory","timeRemapped","totalVolume","volumeValue","layer","pInterface","parentName","hierarchy","pathValue","fontsContainer","finalMat","transforms","ptNew","properties","count","currentMasks","layerId","rect","expansor","feMorph","maskType","maskRef","filterID","isFirstFrame","pathNodes","viewData","pathString","pathShapeValue","createFilter","createAlphaToLuminanceFilter","filId","skipCoordinates","fil","feColorMatrix","filterManager","Effect","effect","countsAsEffect","layerElementParent","gg","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","cp","clipId","cpGroup","_prototype","position","shouldBreakProcess","transformers","level","styleOb","cLength","diff","pathElement","gradientId","gfill","stops","maskElement","opacityId","maskId","opFill","mProps","op","_o","_i","shapeString","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","lLen","lvl","paths","iterations","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","tempShapes","areAnimated","elementData","GradientConstructor","transformProperty","ownTransformers","shapeProperty","itemsData","prevViewData","render","ownStyles","ownModifiers","currentTransform","modifier","processedPos","animatedContent","sw","fc","updated","_finalValue","currentValue","currentIndex","textKeys","charactersArray","charCode","shouldCombine","fontManager","letters","newLineFlag","anchorGrouping","currentSize","currentPos","currentLine","lineWidths","lineWidth","maxLineWidth","trackingOffset","boxWidth","boxHeight","currentHeight","finalText","lastSpaceIndex","uncollapsedSpaces","currentChar","animators","animatorData","letterData","based","indexes","currentInd","newInd","newData","dData","_canResize","_fontValue","floor","TextSelectorPropFactory","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","animatorProps","defaultData","textAnimatorAnimatables","textData","renderType","lettersChangedFlag","alignment","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","partialLength","tanAngle","yOff","firstLine","animatorSelector","letterValue","offf","xPathPos","yPathPos","initPathPos","initSegmentInd","initPointInd","elemOpacity","letterSw","letterSc","letterFc","letterM","letterP","letterO","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","lastIndex","isNewLine","animatorOffset","rot","shapeStr","_fontSize","lineNumber","colorData","textArray","textContents","currentTextContent","shapeItem","usesGlyphs","tSpan","singleShape","tElement","justify","textContent","cachedSpansLength","childSpan","glyphElement","glyph","textBox","renderedLetters","renderedLetter","textSpan","nextElement","animationItem","config","ariaLabel","titleElement","titleId","descElement","descId","newLength","currentSavedOp","sequence","hasMasks","forceRealStack","transformsManager","styledShape","shouldRender","ownTransforms","parentTransform","groupTransform","currentStyle","isMain","shapeNodes","groupTransformMat","grd","opacity","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","imgW","imgH","imgRel","canvasRel","widthCrop","heightCrop","par","cProps","trProps","actionFlag","popped","containerStyle","origin","elementWidth","elementHeight","elementRel","animationRel","fillType","transformedElementStyle","matrixValue","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","bounds","p3","b2ac","t2","widthProperty","kfw","tempBoundingBox","changed","shapeStyle","shapeTransform","innerElemStyle","textColor","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","perspectiveStyle","perspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","newDOMElement","nextDOMElement","nextLayer","tmpDOMElement","perspectiveElem","center","threeDContainerData","lastThreeDContainerData","currentContainer","resizerElem","svg","cWidth","cHeight","floatingContainer","initExpressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","chunks","digits","rngname","startdenom","significance","overflow","nodecrypto","seedrandom","seed","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","is_math_call","state","copy","keylen","me","depth","result","typ","stringseed","smear","browser","plugins","BMMath","tOfV","tOfA","lenA","retArr","tOfB","lenB","mm","arr1","arr2","vec","tMin","tMax","value1","value2","_tMin","rnd","rndm","inTangents","outTangents","arrPlaceholder","inVertexPoint","outVertexPoint","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","duration","elem1","elem2","fVec","pitch","yaw","val1","val2","iKey","lenKey","obKey","fr","fps","framesPerSecond","_value","searchExpressions","getValueAtTime","getSpeedAtTime","delta","speed","getVelocityAtTime","velocity","getStaticValueAtTime","setGroupProperty","loopOut","durationFlag","currentFrame","keyframes","lastKeyFrame","cycleDuration","firstKeyFrame","ret","initV","endV","current","repeats","lastValue","nextLastValue","loopIn","firstValue","nextFirstValue","smooth","samples","endFrame","sampleFrequency","sampleValue","getTransformValueAtTime","anchor","skewAxis","rotation","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","accumulatedLength","initIndex","endIndex","vectorType","xLength","yLength","magnitude","unitVector","propertyGetShapeProp","trims","isKeyframed","hasExpressions","createMergeNode","resultId","ins","feMerge","feMergeNode","filter","colorBlack","colorWhite","elemChildren","groupPath","dasharrayValue","lineLength","units","feComponentTransfer","feFuncR","feFuncG","feFuncB","color1","color2","color3","tableR","tableG","tableB","inputBlack","inputWhite","gamma","outputBlack","outputWhite","table","colorValue","outputDelta","inputDelta","globalFilterSize","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","col","filterElem","symbolId","children","nextChild","useElem","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","_animation","animationName","animationLoop","animationAutoplay","on","formEl","disabled","loading","opener","$el","closer","handler","listeners","domEvent","listener","focused","collection","child","focusableChildren","focusedItemIndex","classnames","force","classname","addClass","removeClass","_clicked","_onTabSwitchHandlers","increments","rating","triggerEl","parent","top","height","headerStickyHeight","isObject","extend","src","doc","CustomEvent","win","proto","res","uniqueArray","window","document","html","toCreate","tempParent","classes","classNames","className","attrs","attrName","transition","eventType","targetSelector","capture","handleLiveEvent","eventData","parents","handleEvent","events","handlers","evt","dataIndex","transitionEnd","dom","fireCallBack","includeMargins","clientTop","clientLeft","scrollTop","scrollLeft","compareWith","returnIndex","els","newChild","tempDiv","nextEls","next","prevEls","prev","closest","foundElements","childNodes","methodName","delay","getComputedStyle","axis","curTransform","transformMatrix","curStyle","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","varName","varValue","swiper","targetPosition","side","startPosition","startTime","isOutOfBound","animate","progress","easeProgress","currentPosition","supportsPassive","opts","userAgent","support","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","overrides","isSafari","emit","observer","animationFrame","resizeHandler","createObserver","entries","newWidth","newHeight","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","extendParams","observers","attach","ObserverFunc","mutations","observerUpdate","containerParents","priority","self","method","onceHandler","eventHandler","getDirectionLabel","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtl","wrongRTL","isVirtual","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentWebKitTransform","paddingLeft","paddingRight","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","activeSlides","getSlideByIndex","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","multiplier","translatesDiff","isBeginning","isEnd","wasBeginning","wasEnd","activeIndex","realIndex","activeSlide","nextSlide","prevSlide","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","skip","slideFound","currentTranslate","byController","wrapperEl","newProgress","runCallbacks","translateBounds","internal","minTranslate","maxTranslate","newTranslate","isH","getTranslate","direction","step","initial","indexAsNumber","enabled","normalizedTranslate","normalizedGrid","normalizedGridNext","newIndex","animating","perGroup","increment","rtlTranslate","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","currentSnap","nextSnap","slidesPerView","slideToIndex","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","loopedSlides","allowSlidePrev","allowSlideNext","moving","base","__closestFrom","touches","$targetEl","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startX","startY","edgeSwipeDetection","edgeSwipeThreshold","preventDefault","shouldPreventDefault","targetTouch","pageX","pageY","diffX","diffY","touchAngle","disableParentSwiper","resistanceRatio","touchEndTime","timeDiff","pathTree","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","touchEvents","domMethod","swiperMethod","passiveListener","initialized","breakpoints","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","isEnabled","containerEl","minRatio","resultClasses","suffixes","imageEl","srcset","sizes","checkForComplete","image","onReady","wasLocked","slidesOffsetBefore","lastSlideIndex","lastSlideRightEdge","allModulesParams","moduleParamName","moduleParams","checkOverflow","swipers","newParams","mod","swiperParams","touch","desktop","cls","slideEl","updates","exact","spv","breakLoop","setTranslate","translateValue","translated","newDirection","needUpdate","currentDirection","getWrapperSelector","deleteInstance","cleanStyles","newDefaults","modules","module","prototypeGroup","protoMethod","handle","kc","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","enable","disable","originalParams","checkProps","getEl","toggleEl","update","$nextEl","$prevEl","onPrevClick","onNextClick","targetEl","isHidden","pfx","number","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","bulletActiveClass","total","bullets","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","paginationHTML","numberOfBullets","liveRegion","notify","message","notification","getRandomNumber","randomChar","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElControls","controls","addElLabel","addElId","addElLive","live","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","hasClickablePagination","updatePagination","bulletEl","initNavEl","wrapperId","handlePointerDown","handlePointerUp","handleFocus","isActive","initSlides","$slideEl","ariaLabelMessage","$containerEl","_articleHeadings","tocTitle","tocList","headingId","tocHeading","tocLink","root","installedModules","__webpack_require__","moduleId","exports","getter","ns","__webpack_exports__","argumentAsArray","argument","isElement","isElementList","nodeList","eachNode","throwError","arrayAsSelector","array","nodeListAsArray","findParentBySelector","$root","elementHasSelector","has","elementHasOverflowHidden","computedStyle","overflowIsHidden","elementScrollTopOnStart","elementScrollTopOnEnd","scrollHeight","scrollTopWithHeight","elementScrollLeftOnStart","elementScrollLeftOnEnd","scrollWidth","scrollLeftWithWidth","elementIsScrollableField","elementIsInputRange","disablePageScroll","enablePageScroll","getScrollState","clearQueueScrollLocks","scroll_lock_getTargetScrollBarWidth","scroll_lock_getCurrentTargetScrollBarWidth","getPageScrollBarWidth","getCurrentPageScrollBarWidth","scroll_lock_addScrollableTarget","scroll_lock_removeScrollableTarget","scroll_lock_addScrollableSelector","scroll_lock_removeScrollableSelector","scroll_lock_addLockableTarget","scroll_lock_addLockableSelector","scroll_lock_setFillGapMethod","scroll_lock_addFillGapTarget","scroll_lock_removeFillGapTarget","scroll_lock_addFillGapSelector","scroll_lock_removeFillGapSelector","refillGaps","_objectSpread","ownKeys","sym","_defineProperty","FILL_GAP_AVAILABLE_METHODS","TOUCH_DIRECTION_DETECT_OFFSET","scroll_lock_hideLockableOverflow","fillGaps","scroll_lock_showLockableOverflow","unfillGaps","$target","onlyExists","currentOverflowYProperty","documentWidth","currentWidth","borderLeftWidthCurrentProperty","borderRightWidthCurrentProperty","_currentWidth","targets","$targets","sSelector","methods","scroll_lock_fillGapTarget","scroll_lock_unfillGapTarget","scroll_lock_fillGapSelector","fSelector","scroll_lock_unfillGapSelector","scroll_lock_hideLockableOverflowSelector","scroll_lock_showLockableOverflowSelector","scroll_lock_hideLockableOverflowTarget","scroll_lock_showLockableOverflowTarget","isLockable","scrollBarWidth","$lockableParent","currentMargin","currentPadding","currentFillGapMethod","onResize","onTouchStart","scroll_lock_onTouchMove","startTouchY","startTouchX","currentClientY","currentClientX","directionWithOffset","parentScrollableEl","prevent","onTouchEnd","deprecatedMethods","scrollLock","_stickyPlaceholder","_stickyPlaceholderHeight","sticky"],"mappings":"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"}