{ "version": 3, "sources": ["../../../../../../node_modules/lodash/isArray.js", "../../../../../../node_modules/lodash/_freeGlobal.js", "../../../../../../node_modules/lodash/_root.js", "../../../../../../node_modules/lodash/_Symbol.js", "../../../../../../node_modules/lodash/_getRawTag.js", "../../../../../../node_modules/lodash/_objectToString.js", "../../../../../../node_modules/lodash/_baseGetTag.js", "../../../../../../node_modules/lodash/isObjectLike.js", "../../../../../../node_modules/lodash/isSymbol.js", "../../../../../../node_modules/lodash/_isKey.js", "../../../../../../node_modules/lodash/isObject.js", "../../../../../../node_modules/lodash/isFunction.js", "../../../../../../node_modules/lodash/_coreJsData.js", "../../../../../../node_modules/lodash/_isMasked.js", "../../../../../../node_modules/lodash/_toSource.js", "../../../../../../node_modules/lodash/_baseIsNative.js", "../../../../../../node_modules/lodash/_getValue.js", "../../../../../../node_modules/lodash/_getNative.js", "../../../../../../node_modules/lodash/_nativeCreate.js", "../../../../../../node_modules/lodash/_hashClear.js", "../../../../../../node_modules/lodash/_hashDelete.js", "../../../../../../node_modules/lodash/_hashGet.js", "../../../../../../node_modules/lodash/_hashHas.js", "../../../../../../node_modules/lodash/_hashSet.js", "../../../../../../node_modules/lodash/_Hash.js", "../../../../../../node_modules/lodash/_listCacheClear.js", "../../../../../../node_modules/lodash/eq.js", "../../../../../../node_modules/lodash/_assocIndexOf.js", "../../../../../../node_modules/lodash/_listCacheDelete.js", "../../../../../../node_modules/lodash/_listCacheGet.js", "../../../../../../node_modules/lodash/_listCacheHas.js", "../../../../../../node_modules/lodash/_listCacheSet.js", "../../../../../../node_modules/lodash/_ListCache.js", "../../../../../../node_modules/lodash/_Map.js", "../../../../../../node_modules/lodash/_mapCacheClear.js", "../../../../../../node_modules/lodash/_isKeyable.js", "../../../../../../node_modules/lodash/_getMapData.js", "../../../../../../node_modules/lodash/_mapCacheDelete.js", "../../../../../../node_modules/lodash/_mapCacheGet.js", "../../../../../../node_modules/lodash/_mapCacheHas.js", "../../../../../../node_modules/lodash/_mapCacheSet.js", "../../../../../../node_modules/lodash/_MapCache.js", "../../../../../../node_modules/lodash/memoize.js", "../../../../../../node_modules/lodash/_memoizeCapped.js", "../../../../../../node_modules/lodash/_stringToPath.js", "../../../../../../node_modules/lodash/_arrayMap.js", "../../../../../../node_modules/lodash/_baseToString.js", "../../../../../../node_modules/lodash/toString.js", "../../../../../../node_modules/lodash/_castPath.js", "../../../../../../node_modules/lodash/_toKey.js", "../../../../../../node_modules/lodash/_baseGet.js", "../../../../../../node_modules/lodash/get.js", "../../../../../../node_modules/FitText-UMD/fittext.js", "../../../../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../../../javascript/view_components/application_controller.js", "../../../../../javascript/view_components/fit_text/index.js", "../../../../../../node_modules/jarallax/src/defaults.js", "../../../../../../node_modules/jarallax/src/utils/global.js", "../../../../../../node_modules/jarallax/src/utils/css.js", "../../../../../../node_modules/jarallax/src/utils/extend.js", "../../../../../../node_modules/jarallax/src/utils/getParents.js", "../../../../../../node_modules/jarallax/src/utils/ready.js", "../../../../../../node_modules/jarallax/src/utils/isMobile.js", "../../../../../../node_modules/jarallax/src/utils/getWindowSize.js", "../../../../../../node_modules/jarallax/src/utils/observer.js", "../../../../../../node_modules/jarallax/src/core.js", "../../../../../../node_modules/jarallax/node_modules/video-worker/dist/video-worker.esm.js", "../../../../../../node_modules/jarallax/src/ext-video.js", "../../../../../../node_modules/jarallax/src/deprecated/ext-element.js", "../../../../../../node_modules/jarallax/src/core.esm.js", "../../../../../javascript/view_components/parallax_divider/index.js", "../../../../../javascript/client_templates/template0/errors.js"], "sourcesContent": ["/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/*!\r\n * FitText-UMD\r\n *\r\n * Copyright 2011, Dave Rupert http://daverupert.com\r\n * Released under the WTFPL license\r\n * http://sam.zoy.org/wtfpl/\r\n * Modified by Slawomir Kolodziej http://slawekk.info\r\n * Modified by Peace Chen to support modules\r\n *\r\n * Date: Tue Jan 12 2016 10:03:36 GMT-0600 (CST)\r\n */\r\n\r\n(function(root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([], factory);\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\t// Node. Does not work with strict CommonJS, but\r\n\t\t// only CommonJS-like environments that support module.exports,\r\n\t\t// like Node.\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\t// Browser globals (root is window)\r\n\t\troot.fitText = factory();\r\n\t}\r\n}(this, function() {\r\n\r\n\tvar css = function(el, prop) {\r\n\t\treturn getComputedStyle ? getComputedStyle(el).getPropertyValue(prop) : el.currentStyle[prop];\r\n\t};\r\n\r\n\tvar addEvent = function(el, type, fn) {\r\n\t\tif (el.addEventListener)\r\n\t\t\tel.addEventListener(type, fn, false);\r\n\t\telse\r\n\t\t\tel.attachEvent('on' + type, fn);\r\n\t};\r\n\r\n\tvar extend = function(obj, ext) {\r\n\t\tfor (var key in ext)\r\n\t\t\tif (ext.hasOwnProperty(key))\r\n\t\t\t\tobj[key] = ext[key];\r\n\t\treturn obj;\r\n\t};\r\n\r\n\tvar fitText = function(el, kompressor, options) {\r\n\r\n\t\tvar settings = extend({\r\n\t\t\t'minFontSize': -1 / 0,\r\n\t\t\t'maxFontSize': 1 / 0\r\n\t\t}, options);\r\n\r\n\t\tvar fit = function(el) {\r\n\t\t\tvar compressor = kompressor || 1;\r\n\r\n\t\t\tvar resizer = function() {\r\n\t\t\t\tel.style.fontSize = Math.max(Math.min(el.clientWidth / (compressor * 10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)) + 'px';\r\n\t\t\t};\r\n\r\n\t\t\t// Call once to set.\r\n\t\t\tresizer();\r\n\r\n\t\t\t// Bind events\r\n\t\t\t// If you have any js library which support Events, replace this part\r\n\t\t\t// and remove addEvent function (or use original jQuery version)\r\n // Candidate: http://marcj.github.io/css-element-queries/\r\n\t\t\taddEvent(window, 'resize', resizer);\r\n\t\t};\r\n\r\n\t\tif (el.length)\r\n\t\t\tfor (var i = 0; i < el.length; i++)\r\n\t\t\t\tfit(el[i]);\r\n\t\telse\r\n\t\t\tfit(el);\r\n\r\n\t\t// return set of elements\r\n\t\treturn el;\r\n\t};\r\n\r\n\treturn fitText;\r\n}));\r\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "/* global Stimulus */\nimport { Controller } from \"@hotwired/stimulus\";\nimport get from \"lodash/get\";\n\nif (window.Stimulus){\n Stimulus.debug = false; // * activate global debugging in Stimulus\n}\n\nexport default class ApplicationController extends Controller {\n\n debug = false;\n\n log_function(function_name, more_info_1 = \"\", more_info_2 = \"\"){\n const lightColorMap = {\n connect: \"green\",\n disconnect: \"red\",\n helper: \"darkCyan\",\n open: \"blue\",\n close: \"orange\",\n reset: \"darkred\",\n default: \"darkCyan\",\n };\n\n const darkColorMap = {\n connect: \"limegreen\",\n disconnect: \"red\",\n helper: \"lightblue\",\n open: \"aqua\",\n close: \"orange\",\n reset: \"darkred\",\n default: \"lightblue\",\n };\n\n const darkMode = window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n const colorMap = darkMode ? darkColorMap : lightColorMap;\n const color = get(colorMap, function_name, colorMap.default);\n let identifier = \"identifier\";\n\n try {\n identifier = this.identifier;\n } catch (error) {\n console.error(error);\n }\n\n if(this.debug){\n console.log(`%c ${identifier}#${function_name}()`, `color: ${color};`, more_info_1, more_info_2);\n }\n\n\n }\n\n\n log_error_function(function_name, more_info_1 = \"\", more_info_2 = \"\") {\n let identifier = \"identifier\";\n\n try {\n identifier = this.identifier;\n } catch (error) {\n console.error(error);\n }\n\n console.error(`${identifier}#${function_name}()`, more_info_1, more_info_2);\n }\n\n\n}\n", "//* https://github.com/peacechen/FitText-UMD\nimport ApplicationController from \"../application_controller.js\";\nimport fitText from \"FitText-UMD\";\n\nexport default class extends ApplicationController {\n static values = {\n /**\n * @type {number}\n * @default 1\n * @description The default setting works pretty well, but when it doesn't FitText has one setting you can adjust. If your text resizes poorly or is resizing all hurdy gurdy, you'll want to turn tweak up/down the compressor.It works a little like a guitar amp. (can be a float like 0.8).\n * @example\n * compressor: 0.8\n * compressor: 1\n */\n compressor: { type: Number, default: 1 },\n\n /**\n * @type {object}\n * @default {}\n * @description FitText now allows you to specify two optional pixel values: `minFontSize` and `maxFontSize`. Great for situations when you want to preserve hierarchy.\n * @example\n * config: { minFontSize: '20px', maxFontSize: '40px' }\n */\n config: { type: Object, default: {} },\n };\n\n connect() {\n this.log_function(\"connect\");\n fitText(this.element, this.compressorValue, this.configValue);\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n }\n}\n", "export default {\n // Base parallax options.\n type: 'scroll',\n speed: 0.5,\n containerClass: 'jarallax-container',\n imgSrc: null,\n imgElement: '.jarallax-img',\n imgSize: 'cover',\n imgPosition: '50% 50%',\n imgRepeat: 'no-repeat',\n keepImg: false,\n elementInViewport: null,\n zIndex: -100,\n disableParallax: false,\n\n // Callbacks.\n onScroll: null,\n onInit: null,\n onDestroy: null,\n onCoverImage: null,\n\n // Video options.\n videoClass: 'jarallax-video',\n videoSrc: null,\n videoStartTime: 0,\n videoEndTime: 0,\n videoVolume: 0,\n videoLoop: true,\n videoPlayOnlyVisible: true,\n videoLazyLoading: true,\n disableVideo: false,\n\n // Video callbacks.\n onVideoInsert: null,\n onVideoWorkerInit: null,\n};\n", "/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\n\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof global !== 'undefined') {\n win = global;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\n\nexport default win;\n", "import global from './global';\n\n/**\n * Add styles to element.\n *\n * @param {Element} el - element.\n * @param {String|Object} styles - styles list.\n *\n * @returns {Element}\n */\nexport default function css(el, styles) {\n if (typeof styles === 'string') {\n return global.getComputedStyle(el).getPropertyValue(styles);\n }\n\n Object.keys(styles).forEach((key) => {\n el.style[key] = styles[key];\n });\n return el;\n}\n", "/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nexport default function extend(out, ...args) {\n out = out || {};\n\n Object.keys(args).forEach((i) => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach((key) => {\n out[key] = args[i][key];\n });\n });\n\n return out;\n}\n", "/**\n * Get all parents of the element.\n *\n * @param {Element} elem - DOM element.\n *\n * @returns {Array}\n */\nexport default function getParents(elem) {\n const parents = [];\n\n while (elem.parentElement !== null) {\n elem = elem.parentElement;\n\n if (elem.nodeType === 1) {\n parents.push(elem);\n }\n }\n\n return parents;\n}\n", "/**\n * Document ready callback.\n * @param {Function} callback - callback will be fired once Document ready.\n */\nfunction ready(callback) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Already ready or interactive, execute callback\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, {\n capture: true,\n once: true,\n passive: true,\n });\n }\n}\n\nexport default ready;\n", "import global from './global';\n\nconst { navigator } = global;\n\nconst mobileAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n);\n\nexport default function isMobile() {\n return mobileAgent;\n}\n", "import global from './global';\nimport domReady from './ready';\nimport isMobile from './isMobile';\n\nlet wndW;\nlet wndH;\nlet $deviceHelper;\n\n/**\n * The most popular mobile browsers changes height after page scroll and this generates image jumping.\n * We can fix it using this workaround with vh units.\n */\nfunction getDeviceHeight() {\n if (!$deviceHelper && document.body) {\n $deviceHelper = document.createElement('div');\n $deviceHelper.style.cssText =\n 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';\n document.body.appendChild($deviceHelper);\n }\n\n return (\n ($deviceHelper ? $deviceHelper.clientHeight : 0) ||\n global.innerHeight ||\n document.documentElement.clientHeight\n );\n}\n\nfunction updateWindowHeight() {\n wndW = global.innerWidth || document.documentElement.clientWidth;\n\n if (isMobile()) {\n wndH = getDeviceHeight();\n } else {\n wndH = global.innerHeight || document.documentElement.clientHeight;\n }\n}\n\nupdateWindowHeight();\nglobal.addEventListener('resize', updateWindowHeight);\nglobal.addEventListener('orientationchange', updateWindowHeight);\nglobal.addEventListener('load', updateWindowHeight);\ndomReady(() => {\n updateWindowHeight({\n type: 'dom-loaded',\n });\n});\n\nexport default function getWindowSize() {\n return {\n width: wndW,\n height: wndH,\n };\n}\n", "import global from './global';\nimport getWindowSize from './getWindowSize';\n\n// List with all jarallax instances\n// need to render all in one scroll/resize event.\nconst jarallaxList = [];\n\nfunction updateParallax() {\n if (!jarallaxList.length) {\n return;\n }\n\n const { width: wndW, height: wndH } = getWindowSize();\n\n jarallaxList.forEach((data, k) => {\n const { instance, oldData } = data;\n\n if (!instance.isVisible()) {\n return;\n }\n\n const clientRect = instance.$item.getBoundingClientRect();\n\n const newData = {\n width: clientRect.width,\n height: clientRect.height,\n top: clientRect.top,\n bottom: clientRect.bottom,\n wndW,\n wndH,\n };\n\n const isResized =\n !oldData ||\n oldData.wndW !== newData.wndW ||\n oldData.wndH !== newData.wndH ||\n oldData.width !== newData.width ||\n oldData.height !== newData.height;\n const isScrolled =\n isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;\n\n jarallaxList[k].oldData = newData;\n\n if (isResized) {\n instance.onResize();\n }\n if (isScrolled) {\n instance.onScroll();\n }\n });\n\n global.requestAnimationFrame(updateParallax);\n}\n\nconst visibilityObserver = new global.IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n entry.target.jarallax.isElementInViewport = entry.isIntersecting;\n });\n },\n {\n // We have to start parallax calculation before the block is in view\n // to prevent possible parallax jumping.\n rootMargin: '50px',\n }\n);\n\nexport function addObserver(instance) {\n jarallaxList.push({\n instance,\n });\n\n if (jarallaxList.length === 1) {\n global.requestAnimationFrame(updateParallax);\n }\n\n visibilityObserver.observe(instance.options.elementInViewport || instance.$item);\n}\n\nexport function removeObserver(instance) {\n jarallaxList.forEach((data, key) => {\n if (data.instance.instanceID === instance.instanceID) {\n jarallaxList.splice(key, 1);\n }\n });\n\n visibilityObserver.unobserve(instance.options.elementInViewport || instance.$item);\n}\n", "/* eslint-disable class-methods-use-this */\nimport defaults from './defaults';\nimport global from './utils/global';\nimport css from './utils/css';\nimport extend from './utils/extend';\nimport getParents from './utils/getParents';\nimport getWindowSize from './utils/getWindowSize';\nimport { addObserver, removeObserver } from './utils/observer';\n\nconst { navigator } = global;\n\nlet instanceID = 0;\n\n// Jarallax class\nclass Jarallax {\n constructor(item, userOptions) {\n const self = this;\n\n self.instanceID = instanceID;\n instanceID += 1;\n\n self.$item = item;\n\n self.defaults = { ...defaults };\n\n // prepare data-options\n const dataOptions = self.$item.dataset || {};\n const pureDataOptions = {};\n Object.keys(dataOptions).forEach((key) => {\n const lowerCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (lowerCaseOption && typeof self.defaults[lowerCaseOption] !== 'undefined') {\n pureDataOptions[lowerCaseOption] = dataOptions[key];\n }\n });\n\n self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);\n self.pureOptions = self.extend({}, self.options);\n\n // prepare 'true' and 'false' strings to boolean\n Object.keys(self.options).forEach((key) => {\n if (self.options[key] === 'true') {\n self.options[key] = true;\n } else if (self.options[key] === 'false') {\n self.options[key] = false;\n }\n });\n\n // fix speed option [-1.0, 2.0]\n self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed)));\n\n // prepare disableParallax callback\n if (typeof self.options.disableParallax === 'string') {\n self.options.disableParallax = new RegExp(self.options.disableParallax);\n }\n if (self.options.disableParallax instanceof RegExp) {\n const disableParallaxRegexp = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableParallax !== 'function') {\n // Support for `true` option value.\n const disableParallaxDefault = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxDefault === true;\n }\n\n // prepare disableVideo callback\n if (typeof self.options.disableVideo === 'string') {\n self.options.disableVideo = new RegExp(self.options.disableVideo);\n }\n if (self.options.disableVideo instanceof RegExp) {\n const disableVideoRegexp = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableVideo !== 'function') {\n // Support for `true` option value.\n const disableVideoDefault = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoDefault === true;\n }\n\n // custom element to check if parallax in viewport\n let elementInVP = self.options.elementInViewport;\n // get first item from array\n if (\n elementInVP &&\n typeof elementInVP === 'object' &&\n typeof elementInVP.length !== 'undefined'\n ) {\n [elementInVP] = elementInVP;\n }\n // check if dom element\n if (!(elementInVP instanceof Element)) {\n elementInVP = null;\n }\n self.options.elementInViewport = elementInVP;\n\n self.image = {\n src: self.options.imgSrc || null,\n $container: null,\n useImgTag: false,\n\n // 1. Position fixed is needed for the most of browsers because absolute position have glitches\n // 2. On MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75\n // 3. Previously used 'absolute' for mobile devices. But we re-tested on iPhone 12 and 'fixed' position is working better, then 'absolute', so for now position is always 'fixed'\n position: 'fixed',\n };\n\n if (self.initImg() && self.canInitParallax()) {\n self.init();\n }\n }\n\n css(el, styles) {\n return css(el, styles);\n }\n\n extend(out, ...args) {\n return extend(out, ...args);\n }\n\n // get window size and scroll position. Useful for extensions\n getWindowData() {\n const { width, height } = getWindowSize();\n\n return {\n width,\n height,\n y: document.documentElement.scrollTop,\n };\n }\n\n // Jarallax functions\n initImg() {\n const self = this;\n\n // find image element\n let $imgElement = self.options.imgElement;\n if ($imgElement && typeof $imgElement === 'string') {\n $imgElement = self.$item.querySelector($imgElement);\n }\n\n // check if dom element\n if (!($imgElement instanceof Element)) {\n if (self.options.imgSrc) {\n $imgElement = new Image();\n $imgElement.src = self.options.imgSrc;\n } else {\n $imgElement = null;\n }\n }\n\n if ($imgElement) {\n if (self.options.keepImg) {\n self.image.$item = $imgElement.cloneNode(true);\n } else {\n self.image.$item = $imgElement;\n self.image.$itemParent = $imgElement.parentNode;\n }\n self.image.useImgTag = true;\n }\n\n // true if there is img tag\n if (self.image.$item) {\n return true;\n }\n\n // get image src\n if (self.image.src === null) {\n self.image.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n self.image.bgImage = self.css(self.$item, 'background-image');\n }\n return !(!self.image.bgImage || self.image.bgImage === 'none');\n }\n\n canInitParallax() {\n return !this.options.disableParallax();\n }\n\n init() {\n const self = this;\n const containerStyles = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n };\n let imageStyles = {\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden',\n };\n\n if (!self.options.keepImg) {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n if (self.image.useImgTag) {\n const curImgStyle = self.image.$item.getAttribute('style');\n if (curImgStyle) {\n self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);\n }\n }\n }\n\n // set relative position and z-index to the parent\n if (self.css(self.$item, 'position') === 'static') {\n self.css(self.$item, {\n position: 'relative',\n });\n }\n if (self.css(self.$item, 'z-index') === 'auto') {\n self.css(self.$item, {\n zIndex: 0,\n });\n }\n\n // container for parallax image\n self.image.$container = document.createElement('div');\n self.css(self.image.$container, containerStyles);\n self.css(self.image.$container, {\n 'z-index': self.options.zIndex,\n });\n\n // it will remove some image overlapping\n // overlapping occur due to an image position fixed inside absolute position element\n // needed only when background in fixed position\n if (this.image.position === 'fixed') {\n self.css(self.image.$container, {\n '-webkit-clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n 'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n });\n }\n\n // Add container unique ID.\n self.image.$container.setAttribute('id', `jarallax-container-${self.instanceID}`);\n\n // Add container class.\n if (self.options.containerClass) {\n self.image.$container.setAttribute('class', self.options.containerClass);\n }\n\n self.$item.appendChild(self.image.$container);\n\n // use img tag\n if (self.image.useImgTag) {\n imageStyles = self.extend(\n {\n 'object-fit': self.options.imgSize,\n 'object-position': self.options.imgPosition,\n 'max-width': 'none',\n },\n containerStyles,\n imageStyles\n );\n\n // use div with background image\n } else {\n self.image.$item = document.createElement('div');\n if (self.image.src) {\n imageStyles = self.extend(\n {\n 'background-position': self.options.imgPosition,\n 'background-size': self.options.imgSize,\n 'background-repeat': self.options.imgRepeat,\n 'background-image': self.image.bgImage || `url(\"${self.image.src}\")`,\n },\n containerStyles,\n imageStyles\n );\n }\n }\n\n if (\n self.options.type === 'opacity' ||\n self.options.type === 'scale' ||\n self.options.type === 'scale-opacity' ||\n self.options.speed === 1\n ) {\n self.image.position = 'absolute';\n }\n\n // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)\n // discussion - https://github.com/nk-o/jarallax/issues/9\n // 2. Check if parents have overflow scroll\n if (self.image.position === 'fixed') {\n const $parents = getParents(self.$item).filter((el) => {\n const styles = global.getComputedStyle(el);\n const parentTransform =\n styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;\n const overflowRegex = /(auto|scroll)/;\n\n return (\n (parentTransform && parentTransform !== 'none') ||\n overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x'])\n );\n });\n\n self.image.position = $parents.length ? 'absolute' : 'fixed';\n }\n\n // add position to parallax block\n imageStyles.position = self.image.position;\n\n // insert parallax image\n self.css(self.image.$item, imageStyles);\n self.image.$container.appendChild(self.image.$item);\n\n // set initial position and size\n self.onResize();\n self.onScroll(true);\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n\n // remove default user background\n if (self.css(self.$item, 'background-image') !== 'none') {\n self.css(self.$item, {\n 'background-image': 'none',\n });\n }\n\n addObserver(self);\n }\n\n destroy() {\n const self = this;\n\n removeObserver(self);\n\n // return styles on container as before jarallax init\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n self.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesTag) {\n self.$item.removeAttribute('style');\n } else {\n self.$item.setAttribute('style', originalStylesTag);\n }\n\n if (self.image.useImgTag) {\n // return styles on img tag as before jarallax init\n const originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');\n self.image.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesImgTag) {\n self.image.$item.removeAttribute('style');\n } else {\n self.image.$item.setAttribute('style', originalStylesTag);\n }\n\n // move img tag to its default position\n if (self.image.$itemParent) {\n self.image.$itemParent.appendChild(self.image.$item);\n }\n }\n\n // remove additional dom elements\n if (self.image.$container) {\n self.image.$container.parentNode.removeChild(self.image.$container);\n }\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // delete jarallax from item\n delete self.$item.jarallax;\n }\n\n coverImage() {\n const self = this;\n\n const { height: wndH } = getWindowSize();\n const rect = self.image.$container.getBoundingClientRect();\n const contH = rect.height;\n const { speed } = self.options;\n const isScroll = self.options.type === 'scroll' || self.options.type === 'scroll-opacity';\n let scrollDist = 0;\n let resultH = contH;\n let resultMT = 0;\n\n // scroll parallax\n if (isScroll) {\n // scroll distance and height for image\n if (speed < 0) {\n scrollDist = speed * Math.max(contH, wndH);\n\n if (wndH < contH) {\n scrollDist -= speed * (contH - wndH);\n }\n } else {\n scrollDist = speed * (contH + wndH);\n }\n\n // size for scroll parallax\n if (speed > 1) {\n resultH = Math.abs(scrollDist - wndH);\n } else if (speed < 0) {\n resultH = scrollDist / speed + Math.abs(scrollDist);\n } else {\n resultH += (wndH - contH) * (1 - speed);\n }\n\n scrollDist /= 2;\n }\n\n // store scroll distance\n self.parallaxScrollDistance = scrollDist;\n\n // vertical center\n if (isScroll) {\n resultMT = (wndH - resultH) / 2;\n } else {\n resultMT = (contH - resultH) / 2;\n }\n\n // apply result to item\n self.css(self.image.$item, {\n height: `${resultH}px`,\n marginTop: `${resultMT}px`,\n left: self.image.position === 'fixed' ? `${rect.left}px` : '0',\n width: `${rect.width}px`,\n });\n\n // call onCoverImage event\n if (self.options.onCoverImage) {\n self.options.onCoverImage.call(self);\n }\n\n // return some useful data. Used in the video cover function\n return {\n image: {\n height: resultH,\n marginTop: resultMT,\n },\n container: rect,\n };\n }\n\n isVisible() {\n return this.isElementInViewport || false;\n }\n\n onScroll(force) {\n const self = this;\n\n // stop calculations if item is not in viewport\n if (!force && !self.isVisible()) {\n return;\n }\n\n const { height: wndH } = getWindowSize();\n const rect = self.$item.getBoundingClientRect();\n const contT = rect.top;\n const contH = rect.height;\n const styles = {};\n\n // calculate parallax helping variables\n const beforeTop = Math.max(0, contT);\n const beforeTopEnd = Math.max(0, contH + contT);\n const afterTop = Math.max(0, -contT);\n const beforeBottom = Math.max(0, contT + contH - wndH);\n const beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));\n const afterBottom = Math.max(0, -contT + wndH - contH);\n const fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH));\n\n // calculate on how percent of section is visible\n let visiblePercent = 1;\n if (contH < wndH) {\n visiblePercent = 1 - (afterTop || beforeBottom) / contH;\n } else if (beforeTopEnd <= wndH) {\n visiblePercent = beforeTopEnd / wndH;\n } else if (beforeBottomEnd <= wndH) {\n visiblePercent = beforeBottomEnd / wndH;\n }\n\n // opacity\n if (\n self.options.type === 'opacity' ||\n self.options.type === 'scale-opacity' ||\n self.options.type === 'scroll-opacity'\n ) {\n styles.transform = 'translate3d(0,0,0)';\n styles.opacity = visiblePercent;\n }\n\n // scale\n if (self.options.type === 'scale' || self.options.type === 'scale-opacity') {\n let scale = 1;\n if (self.options.speed < 0) {\n scale -= self.options.speed * visiblePercent;\n } else {\n scale += self.options.speed * (1 - visiblePercent);\n }\n styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n }\n\n // scroll\n if (self.options.type === 'scroll' || self.options.type === 'scroll-opacity') {\n let positionY = self.parallaxScrollDistance * fromViewportCenter;\n\n // fix if parallax block in absolute position\n if (self.image.position === 'absolute') {\n positionY -= contT;\n }\n\n styles.transform = `translate3d(0,${positionY}px,0)`;\n }\n\n self.css(self.image.$item, styles);\n\n // call onScroll event\n if (self.options.onScroll) {\n self.options.onScroll.call(self, {\n section: rect,\n\n beforeTop,\n beforeTopEnd,\n afterTop,\n beforeBottom,\n beforeBottomEnd,\n afterBottom,\n\n visiblePercent,\n fromViewportCenter,\n });\n }\n }\n\n onResize() {\n this.coverImage();\n }\n}\n\n// global definition\nconst jarallax = function (items, options, ...args) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if (\n typeof HTMLElement === 'object'\n ? items instanceof HTMLElement\n : items &&\n typeof items === 'object' &&\n items !== null &&\n items.nodeType === 1 &&\n typeof items.nodeName === 'string'\n ) {\n items = [items];\n }\n\n const len = items.length;\n let k = 0;\n let ret;\n\n for (k; k < len; k += 1) {\n if (typeof options === 'object' || typeof options === 'undefined') {\n if (!items[k].jarallax) {\n items[k].jarallax = new Jarallax(items[k], options);\n }\n } else if (items[k].jarallax) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].jarallax[options].apply(items[k].jarallax, args);\n }\n if (typeof ret !== 'undefined') {\n return ret;\n }\n }\n\n return items;\n};\njarallax.constructor = Jarallax;\n\nexport default jarallax;\n", "/*!\n * Video Worker v2.2.0 (https://github.com/nk-o/video-worker)\n * Copyright 2024 nK \n * Licensed under MIT (https://github.com/nk-o/video-worker/blob/master/LICENSE)\n */\n\nvar defaults = {\n autoplay: false,\n loop: false,\n mute: false,\n volume: 100,\n showControls: true,\n accessibilityHidden: false,\n // start / end video time in seconds\n startTime: 0,\n endTime: 0\n};\n\n/**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\nfunction extend(out, ...args) {\n out = out || {};\n Object.keys(args).forEach(i => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach(key => {\n out[key] = args[i][key];\n });\n });\n return out;\n}\n\nlet ID = 0;\nclass VideoWorkerBase {\n type = 'none';\n constructor(url, options) {\n const self = this;\n self.url = url;\n self.options_default = {\n ...defaults\n };\n self.options = extend({}, self.options_default, options);\n\n // check URL\n self.videoID = self.constructor.parseURL(url);\n\n // init\n if (self.videoID) {\n self.init();\n }\n }\n isValid() {\n return !!this.videoID;\n }\n init() {\n const self = this;\n self.ID = ID;\n ID += 1;\n self.playerID = `VideoWorker-${self.ID}`;\n }\n\n // events\n on(name, callback) {\n this.userEventsList = this.userEventsList || [];\n\n // add new callback in events list\n (this.userEventsList[name] || (this.userEventsList[name] = [])).push(callback);\n }\n off(name, callback) {\n if (!this.userEventsList || !this.userEventsList[name]) {\n return;\n }\n if (!callback) {\n delete this.userEventsList[name];\n } else {\n this.userEventsList[name].forEach((val, key) => {\n if (val === callback) {\n this.userEventsList[name][key] = false;\n }\n });\n }\n }\n fire(name, ...args) {\n if (this.userEventsList && typeof this.userEventsList[name] !== 'undefined') {\n this.userEventsList[name].forEach(val => {\n // call with all arguments\n if (val) {\n val.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Methods used in providers.\n */\n /* eslint-disable */\n static parseURL(url) {\n return false;\n }\n play(start) {}\n pause() {}\n mute() {}\n unmute() {}\n setVolume(volume = false) {}\n getVolume(callback) {}\n getMuted(callback) {}\n setCurrentTime(currentTime = false) {}\n getCurrentTime(callback) {}\n getImageURL(callback) {}\n getVideo(callback) {}\n /* eslint-enable */\n}\n\n/* eslint-disable import/no-mutable-exports */\n/* eslint-disable no-restricted-globals */\nlet win;\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof global !== 'undefined') {\n win = global;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n}\nvar global$1 = win;\n\n// Deferred\n// thanks http://stackoverflow.com/questions/18096715/implement-deferred-object-without-using-jquery\nfunction Deferred() {\n this.doneCallbacks = [];\n this.failCallbacks = [];\n}\nDeferred.prototype = {\n execute(list, args) {\n let i = list.length;\n // eslint-disable-next-line no-param-reassign\n args = Array.prototype.slice.call(args);\n while (i) {\n i -= 1;\n list[i].apply(null, args);\n }\n },\n resolve(...args) {\n this.execute(this.doneCallbacks, args);\n },\n reject(...args) {\n this.execute(this.failCallbacks, args);\n },\n done(callback) {\n this.doneCallbacks.push(callback);\n },\n fail(callback) {\n this.failCallbacks.push(callback);\n }\n};\n\nlet YoutubeAPIadded = 0;\nlet loadingYoutubePlayer = 0;\nconst loadingYoutubeDefer = /*#__PURE__*/new Deferred();\nfunction loadAPI$1() {\n if (YoutubeAPIadded) {\n return;\n }\n YoutubeAPIadded = true;\n const src = 'https://www.youtube.com/iframe_api';\n\n // add script in head section\n let tag = document.createElement('script');\n let head = document.getElementsByTagName('head')[0];\n tag.src = src;\n head.appendChild(tag);\n head = null;\n tag = null;\n}\nfunction onAPIready$1(callback) {\n // Listen for global YT player callback\n if ((typeof global$1.YT === 'undefined' || global$1.YT.loaded === 0) && !loadingYoutubePlayer) {\n // Prevents Ready event from being called twice\n loadingYoutubePlayer = 1;\n\n // Creates deferred so, other players know when to wait.\n global$1.onYouTubeIframeAPIReady = function () {\n global$1.onYouTubeIframeAPIReady = null;\n loadingYoutubeDefer.resolve('done');\n callback();\n };\n } else if (typeof global$1.YT === 'object' && global$1.YT.loaded === 1) {\n callback();\n } else {\n loadingYoutubeDefer.done(() => {\n callback();\n });\n }\n}\nclass VideoWorkerYoutube extends VideoWorkerBase {\n type = 'youtube';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const regExp = /.*(?:youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|shorts\\/|watch\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return match && match[1].length === 11 ? match[1] : false;\n }\n init() {\n super.init();\n loadAPI$1();\n }\n play(start) {\n const self = this;\n if (!self.player || !self.player.playVideo) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.seekTo(start || 0);\n }\n if (global$1.YT.PlayerState.PLAYING !== self.player.getPlayerState()) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.playVideo();\n }\n });\n } else {\n self.player.playVideo();\n }\n }\n }\n pause() {\n const self = this;\n if (!self.player || !self.player.pauseVideo) {\n return;\n }\n if (global$1.YT.PlayerState.PLAYING === self.player.getPlayerState()) {\n self.player.pauseVideo();\n }\n }\n mute() {\n const self = this;\n if (!self.player || !self.player.mute) {\n return;\n }\n self.player.mute();\n }\n unmute() {\n const self = this;\n if (!self.player || !self.player.unMute) {\n return;\n }\n self.player.unMute();\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number' || !self.player.setVolume) {\n return;\n }\n self.player.setVolume(volume);\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n if (self.player.getVolume) {\n callback(self.player.getVolume());\n }\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n if (self.player.isMuted) {\n callback(self.player.isMuted());\n }\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number' || !self.player.seekTo) {\n return;\n }\n self.player.seekTo(currentTime);\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player || !self.player.getCurrentTime) {\n return;\n }\n callback(self.player.getCurrentTime());\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n return;\n }\n const availableSizes = ['maxresdefault', 'sddefault', 'hqdefault', '0'];\n let step = 0;\n const tempImg = new Image();\n tempImg.onload = function () {\n // if no thumbnail, youtube add their own image with width = 120px\n if ((this.naturalWidth || this.width) !== 120 || step === availableSizes.length - 1) {\n // ok\n self.videoImage = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n callback(self.videoImage);\n } else {\n // try another size\n step += 1;\n this.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n }\n };\n tempImg.src = `https://img.youtube.com/vi/${self.videoID}/${availableSizes[step]}.jpg`;\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n onAPIready$1(() => {\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n self.playerOptions = {\n // GDPR Compliance.\n host: 'https://www.youtube-nocookie.com',\n videoId: self.videoID,\n playerVars: {\n autohide: 1,\n rel: 0,\n autoplay: 0,\n // autoplay enable on mobile devices\n playsinline: 1\n }\n };\n\n // hide controls\n if (!self.options.showControls) {\n self.playerOptions.playerVars.iv_load_policy = 3;\n self.playerOptions.playerVars.modestbranding = 1;\n self.playerOptions.playerVars.controls = 0;\n self.playerOptions.playerVars.showinfo = 0;\n self.playerOptions.playerVars.disablekb = 1;\n }\n\n // events\n let ytStarted;\n let ytProgressInterval;\n self.playerOptions.events = {\n onReady(e) {\n // mute\n if (self.options.mute) {\n e.target.mute();\n } else if (typeof self.options.volume === 'number') {\n e.target.setVolume(self.options.volume);\n }\n\n // autoplay\n if (self.options.autoplay) {\n self.play(self.options.startTime);\n }\n self.fire('ready', e);\n\n // For seamless loops, set the endTime to 0.1 seconds less than the video's duration\n // https://github.com/nk-o/video-worker/issues/2\n if (self.options.loop && !self.options.endTime) {\n const secondsOffset = 0.1;\n self.options.endTime = self.player.getDuration() - secondsOffset;\n }\n\n // volumechange\n setInterval(() => {\n self.getVolume(volume => {\n if (self.options.volume !== volume) {\n self.options.volume = volume;\n self.fire('volumechange', e);\n }\n });\n }, 150);\n },\n onStateChange(e) {\n // loop\n if (self.options.loop && e.data === global$1.YT.PlayerState.ENDED) {\n self.play(self.options.startTime);\n }\n if (!ytStarted && e.data === global$1.YT.PlayerState.PLAYING) {\n ytStarted = 1;\n self.fire('started', e);\n }\n if (e.data === global$1.YT.PlayerState.PLAYING) {\n self.fire('play', e);\n }\n if (e.data === global$1.YT.PlayerState.PAUSED) {\n self.fire('pause', e);\n }\n if (e.data === global$1.YT.PlayerState.ENDED) {\n self.fire('ended', e);\n }\n\n // progress check\n if (e.data === global$1.YT.PlayerState.PLAYING) {\n ytProgressInterval = setInterval(() => {\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && self.player.getCurrentTime() >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n }, 150);\n } else {\n clearInterval(ytProgressInterval);\n }\n },\n onError(e) {\n self.fire('error', e);\n }\n };\n const firstInit = !self.$video;\n if (firstInit) {\n const div = document.createElement('div');\n div.setAttribute('id', self.playerID);\n hiddenDiv.appendChild(div);\n document.body.appendChild(hiddenDiv);\n }\n self.player = self.player || new global$1.YT.Player(self.playerID, self.playerOptions);\n if (firstInit) {\n self.$video = document.getElementById(self.playerID);\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n\n // get video width and height\n self.videoWidth = parseInt(self.$video.getAttribute('width'), 10) || 1280;\n self.videoHeight = parseInt(self.$video.getAttribute('height'), 10) || 720;\n }\n callback(self.$video);\n });\n }\n}\n\nlet VimeoAPIadded = 0;\nlet loadingVimeoPlayer = 0;\nconst loadingVimeoDefer = /*#__PURE__*/new Deferred();\nfunction loadAPI() {\n if (VimeoAPIadded) {\n return;\n }\n VimeoAPIadded = true;\n\n // Useful when Vimeo API added using RequireJS https://github.com/nk-o/video-worker/pull/7\n if (typeof global$1.Vimeo !== 'undefined') {\n return;\n }\n const src = 'https://player.vimeo.com/api/player.js';\n\n // add script in head section\n let tag = document.createElement('script');\n let head = document.getElementsByTagName('head')[0];\n tag.src = src;\n head.appendChild(tag);\n head = null;\n tag = null;\n}\nfunction onAPIready(callback) {\n if (typeof global$1.Vimeo === 'undefined' && !loadingVimeoPlayer) {\n loadingVimeoPlayer = 1;\n const vimeoInterval = setInterval(() => {\n if (typeof global$1.Vimeo !== 'undefined') {\n clearInterval(vimeoInterval);\n loadingVimeoDefer.resolve('done');\n callback();\n }\n }, 20);\n } else if (typeof global$1.Vimeo !== 'undefined') {\n callback();\n } else {\n loadingVimeoDefer.done(() => {\n callback();\n });\n }\n}\nclass VideoWorkerVimeo extends VideoWorkerBase {\n type = 'vimeo';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const regExp = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\n const match = url.match(regExp);\n return match && match[3] ? match[3] : false;\n }\n\n // Try to extract a hash for private videos from the URL.\n // Thanks to https://github.com/sampotts/plyr\n static parseURLHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n return found && found.length === 5 ? found[4] : null;\n }\n init() {\n super.init();\n loadAPI();\n }\n play(start) {\n const self = this;\n if (!self.player) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.setCurrentTime(start);\n }\n self.player.getPaused().then(paused => {\n if (paused) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.play();\n }\n });\n } else {\n self.player.play();\n }\n }\n });\n }\n pause() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.player.getPaused().then(paused => {\n if (!paused) {\n self.player.pause();\n }\n });\n }\n mute() {\n const self = this;\n if (!self.player || !self.player.setVolume) {\n return;\n }\n self.setVolume(0);\n }\n unmute() {\n const self = this;\n if (!self.player || !self.player.setVolume) {\n return;\n }\n\n // In case the default volume is 0, we have to set 100 when unmute.\n self.setVolume(self.options.volume || 100);\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number' || !self.player.setVolume) {\n return;\n }\n self.player.setVolume(volume / 100);\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n if (self.player.getVolume) {\n self.player.getVolume().then(volume => {\n callback(volume * 100);\n });\n }\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n if (self.player.getVolume) {\n self.player.getVolume().then(volume => {\n callback(!!volume);\n });\n }\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number' || !self.player.setCurrentTime) {\n return;\n }\n self.player.setCurrentTime(currentTime);\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player || !self.player.getCurrentTime) {\n return;\n }\n self.player.getCurrentTime().then(currentTime => {\n callback(currentTime);\n });\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n return;\n }\n\n // We should provide width to get HQ thumbnail URL.\n let width = global$1.innerWidth || 1920;\n if (global$1.devicePixelRatio) {\n width *= global$1.devicePixelRatio;\n }\n width = Math.min(width, 1920);\n let request = new XMLHttpRequest();\n // https://vimeo.com/api/oembed.json?url=https://vimeo.com/235212527\n request.open('GET', `https://vimeo.com/api/oembed.json?url=${self.url}&width=${width}`, true);\n request.onreadystatechange = function () {\n if (this.readyState === 4) {\n if (this.status >= 200 && this.status < 400) {\n // Success!\n const response = JSON.parse(this.responseText);\n if (response.thumbnail_url) {\n self.videoImage = response.thumbnail_url;\n callback(self.videoImage);\n }\n }\n }\n };\n request.send();\n request = null;\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n onAPIready(() => {\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n self.playerOptions = {\n // GDPR Compliance.\n dnt: 1,\n id: self.videoID,\n autopause: 0,\n transparent: 0,\n autoplay: self.options.autoplay ? 1 : 0,\n loop: self.options.loop ? 1 : 0,\n muted: self.options.mute || self.options.volume === 0 ? 1 : 0\n };\n\n // private video hash\n const urlHash = self.constructor.parseURLHash(self.url);\n if (urlHash) {\n self.playerOptions.h = urlHash;\n }\n\n // hide controls\n if (!self.options.showControls) {\n self.playerOptions.controls = 0;\n }\n\n // enable background option\n if (!self.options.showControls && self.options.loop && self.options.autoplay) {\n self.playerOptions.background = 1;\n }\n if (!self.$video) {\n let playerOptionsString = '';\n Object.keys(self.playerOptions).forEach(key => {\n if (playerOptionsString !== '') {\n playerOptionsString += '&';\n }\n playerOptionsString += `${key}=${encodeURIComponent(self.playerOptions[key])}`;\n });\n\n // we need to create iframe manually because when we create it using API\n // js events won't triggers after iframe moved to another place\n self.$video = document.createElement('iframe');\n self.$video.setAttribute('id', self.playerID);\n self.$video.setAttribute('src', `https://player.vimeo.com/video/${self.videoID}?${playerOptionsString}`);\n self.$video.setAttribute('frameborder', '0');\n self.$video.setAttribute('mozallowfullscreen', '');\n self.$video.setAttribute('allowfullscreen', '');\n self.$video.setAttribute('title', 'Vimeo video player');\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n hiddenDiv.appendChild(self.$video);\n document.body.appendChild(hiddenDiv);\n }\n self.player = self.player || new global$1.Vimeo.Player(self.$video, self.playerOptions);\n\n // Since Vimeo removed the `volume` parameter, we have to set it manually.\n if (!self.options.mute && typeof self.options.volume === 'number') {\n self.setVolume(self.options.volume);\n }\n\n // set current time for autoplay\n if (self.options.startTime && self.options.autoplay) {\n self.player.setCurrentTime(self.options.startTime);\n }\n\n // get video width and height\n self.player.getVideoWidth().then(width => {\n self.videoWidth = width || 1280;\n });\n self.player.getVideoHeight().then(height => {\n self.videoHeight = height || 720;\n });\n\n // events\n let vmStarted;\n self.player.on('timeupdate', e => {\n if (!vmStarted) {\n self.fire('started', e);\n vmStarted = 1;\n }\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && e.seconds >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n });\n self.player.on('play', e => {\n self.fire('play', e);\n\n // check for the start time and start with it\n if (self.options.startTime && e.seconds === 0) {\n self.play(self.options.startTime);\n }\n });\n self.player.on('pause', e => {\n self.fire('pause', e);\n });\n self.player.on('ended', e => {\n self.fire('ended', e);\n });\n self.player.on('loaded', e => {\n self.fire('ready', e);\n });\n self.player.on('volumechange', e => {\n self.getVolume(volume => {\n self.options.volume = volume;\n });\n self.fire('volumechange', e);\n });\n self.player.on('error', e => {\n self.fire('error', e);\n });\n callback(self.$video);\n });\n }\n}\n\nclass VideoWorkerLocal extends VideoWorkerBase {\n type = 'local';\n static parseURL(url) {\n // eslint-disable-next-line no-useless-escape\n const videoFormats = url.split(/,(?=mp4\\:|webm\\:|ogv\\:|ogg\\:)/);\n const result = {};\n let ready = 0;\n videoFormats.forEach(val => {\n // eslint-disable-next-line no-useless-escape\n const match = val.match(/^(mp4|webm|ogv|ogg)\\:(.*)/);\n if (match && match[1] && match[2]) {\n // eslint-disable-next-line prefer-destructuring\n result[match[1] === 'ogv' ? 'ogg' : match[1]] = match[2];\n ready = 1;\n }\n });\n return ready ? result : false;\n }\n play(start) {\n const self = this;\n if (!self.player) {\n return;\n }\n if (typeof start !== 'undefined') {\n self.player.currentTime = start;\n }\n if (self.player.paused) {\n // Don't play if video is already ended and with no loop.\n if (self.options.endTime && !self.options.loop) {\n self.getCurrentTime(seconds => {\n if (seconds < self.options.endTime) {\n self.player.play();\n }\n });\n } else {\n self.player.play();\n }\n }\n }\n pause() {\n const self = this;\n if (!self.player || self.player.paused) {\n return;\n }\n self.player.pause();\n }\n mute() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.$video.muted = true;\n }\n unmute() {\n const self = this;\n if (!self.player) {\n return;\n }\n self.$video.muted = false;\n }\n setVolume(volume = false) {\n const self = this;\n if (!self.player || typeof volume !== 'number') {\n return;\n }\n self.$video.volume = volume / 100;\n }\n getVolume(callback) {\n const self = this;\n if (!self.player) {\n callback(false);\n return;\n }\n callback(self.$video.volume * 100);\n }\n getMuted(callback) {\n const self = this;\n if (!self.player) {\n callback(null);\n return;\n }\n callback(self.$video.muted);\n }\n setCurrentTime(currentTime = false) {\n const self = this;\n if (!self.player || typeof currentTime !== 'number') {\n return;\n }\n self.$video.currentTime = currentTime;\n }\n getCurrentTime(callback) {\n const self = this;\n if (!self.player) {\n return;\n }\n callback(self.player.currentTime);\n }\n getImageURL(callback) {\n const self = this;\n if (self.videoImage) {\n callback(self.videoImage);\n }\n }\n getVideo(callback) {\n const self = this;\n\n // return generated video block\n if (self.$video) {\n callback(self.$video);\n return;\n }\n\n // generate new video block\n let hiddenDiv;\n if (!self.$video) {\n hiddenDiv = document.createElement('div');\n hiddenDiv.style.display = 'none';\n }\n function addSourceElement(element, src, type) {\n const source = document.createElement('source');\n source.src = src;\n source.type = type;\n element.appendChild(source);\n }\n if (!self.$video) {\n self.$video = document.createElement('video');\n self.player = self.$video;\n\n // show controls\n if (self.options.showControls) {\n self.$video.controls = true;\n }\n\n // set volume\n if (typeof self.options.volume === 'number') {\n self.setVolume(self.options.volume);\n }\n\n // mute (it is required to mute after the volume set)\n if (self.options.mute) {\n self.mute();\n }\n\n // loop\n if (self.options.loop) {\n self.$video.loop = true;\n }\n\n // autoplay enable on mobile devices\n self.$video.setAttribute('playsinline', '');\n self.$video.setAttribute('webkit-playsinline', '');\n\n // add accessibility attributes\n if (self.options.accessibilityHidden) {\n self.$video.setAttribute('tabindex', '-1');\n self.$video.setAttribute('aria-hidden', 'true');\n }\n self.$video.setAttribute('id', self.playerID);\n hiddenDiv.appendChild(self.$video);\n document.body.appendChild(hiddenDiv);\n Object.keys(self.videoID).forEach(key => {\n addSourceElement(self.$video, self.videoID[key], `video/${key}`);\n });\n }\n let locStarted;\n self.player.addEventListener('playing', e => {\n if (!locStarted) {\n self.fire('started', e);\n }\n locStarted = 1;\n });\n self.player.addEventListener('timeupdate', function (e) {\n self.fire('timeupdate', e);\n\n // check for end of video and play again or stop\n if (self.options.endTime && this.currentTime >= self.options.endTime) {\n if (self.options.loop) {\n self.play(self.options.startTime);\n } else {\n self.pause();\n }\n }\n });\n self.player.addEventListener('play', e => {\n self.fire('play', e);\n });\n self.player.addEventListener('pause', e => {\n self.fire('pause', e);\n });\n self.player.addEventListener('ended', e => {\n self.fire('ended', e);\n });\n self.player.addEventListener('loadedmetadata', function () {\n // get video width and height\n self.videoWidth = this.videoWidth || 1280;\n self.videoHeight = this.videoHeight || 720;\n self.fire('ready');\n\n // autoplay\n if (self.options.autoplay) {\n self.play(self.options.startTime);\n }\n });\n self.player.addEventListener('volumechange', e => {\n self.getVolume(volume => {\n self.options.volume = volume;\n });\n self.fire('volumechange', e);\n });\n self.player.addEventListener('error', e => {\n self.fire('error', e);\n });\n callback(self.$video);\n }\n}\n\nfunction VideoWorker(url, options) {\n let result = false;\n Object.keys(VideoWorker.providers).forEach(key => {\n if (!result && VideoWorker.providers[key].parseURL(url)) {\n result = new VideoWorker.providers[key](url, options);\n }\n });\n return result || new VideoWorkerBase(url, options);\n}\nVideoWorker.BaseClass = VideoWorkerBase;\nVideoWorker.providers = {\n Youtube: VideoWorkerYoutube,\n Vimeo: VideoWorkerVimeo,\n Local: VideoWorkerLocal\n};\n\nexport { VideoWorker as default };\n//# sourceMappingURL=video-worker.esm.js.map\n", "import VideoWorker from 'video-worker';\n\nimport global from './utils/global';\n\nfunction jarallaxVideo(jarallax = global.jarallax) {\n if (typeof jarallax === 'undefined') {\n return;\n }\n\n const Jarallax = jarallax.constructor;\n\n // append video after when block will be visible.\n const defOnScroll = Jarallax.prototype.onScroll;\n Jarallax.prototype.onScroll = function () {\n const self = this;\n\n defOnScroll.apply(self);\n\n const isReady =\n !self.isVideoInserted &&\n self.video &&\n (!self.options.videoLazyLoading || self.isElementInViewport) &&\n !self.options.disableVideo();\n\n if (isReady) {\n self.isVideoInserted = true;\n\n self.video.getVideo((video) => {\n const $parent = video.parentNode;\n self.css(video, {\n position: self.image.position,\n top: '0px',\n left: '0px',\n right: '0px',\n bottom: '0px',\n width: '100%',\n height: '100%',\n maxWidth: 'none',\n maxHeight: 'none',\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden',\n margin: 0,\n zIndex: -1,\n });\n self.$video = video;\n\n // add Poster attribute to self-hosted video\n if (self.video.type === 'local') {\n if (self.image.src) {\n self.$video.setAttribute('poster', self.image.src);\n } else if (\n self.image.$item &&\n self.image.$item.tagName === 'IMG' &&\n self.image.$item.src\n ) {\n self.$video.setAttribute('poster', self.image.$item.src);\n }\n }\n\n // add classname to video element\n if (self.options.videoClass) {\n self.$video.setAttribute(\n 'class',\n `${self.options.videoClass} ${self.options.videoClass}-${self.video.type}`\n );\n }\n\n // insert video tag\n self.image.$container.appendChild(video);\n\n // remove parent video element (created by VideoWorker)\n $parent.parentNode.removeChild($parent);\n\n // call onVideoInsert event\n if (self.options.onVideoInsert) {\n self.options.onVideoInsert.call(self);\n }\n });\n }\n };\n\n // cover video\n const defCoverImage = Jarallax.prototype.coverImage;\n Jarallax.prototype.coverImage = function () {\n const self = this;\n const imageData = defCoverImage.apply(self);\n const node = self.image.$item ? self.image.$item.nodeName : false;\n\n if (imageData && self.video && node && (node === 'IFRAME' || node === 'VIDEO')) {\n let h = imageData.image.height;\n let w = (h * self.image.width) / self.image.height;\n let ml = (imageData.container.width - w) / 2;\n let mt = imageData.image.marginTop;\n\n if (imageData.container.width > w) {\n w = imageData.container.width;\n h = (w * self.image.height) / self.image.width;\n ml = 0;\n mt += (imageData.image.height - h) / 2;\n }\n\n // add video height over than need to hide controls\n if (node === 'IFRAME') {\n h += 400;\n mt -= 200;\n }\n\n self.css(self.$video, {\n width: `${w}px`,\n marginLeft: `${ml}px`,\n height: `${h}px`,\n marginTop: `${mt}px`,\n });\n }\n\n return imageData;\n };\n\n // init video\n const defInitImg = Jarallax.prototype.initImg;\n Jarallax.prototype.initImg = function () {\n const self = this;\n const defaultResult = defInitImg.apply(self);\n\n if (!self.options.videoSrc) {\n self.options.videoSrc = self.$item.getAttribute('data-jarallax-video') || null;\n }\n\n if (self.options.videoSrc) {\n self.defaultInitImgResult = defaultResult;\n return true;\n }\n\n return defaultResult;\n };\n\n const defCanInitParallax = Jarallax.prototype.canInitParallax;\n Jarallax.prototype.canInitParallax = function () {\n const self = this;\n let defaultResult = defCanInitParallax.apply(self);\n\n if (!self.options.videoSrc) {\n return defaultResult;\n }\n\n // Init video api\n const video = new VideoWorker(self.options.videoSrc, {\n autoplay: true,\n loop: self.options.videoLoop,\n showControls: false,\n accessibilityHidden: true,\n startTime: self.options.videoStartTime || 0,\n endTime: self.options.videoEndTime || 0,\n mute: !self.options.videoVolume,\n volume: self.options.videoVolume || 0,\n });\n\n // call onVideoWorkerInit event\n if (self.options.onVideoWorkerInit) {\n self.options.onVideoWorkerInit.call(self, video);\n }\n\n function resetDefaultImage() {\n if (self.image.$default_item) {\n self.image.$item = self.image.$default_item;\n self.image.$item.style.display = 'block';\n\n // set image width and height\n self.coverImage();\n self.onScroll();\n }\n }\n\n if (video.isValid()) {\n // Force enable parallax.\n // When the parallax disabled on mobile devices, we still need to display videos.\n // https://github.com/nk-o/jarallax/issues/159\n if (this.options.disableParallax()) {\n defaultResult = true;\n self.image.position = 'absolute';\n self.options.type = 'scroll';\n self.options.speed = 1;\n }\n\n // if parallax will not be inited, we can add thumbnail on background.\n if (!defaultResult) {\n if (!self.defaultInitImgResult) {\n video.getImageURL((url) => {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n\n // set new background\n self.css(self.$item, {\n 'background-image': `url(\"${url}\")`,\n 'background-position': 'center',\n 'background-size': 'cover',\n });\n });\n }\n\n // init video\n } else {\n video.on('ready', () => {\n if (self.options.videoPlayOnlyVisible) {\n const oldOnScroll = self.onScroll;\n self.onScroll = function () {\n oldOnScroll.apply(self);\n if (\n !self.videoError &&\n (self.options.videoLoop || (!self.options.videoLoop && !self.videoEnded))\n ) {\n if (self.isVisible()) {\n video.play();\n } else {\n video.pause();\n }\n }\n };\n } else {\n video.play();\n }\n });\n video.on('started', () => {\n self.image.$default_item = self.image.$item;\n self.image.$item = self.$video;\n\n // set video width and height\n self.image.width = self.video.videoWidth || 1280;\n self.image.height = self.video.videoHeight || 720;\n self.coverImage();\n self.onScroll();\n\n // hide image\n if (self.image.$default_item) {\n self.image.$default_item.style.display = 'none';\n }\n });\n\n video.on('ended', () => {\n self.videoEnded = true;\n\n if (!self.options.videoLoop) {\n // show default image if Loop disabled.\n resetDefaultImage();\n }\n });\n video.on('error', () => {\n self.videoError = true;\n\n // show default image if video loading error.\n resetDefaultImage();\n });\n\n self.video = video;\n\n // set image if not exists\n if (!self.defaultInitImgResult) {\n // set empty image on self-hosted video if not defined\n self.image.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n if (video.type !== 'local') {\n video.getImageURL((url) => {\n self.image.bgImage = `url(\"${url}\")`;\n self.init();\n });\n\n return false;\n }\n }\n }\n }\n\n return defaultResult;\n };\n\n // Destroy video parallax\n const defDestroy = Jarallax.prototype.destroy;\n Jarallax.prototype.destroy = function () {\n const self = this;\n\n if (self.image.$default_item) {\n self.image.$item = self.image.$default_item;\n delete self.image.$default_item;\n }\n\n defDestroy.apply(self);\n };\n}\n\nexport default jarallaxVideo;\n", "import global from '../utils/global';\n\nfunction jarallaxElement(jarallax = global.jarallax) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Jarallax Element extension is DEPRECATED, please, avoid using it. We recommend you look at something like `lax.js` library . It is much more powerful and has a less code (in cases when you don't want to add parallax backgrounds).\"\n );\n\n if (typeof jarallax === 'undefined') {\n return;\n }\n\n const Jarallax = jarallax.constructor;\n\n // redefine default methods\n [\n 'initImg',\n 'canInitParallax',\n 'init',\n 'destroy',\n 'coverImage',\n 'isVisible',\n 'onScroll',\n 'onResize',\n ].forEach((key) => {\n const def = Jarallax.prototype[key];\n Jarallax.prototype[key] = function (...args) {\n const self = this;\n\n if (key === 'initImg' && self.$item.getAttribute('data-jarallax-element') !== null) {\n self.options.type = 'element';\n self.pureOptions.speed = self.$item.getAttribute('data-jarallax-element') || '100';\n }\n if (self.options.type !== 'element') {\n return def.apply(self, args);\n }\n\n self.pureOptions.threshold = self.$item.getAttribute('data-threshold') || '';\n\n switch (key) {\n case 'init': {\n const speedArr = `${self.pureOptions.speed}`.split(' ');\n self.options.speed = self.pureOptions.speed || 0;\n self.options.speedY = speedArr[0] ? parseFloat(speedArr[0]) : 0;\n self.options.speedX = speedArr[1] ? parseFloat(speedArr[1]) : 0;\n\n const thresholdArr = self.pureOptions.threshold.split(' ');\n self.options.thresholdY = thresholdArr[0] ? parseFloat(thresholdArr[0]) : null;\n self.options.thresholdX = thresholdArr[1] ? parseFloat(thresholdArr[1]) : null;\n\n def.apply(self, args);\n\n // restore background image if available.\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n if (originalStylesTag) {\n self.$item.setAttribute('style', originalStylesTag);\n }\n\n return true;\n }\n case 'onResize': {\n const defTransform = self.css(self.$item, 'transform');\n self.css(self.$item, { transform: '' });\n const rect = self.$item.getBoundingClientRect();\n self.itemData = {\n width: rect.width,\n height: rect.height,\n y: rect.top + self.getWindowData().y,\n x: rect.left,\n };\n self.css(self.$item, { transform: defTransform });\n break;\n }\n case 'onScroll': {\n const wnd = self.getWindowData();\n const centerPercent =\n (wnd.y + wnd.height / 2 - self.itemData.y - self.itemData.height / 2) /\n (wnd.height / 2);\n const moveY = centerPercent * self.options.speedY;\n const moveX = centerPercent * self.options.speedX;\n let my = moveY;\n let mx = moveX;\n if (self.options.thresholdY !== null && moveY > self.options.thresholdY) my = 0;\n if (self.options.thresholdX !== null && moveX > self.options.thresholdX) mx = 0;\n self.css(self.$item, { transform: `translate3d(${mx}px,${my}px,0)` });\n break;\n }\n case 'initImg':\n case 'isVisible':\n case 'coverImage':\n return true;\n // no default\n }\n return def.apply(self, args);\n };\n });\n}\n\nexport default jarallaxElement;\n", "import jarallaxLib from './core';\nimport jarallaxVideoExt from './ext-video';\nimport jarallaxElementExt from './deprecated/ext-element';\n\nexport const jarallax = jarallaxLib;\n\nexport const jarallaxVideo = function jarallaxVideo() {\n return jarallaxVideoExt(jarallax);\n};\n\nexport const jarallaxElement = function jarallaxElement() {\n return jarallaxElementExt(jarallax);\n};\n", "import ApplicationController from \"../application_controller.js\";\nimport { jarallax, jarallaxVideo } from \"jarallax\";\n\n\n// TODO handle youtube video backgrounds when user rejects third party cookies.\nexport default class extends ApplicationController {\n static targets = [ \"imageContainer\" ];\n\n static values = {\n videoSrc: { type: String, default: \"\" },\n };\n\n connect() {\n this.log_function(\"connect\");\n\n if(this.videoSrcValue) {\n this.log_function(\"connect\", \"videoSrc\", this.videoSrcValue);\n jarallaxVideo();\n }\n\n this.init_attempts = 0;\n this.max_init_attempts = 5;\n\n this.interval = setInterval(() => {\n\n if(this.init_attempts > this.max_init_attempts){\n clearInterval(this.interval);\n return false;\n }\n\n if (this.image) {\n this.element.classList.add(\"jarallax\");\n this.image.classList.add(\"jarallax-img\");\n jarallax(this.element, this.config);\n clearInterval(this.interval);\n }\n\n this.init_attempts++;\n }, 1000);\n }\n\n handleVideoInsert(){\n this.log_function(\"handleVideoInsert\");\n this.element.classList.add(\"loaded\");\n }\n\n disconnect(){\n this.log_function(\"disconnect\");\n\n if(this.interval) {\n clearInterval(this.interval);\n }\n\n jarallax(this.element, \"destroy\");\n }\n\n get image() {\n if (this.imageContainerTarget) {\n const imageElement = this.imageContainerTarget.querySelector(\"img\");\n return imageElement || null;\n }\n return null;\n }\n\n get config(){\n this.log_function(\"get config\");\n\n //* https://github.com/nk-o/jarallax/blob/master/README.md#options\n return {\n type: \"scroll\",\n speed: 0,\n videoSrc: this.videoSrcValue,\n onVideoInsert: this.handleVideoInsert.bind(this),\n };\n }\n}\n", "/* global Stimulus */\nconsole.log(\"template0/errors.js Loaded\");\n\n//* Stimulus\nimport fit_text from \"../../view_components/fit_text/index.js\";\nStimulus.register(\"fit-text\", fit_text);\n\nimport parallax_divider from \"../../view_components/parallax_divider/index.js\";\nStimulus.register(\"parallax-divider\", parallax_divider);\n"], "mappings": "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", "names": ["require_isArray", "__commonJSMin", "exports", "module", "isArray", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "require_isKey", "__commonJSMin", "exports", "module", "isArray", "isSymbol", "reIsDeepProp", "reIsPlainProp", "isKey", "value", "object", "type", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_isFunction", "__commonJSMin", "exports", "module", "baseGetTag", "isObject", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction", "value", "tag", "require_coreJsData", "__commonJSMin", "exports", "module", "root", "coreJsData", "require_isMasked", "__commonJSMin", "exports", "module", "coreJsData", "maskSrcKey", "uid", "isMasked", "func", "require_toSource", "__commonJSMin", "exports", "module", "funcProto", "funcToString", "toSource", "func", "require_baseIsNative", "__commonJSMin", "exports", "module", "isFunction", "isMasked", "isObject", "toSource", "reRegExpChar", "reIsHostCtor", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "reIsNative", "baseIsNative", "value", "pattern", "require_getValue", "__commonJSMin", "exports", "module", "getValue", "object", "key", "require_getNative", "__commonJSMin", "exports", "module", "baseIsNative", "getValue", "getNative", "object", "key", "value", "require_nativeCreate", "__commonJSMin", "exports", "module", "getNative", "nativeCreate", "require_hashClear", "__commonJSMin", "exports", "module", "nativeCreate", "hashClear", "require_hashDelete", "__commonJSMin", "exports", "module", "hashDelete", "key", "result", "require_hashGet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "objectProto", "hasOwnProperty", "hashGet", "key", "data", "result", "require_hashHas", "__commonJSMin", "exports", "module", "nativeCreate", "objectProto", "hasOwnProperty", "hashHas", "key", "data", "require_hashSet", "__commonJSMin", "exports", "module", "nativeCreate", "HASH_UNDEFINED", "hashSet", "key", "value", "data", "require_Hash", "__commonJSMin", "exports", "module", "hashClear", "hashDelete", "hashGet", "hashHas", "hashSet", "Hash", "entries", "index", "length", "entry", "require_listCacheClear", "__commonJSMin", "exports", "module", "listCacheClear", "require_eq", "__commonJSMin", "exports", "module", "eq", "value", "other", "require_assocIndexOf", "__commonJSMin", "exports", "module", "eq", "assocIndexOf", "array", "key", "length", "require_listCacheDelete", "__commonJSMin", "exports", "module", "assocIndexOf", "arrayProto", "splice", "listCacheDelete", "key", "data", "index", "lastIndex", "require_listCacheGet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheGet", "key", "data", "index", "require_listCacheHas", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheHas", "key", "require_listCacheSet", "__commonJSMin", "exports", "module", "assocIndexOf", "listCacheSet", "key", "value", "data", "index", "require_ListCache", "__commonJSMin", "exports", "module", "listCacheClear", "listCacheDelete", "listCacheGet", "listCacheHas", "listCacheSet", "ListCache", "entries", "index", "length", "entry", "require_Map", "__commonJSMin", "exports", "module", "getNative", "root", "Map", "require_mapCacheClear", "__commonJSMin", "exports", "module", "Hash", "ListCache", "Map", "mapCacheClear", "require_isKeyable", "__commonJSMin", "exports", "module", "isKeyable", "value", "type", "require_getMapData", "__commonJSMin", "exports", "module", "isKeyable", "getMapData", "map", "key", "data", "require_mapCacheDelete", "__commonJSMin", "exports", "module", "getMapData", "mapCacheDelete", "key", "result", "require_mapCacheGet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheGet", "key", "require_mapCacheHas", "__commonJSMin", "exports", "module", "getMapData", "mapCacheHas", "key", "require_mapCacheSet", "__commonJSMin", "exports", "module", "getMapData", "mapCacheSet", "key", "value", "data", "size", "require_MapCache", "__commonJSMin", "exports", "module", "mapCacheClear", "mapCacheDelete", "mapCacheGet", "mapCacheHas", "mapCacheSet", "MapCache", "entries", "index", "length", "entry", "require_memoize", "__commonJSMin", "exports", "module", "MapCache", "FUNC_ERROR_TEXT", "memoize", "func", "resolver", "memoized", "args", "key", "cache", "result", "require_memoizeCapped", "__commonJSMin", "exports", "module", "memoize", "MAX_MEMOIZE_SIZE", "memoizeCapped", "func", "result", "key", "cache", "require_stringToPath", "__commonJSMin", "exports", "module", "memoizeCapped", "rePropName", "reEscapeChar", "stringToPath", "string", "result", "match", "number", "quote", "subString", "require_arrayMap", "__commonJSMin", "exports", "module", "arrayMap", "array", "iteratee", "index", "length", "result", "require_baseToString", "__commonJSMin", "exports", "module", "Symbol", "arrayMap", "isArray", "isSymbol", "INFINITY", "symbolProto", "symbolToString", "baseToString", "value", "result", "require_toString", "__commonJSMin", "exports", "module", "baseToString", "toString", "value", "require_castPath", "__commonJSMin", "exports", "module", "isArray", "isKey", "stringToPath", "toString", "castPath", "value", "object", "require_toKey", "__commonJSMin", "exports", "module", "isSymbol", "INFINITY", "toKey", "value", "result", "require_baseGet", "__commonJSMin", "exports", "module", "castPath", "toKey", "baseGet", "object", "path", "index", "length", "require_get", "__commonJSMin", "exports", "module", "baseGet", "get", "object", "path", "defaultValue", "result", "require_fittext", "__commonJSMin", "exports", "module", "root", "factory", "css", "el", "prop", "addEvent", "type", "fn", "extend", "obj", "ext", "key", "fitText", "kompressor", "options", "settings", "fit", "compressor", "resizer", "i", "camelize", "value", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "isSomething", "object", "hasProperty", "property", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "name", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "key", "extend", "extendWithReflect", "constructor", "extended", "testReflectExtension", "b", "defaultSchema", "identifier", "outlet", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "ClassPropertiesBlessing", "constructor", "readInheritableStaticArrayValues", "properties", "classDefinition", "propertiesForClassDefinition", "key", "classes", "attribute", "capitalize", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "controller", "element", "identifier", "getControllerAndEnsureConnectedScope", "outletName", "outletController", "name", "camelizedName", "namespaceCamelize", "outletElement", "selector", "outlets", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "target", "ValuePropertiesBlessing", "valueDefinitionPairs", "readInheritableStaticObjectPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "attributeName", "propertiesForValueDefinitionPair", "definition", "read", "write", "value", "token", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "defaultValue", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "dasherize", "camelize", "readers", "writers", "array", "object", "writeString", "writeJSON", "Controller", "context", "_identifier", "_application", "eventName", "detail", "prefix", "bubbles", "cancelable", "event", "import_get", "ApplicationController", "Controller", "function_name", "more_info_1", "more_info_2", "lightColorMap", "darkColorMap", "colorMap", "color", "get", "identifier", "error", "import_FitText_UMD", "fit_text_default", "ApplicationController", "fitText", "defaults$1", "type", "speed", "containerClass", "imgSrc", "imgElement", "imgSize", "imgPosition", "imgRepeat", "keepImg", "elementInViewport", "zIndex", "disableParallax", "onScroll", "onInit", "onDestroy", "onCoverImage", "videoClass", "videoSrc", "videoStartTime", "videoEndTime", "videoVolume", "videoLoop", "videoPlayOnlyVisible", "videoLazyLoading", "disableVideo", "onVideoInsert", "onVideoWorkerInit", "win", "window", "global", "self", "global$2", "css", "el", "styles", "getComputedStyle", "getPropertyValue", "Object", "keys", "forEach", "key", "style", "extend", "out", "args", "i", "getParents", "elem", "parents", "parentElement", "nodeType", "push", "ready", "callback", "document", "readyState", "addEventListener", "capture", "once", "passive", "navigator", "mobileAgent", "test", "userAgent", "isMobile", "wndW", "wndH", "$deviceHelper", "getDeviceHeight", "body", "createElement", "cssText", "appendChild", "clientHeight", "innerHeight", "documentElement", "updateWindowHeight", "innerWidth", "clientWidth", "domReady", "getWindowSize", "width", "height", "jarallaxList", "updateParallax", "length", "data", "k", "instance", "oldData", "isVisible", "clientRect", "$item", "getBoundingClientRect", "newData", "top", "bottom", "isResized", "isScrolled", "onResize", "requestAnimationFrame", "visibilityObserver", "IntersectionObserver", "entries", "entry", "target", "jarallax", "isElementInViewport", "isIntersecting", "rootMargin", "addObserver", "observe", "options", "removeObserver", "instanceID", "splice", "unobserve", "Jarallax", "constructor", "item", "userOptions", "defaults", "dataOptions", "dataset", "pureDataOptions", "lowerCaseOption", "substr", "toLowerCase", "pureOptions", "Math", "min", "max", "parseFloat", "RegExp", "disableParallaxRegexp", "disableParallaxDefault", "disableVideoRegexp", "disableVideoDefault", "elementInVP", "Element", "image", "src", "$container", "useImgTag", "position", "initImg", "canInitParallax", "init", "getWindowData", "y", "scrollTop", "$imgElement", "querySelector", "Image", "cloneNode", "$itemParent", "parentNode", "bgImage", "containerStyles", "left", "overflow", "imageStyles", "pointerEvents", "transformStyle", "backfaceVisibility", "curStyle", "getAttribute", "setAttribute", "curImgStyle", "$parents", "filter", "parentTransform", "transform", "call", "destroy", "originalStylesTag", "removeAttribute", "originalStylesImgTag", "removeChild", "coverImage", "rect", "contH", "isScroll", "scrollDist", "resultH", "resultMT", "abs", "parallaxScrollDistance", "marginTop", "container", "force", "contT", "beforeTop", "beforeTopEnd", "afterTop", "beforeBottom", "beforeBottomEnd", "afterBottom", "fromViewportCenter", "visiblePercent", "opacity", "scale", "positionY", "section", "items", "HTMLElement", "nodeName", "len", "ret", "apply", "autoplay", "loop", "mute", "volume", "showControls", "accessibilityHidden", "startTime", "endTime", "jarallaxVideo", "defOnScroll", "prototype", "isVideoInserted", "video", "getVideo", "$parent", "right", "maxWidth", "maxHeight", "margin", "$video", "tagName", "defCoverImage", "imageData", "node", "h", "w", "ml", "mt", "marginLeft", "defInitImg", "defaultResult", "defaultInitImgResult", "defCanInitParallax", "VideoWorker", "resetDefaultImage", "$default_item", "display", "isValid", "getImageURL", "url", "on", "oldOnScroll", "videoError", "videoEnded", "play", "pause", "videoWidth", "videoHeight", "defDestroy", "jarallax", "jarallaxLib", "jarallaxVideo", "jarallaxVideoExt", "parallax_divider_default", "ApplicationController", "jarallaxVideo", "jarallax", "fit_text_default", "parallax_divider_default"] }