@divkitframework/divkit 23.4.0 → 23.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/client-devtool.js +1 -1
- package/dist/browser/client-devtool.js.map +1 -1
- package/dist/browser/client-hydratable.js +1 -1
- package/dist/browser/client-hydratable.js.map +1 -1
- package/dist/browser/client.js +1 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/client-devtool.js +1 -1
- package/dist/client-devtool.js.map +1 -1
- package/dist/client-hydratable.js +1 -1
- package/dist/client-hydratable.js.map +1 -1
- package/dist/client.css +1 -1
- package/dist/client.css.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/esm/client-devtool.mjs +1 -1
- package/dist/esm/client-devtool.mjs.map +1 -1
- package/dist/esm/client-hydratable.mjs +1 -1
- package/dist/esm/client-hydratable.mjs.map +1 -1
- package/dist/esm/client.mjs +1 -1
- package/dist/esm/client.mjs.map +1 -1
- package/dist/esm/server.mjs +1 -1
- package/dist/esm/server.mjs.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","mappings":"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Q,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,EAAQ,ICGfI,GAASJ,GAhCR,CACV,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MACxC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAChD,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChD,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAA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","sources":["webpack://@divkitframework/divkit/webpack/bootstrap","webpack://@divkitframework/divkit/webpack/runtime/define property getters","webpack://@divkitframework/divkit/webpack/runtime/hasOwnProperty shorthand","webpack://@divkitframework/divkit/./node_modules/svelte/internal/index.mjs","webpack://@divkitframework/divkit/./node_modules/svelte/store/index.mjs","webpack://@divkitframework/divkit/./src/components/Root.module.css","webpack://@divkitframework/divkit/./src/context/root.ts","webpack://@divkitframework/divkit/./src/utils/wrapError.ts","webpack://@divkitframework/divkit/./src/components/text/Text.module.css","webpack://@divkitframework/divkit/./src/components/utilities/Outer.module.css","webpack://@divkitframework/divkit/./src/utils/makeStyle.ts","webpack://@divkitframework/divkit/./src/utils/pxToEm.ts","webpack://@divkitframework/divkit/./src/utils/padLeft.ts","webpack://@divkitframework/divkit/./src/utils/correctColor.ts","webpack://@divkitframework/divkit/./src/utils/htmlFilter.ts","webpack://@divkitframework/divkit/./src/utils/truthy.ts","webpack://@divkitframework/divkit/./src/utils/background.ts","webpack://@divkitframework/divkit/./src/utils/url.ts","webpack://@divkitframework/divkit/./src/utils/genClassName.ts","webpack://@divkitframework/divkit/./src/use/devtool.ts","webpack://@divkitframework/divkit/./src/context/state.ts","webpack://@divkitframework/divkit/./src/utils/edgeInsertsToCss.ts","webpack://@divkitframework/divkit/./src/utils/isNumber.ts","webpack://@divkitframework/divkit/./src/utils/isNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInserts.ts","webpack://@divkitframework/divkit/./src/utils/correctNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/isDeepEqual.ts","webpack://@divkitframework/divkit/./src/utils/assignIfDifferent.ts","webpack://@divkitframework/divkit/./src/utils/correctCSSInterpolator.ts","webpack://@divkitframework/divkit/./src/utils/correctNumber.ts","webpack://@divkitframework/divkit/./src/utils/flattenAnimation.ts","webpack://@divkitframework/divkit/./src/utils/borderRadius.ts","webpack://@divkitframework/divkit/./src/utils/doNothing.ts","webpack://@divkitframework/divkit/./src/context/action.ts","webpack://@divkitframework/divkit/./src/utils/getTouchCoords.ts","webpack://@divkitframework/divkit/./src/components/utilities/Actionable.svelte","webpack://@divkitframework/divkit/./src/utils/isPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/filters.ts","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.module.css","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.svelte","webpack://@divkitframework/divkit/./src/components/utilities/Outer.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadiusObject.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInsertsObject.ts","webpack://@divkitframework/divkit/./src/utils/sumEdgeInsets.ts","webpack://@divkitframework/divkit/./src/utils/correctAlpha.ts","webpack://@divkitframework/divkit/./src/utils/correctVisibility.ts","webpack://@divkitframework/divkit/./src/use/visibilityAction.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.module.css","webpack://@divkitframework/divkit/./src/utils/correctPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/fontWeightToCss.ts","webpack://@divkitframework/divkit/./src/utils/correctFontWeight.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/utils/correctAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctTintMode.ts","webpack://@divkitframework/divkit/./src/components/text/Text.svelte","webpack://@divkitframework/divkit/./src/utils/propToString.ts","webpack://@divkitframework/divkit/./src/utils/correctBooleanInt.ts","webpack://@divkitframework/divkit/./src/components/container/Container.module.css","webpack://@divkitframework/divkit/./src/utils/correctDrawableStyles.ts","webpack://@divkitframework/divkit/./src/utils/container.ts","webpack://@divkitframework/divkit/./src/utils/hasGapSupport.ts","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparators.svelte","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparator.module.css","webpack://@divkitframework/divkit/./src/utils/simpleThrottle.ts","webpack://@divkitframework/divkit/./src/utils/getMarginBox.ts","webpack://@divkitframework/divkit/./src/components/container/Container.svelte","webpack://@divkitframework/divkit/./src/utils/correctContainerOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.module.css","webpack://@divkitframework/divkit/./src/utils/correctGeneralOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.svelte","webpack://@divkitframework/divkit/./src/components/image/Image.module.css","webpack://@divkitframework/divkit/./src/components/image/Image.svelte","webpack://@divkitframework/divkit/./src/utils/correctImagePosition.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.module.css","webpack://@divkitframework/divkit/./src/utils/gridCalcTemplates.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.svelte","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.module.css","webpack://@divkitframework/divkit/./src/utils/joinTemplateSizes.ts","webpack://@divkitframework/divkit/./src/utils/debounce.ts","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignment.ts","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.module.css","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadius.ts","webpack://@divkitframework/divkit/./src/utils/keyboard/codes.ts","webpack://@divkitframework/divkit/./node_modules/svelte/easing/index.mjs","webpack://@divkitframework/divkit/./src/utils/easings/interpolateEasing.ts","webpack://@divkitframework/divkit/./src/utils/easings/ease.ts","webpack://@divkitframework/divkit/./src/utils/easings/spring.ts","webpack://@divkitframework/divkit/./src/utils/inOutTransition.ts","webpack://@divkitframework/divkit/./src/utils/lerp.ts","webpack://@divkitframework/divkit/./src/utils/changeBoundsTransition.ts","webpack://@divkitframework/divkit/./src/utils/flattenTransition.ts","webpack://@divkitframework/divkit/./src/components/state/State.module.css","webpack://@divkitframework/divkit/./src/components/state/State.svelte","webpack://@divkitframework/divkit/./src/components/pager/Pager.module.css","webpack://@divkitframework/divkit/./src/components/pager/Pager.svelte","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.module.css","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.svelte","webpack://@divkitframework/divkit/./src/components/slider/Slider.module.css","webpack://@divkitframework/divkit/./src/utils/correctSliderTextStyle.ts","webpack://@divkitframework/divkit/./src/utils/clamp.ts","webpack://@divkitframework/divkit/./src/expressions/const.ts","webpack://@divkitframework/divkit/./src/expressions/variable.ts","webpack://@divkitframework/divkit/./src/components/slider/Slider.svelte","webpack://@divkitframework/divkit/./src/components/input/Input.module.css","webpack://@divkitframework/divkit/./src/components/input/Input.svelte","webpack://@divkitframework/divkit/./src/components/typeMap.ts","webpack://@divkitframework/divkit/./src/components/utilities/Unknown.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.module.css","webpack://@divkitframework/divkit/./src/utils/applyTemplate.ts","webpack://@divkitframework/divkit/./src/utils/constStore.ts","webpack://@divkitframework/divkit/./src/expressions/expressions.js","webpack://@divkitframework/divkit/./src/expressions/funcs/funcs.ts","webpack://@divkitframework/divkit/./src/expressions/walk.ts","webpack://@divkitframework/divkit/./src/expressions/utils.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/std.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/strings.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/math.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/colors.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/interval.ts","webpack://@divkitframework/divkit/./src/expressions/eval.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/datetime.ts","webpack://@divkitframework/divkit/./src/utils/escapeRegExp.ts","webpack://@divkitframework/divkit/./src/expressions/json.ts","webpack://@divkitframework/divkit/./src/utils/uniq.ts","webpack://@divkitframework/divkit/./src/stores/index.ts","webpack://@divkitframework/divkit/./src/stores/pagers.ts","webpack://@divkitframework/divkit/./src/expressions/globalVariablesController.ts","webpack://@divkitframework/divkit/./src/utils/timers.ts","webpack://@divkitframework/divkit/./src/components/Root.svelte","webpack://@divkitframework/divkit/./src/utils/simpleCheckInput.ts","webpack://@divkitframework/divkit/./src/client.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n else\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { stylesheet } = info;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n info.rules = {};\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&' : (ch === '\"' ? '"' : '<'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${style_object[key]};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.49.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n throw new Error(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"divkit-b023c\",\"root__clickable\":\"divkit-bd259\",\"root__clickable-no-transition\":\"divkit-d9099\",\"root__unselectable\":\"divkit-c016b\",\"root_platform_desktop\":\"divkit-ee112\",\"root__only-desktop\":\"divkit-fef1e\",\"root_restrict-scroll\":\"divkit-aa145\",\"root_disabled-context-menu\":\"divkit-f0cba\"};","import type { Readable, Writable } from 'svelte/types/runtime/store';\nimport type { WrappedError } from '../utils/wrapError';\nimport type { Action, DivBase, TemplateContext } from '../../typings/common';\nimport type { VisibilityAction } from '../types/visibilityAction';\nimport type { DivBaseData } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable, VariableType } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface RootCtxValue {\n logError(error: WrappedError): void;\n logStat(type: string, action: MaybeMissing<Action | VisibilityAction>): void;\n hasTemplate(templateName: string): boolean;\n processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n };\n genId(key: string): string;\n genClass(key: string): string;\n execAction(action: MaybeMissing<Action | VisibilityAction>): void;\n execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void>;\n execCustomAction(action: (Action | VisibilityAction) & { url: string }): void;\n isRunning(type: Running): boolean;\n setRunning(type: Running, val: boolean): void;\n registerInstance<T>(id: string, block: T): void;\n unregisterInstance(id: string): void;\n addSvgFilter(color: string, mode: TintMode): string;\n removeSvgFilter(color: string | undefined, mode: TintMode): void;\n getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>>;\n getJsonWithVars<T>(jsonProp: T): MaybeMissing<T>;\n getStore<T>(id: string): Writable<T>;\n getVariable(varName: string, type: VariableType): Variable | undefined;\n getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n getBuiltinProtocols(): Set<string>;\n isDesktop: Readable<boolean>;\n\n // Devtool\n registerComponent?({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void;\n unregisterComponent?({\n node\n }: {\n node: HTMLElement;\n }): void;\n}\n","export interface WrappedError extends Error {\n level: 'error' | 'warn';\n additional?: Record<string, unknown>;\n}\n\nexport type LogError = (error: WrappedError) => void;\n\nexport function wrapError(error: Error, params: {\n level?: 'error' | 'warn';\n additional?: Record<string, unknown>;\n} = {}): WrappedError {\n const wrapped = error as WrappedError;\n\n wrapped.level = params.level || 'error';\n\n if (params.additional) {\n wrapped.additional = params.additional;\n }\n\n return wrapped;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"divkit-d9b0e\",\"text_halign_left\":\"divkit-a4cb7\",\"text_halign_center\":\"divkit-e1659\",\"text_halign_right\":\"divkit-ea280\",\"text_valign_top\":\"divkit-d8ce0\",\"text_valign_center\":\"divkit-ef58e\",\"text_valign_bottom\":\"divkit-fe8ed\",\"text_valign_baseline\":\"divkit-e0c6c\",\"text__inner\":\"divkit-b8528\",\"text_singleline\":\"divkit-ef11c\",\"text_truncate_none\":\"divkit-c6ea1\",\"text_multiline\":\"divkit-ee8e3\",\"text__inner_gradient\":\"divkit-cb8e0\",\"text__image\":\"divkit-bf6e2\",\"text__image_hidden\":\"divkit-f1002\"};","// extracted by mini-css-extract-plugin\nexport default {\"outer\":\"divkit-d65a7\",\"outer_hide-on-transition-in\":\"divkit-a6d12\",\"outer_halign-self_start\":\"divkit-cc452\",\"outer_halign-self_center\":\"divkit-b8331\",\"outer_halign-self_end\":\"divkit-c573c\",\"outer_halign-self_stretch\":\"divkit-dcc74\",\"outer_valign-self_start\":\"divkit-e8077\",\"outer_valign-self_center\":\"divkit-d40a7\",\"outer_valign-self_end\":\"divkit-e9f84\",\"outer_valign-self_stretch\":\"divkit-b7aa3\",\"outer_parent-flex_vertical\":\"divkit-c143f\",\"outer_parent-flex_horizontal\":\"divkit-ef302\",\"outer_valign-self_baseline\":\"divkit-e72b5\",\"outer_width_content\":\"divkit-b8f4d\",\"outer_height_content\":\"divkit-faa66\",\"outer_width-constrained\":\"divkit-d3211\",\"outer_parent-grid\":\"divkit-ff439\",\"outer_height-constrained\":\"divkit-a5256\",\"outer_parent-overlap\":\"divkit-dab2d\",\"outer_parent-overlap-absolute\":\"divkit-d43fb\",\"outer_scroll-snap_center\":\"divkit-d9e38\",\"outer_scroll-snap_start\":\"divkit-efd1e\",\"outer__border\":\"divkit-d4056\",\"outer_visibility_invisible\":\"divkit-f018b\",\"outer_visibility_gone\":\"divkit-e784b\",\"outer_has-action-animation\":\"divkit-f4980\"};","/**\n * Merges rules from object into css string\n * @param styles\n * @returns\n */\nexport function makeStyle(styles?: Record<string, string | number | undefined>): string | undefined {\n if (!styles) {\n return undefined;\n }\n\n let res = '';\n for (const key in styles) {\n if (styles.hasOwnProperty(key)) {\n if (!styles[key] && styles[key] !== 0) {\n continue;\n }\n if (res) {\n res += ';';\n }\n res += key + ':' + String(styles[key]);\n }\n }\n return res || undefined;\n}\n","/**\n * Converts px to em with rounding\n * @param value\n * @returns\n */\nexport function pxToEm(value: number): string {\n if (typeof value !== 'number' && typeof value !== 'string' || !value) {\n return '0';\n }\n\n const casted = Number(value);\n\n if (isNaN(casted)) {\n return '0';\n }\n\n return (Math.ceil(casted * 1000) / 10000) + 'em';\n}\n\nexport function pxToEmWithUnits(value: number): string {\n let res = pxToEm(value);\n\n if (res === '0') {\n res += 'em';\n }\n\n return res;\n}\n","export function padLeft(val: string, count: number): string {\n while (val.length < count) {\n val = '0' + val;\n }\n return val;\n}\n","import { padLeft } from './padLeft';\n\n/**\n * Converts color from app format (ARGB) to css format (RGBA)\n * @param color Color with format #RGB, #ARGB, #RRGGBB, #AARRGGBB\n * @param alpha Color additional opacity\n * @param defaultColor Default color value, used if input color is incorrect\n * @returns Color with opacity if it has correct format, or defaultColor elsewhere\n */\nexport function correctColor(color: string | undefined, alpha = 1, defaultColor = 'transparent'): string {\n color = (color || '').toLowerCase();\n\n if (color.charAt(0) !== '#') {\n return defaultColor;\n }\n\n const parsedColor = parseColor(color);\n if (parsedColor) {\n parsedColor.a *= alpha;\n return stringifyColorToCss(parsedColor);\n }\n\n return defaultColor;\n}\n\nexport interface ParsedColor {\n a: number;\n r: number;\n g: number;\n b: number;\n}\n\nfunction stringifyColorToCss(color: ParsedColor): string {\n if (color.a === 255) {\n return `#${[color.r, color.g, color.b].map(it => {\n return padLeft(Math.round(it).toString(16), 2);\n }).join('')}`;\n }\n\n return `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(2)})`;\n}\n\nexport function parseColor(color: string): ParsedColor | null {\n const colorMatch = (\n // #AARRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #ARGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])$/i) ||\n // #RRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #RGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)\n );\n\n if (colorMatch) {\n // with alpha part in color\n if (colorMatch.length === 5) {\n const [_, a, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n const alphaPart = a.length === 2 ? a : a + a;\n\n return {\n a: parseInt(alphaPart, 16),\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n const [_, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n\n return {\n a: 255,\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n return null;\n}\n","/**\n * Escapes html\n * @param str\n * @returns\n */\nexport function htmlFilter(str: string): string {\n let str2 = String(str);\n\n if (str2.indexOf('&') > -1) {\n str2 = str2.replace(/&/g, '&');\n }\n if (str2.indexOf('<') > -1) {\n str2 = str2.replace(/</g, '<');\n }\n if (str2.indexOf('>') > -1) {\n str2 = str2.replace(/>/g, '>');\n }\n if (str2.indexOf('\"') > -1) {\n str2 = str2.replace(/\"/g, '"');\n }\n\n return str2;\n}\n","export const Truthy = Boolean as unknown as <T>(x: T | null | 0 | '' | false | undefined) => x is T;\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport type {\n Background,\n GradientBackground,\n ImageBackground,\n SolidBackground,\n RadialBackground,\n RadialGradientCenter\n} from '../types/background';\nimport type { ImageScale } from '../types/imageScale';\nimport type { MaybeMissing } from '../expressions/json';\nimport { correctColor } from './correctColor';\nimport { htmlFilter } from './htmlFilter';\nimport { Truthy } from './truthy';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getBackground(bgs: MaybeMissing<Background>[]): {\n color?: string;\n image?: string;\n size?: string;\n position?: string;\n} {\n if (bgs.length === 1 && bgs[0].type === 'solid') {\n return solidUnique({\n bg: bgs[0]\n });\n }\n\n const res = bgs\n .map(bg => {\n if (bg.type === 'solid') {\n return solid({\n bg\n });\n } else if (bg.type === 'gradient') {\n return gradient({\n bg\n });\n } else if (bg.type === 'image') {\n return image({\n bg\n });\n } else if (bg.type === 'radial_gradient') {\n return radial({\n bg\n });\n }\n })\n .filter(Truthy)\n .reverse()\n .reduce(function(acc, item) {\n acc.image.push(item.image);\n acc.size.push(item.size || 'auto');\n acc.position.push(item.pos || '50% 50%');\n\n return acc;\n }, {\n image: [] as string[],\n size: [] as string[],\n position: [] as string[]\n });\n\n return {\n image: res.image.join(','),\n size: res.size.join(','),\n position: res.position.join(',')\n };\n}\n\nfunction solid(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n size: undefined,\n pos: undefined,\n image: `linear-gradient(to bottom,${color},${color})`\n };\n}\n\nfunction solidUnique(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n color: string;\n size: string;\n position: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n color,\n size: 'auto',\n position: '50% 50%'\n };\n}\n\nfunction gradient(opts: {\n bg: MaybeMissing<GradientBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'linear-gradient(' +\n (90 - Number(opts.bg.angle || 0) + 'deg') +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nconst RELATIVE_SIZE_MAP = {\n nearest_corner: 'closest-corner',\n farthest_corner: 'farthest-corner',\n nearest_side: 'closest-side',\n farthest_side: 'farthest-side'\n};\n\nfunction radialCenterToCss(center: MaybeMissing<RadialGradientCenter> | undefined): string {\n if (center && typeof center === 'object' && 'type' in center && center.value !== undefined) {\n if (center.type === 'fixed') {\n return pxToEmWithUnits(center.value);\n } else if (center.type === 'relative') {\n return `${Number(center.value) * 100}%`;\n }\n }\n\n return '50%';\n}\n\nfunction radial(opts: {\n bg: MaybeMissing<RadialBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n const sizeVal = opts.bg.radius;\n let size;\n if (sizeVal && typeof sizeVal === 'object' && 'type' in sizeVal && sizeVal.value !== undefined) {\n if (sizeVal.type === 'fixed') {\n size = pxToEmWithUnits(sizeVal.value);\n } else if (sizeVal.type === 'relative') {\n size = RELATIVE_SIZE_MAP[sizeVal.value];\n }\n }\n\n const centerX = radialCenterToCss(opts.bg.center_x);\n const centerY = radialCenterToCss(opts.bg.center_y);\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'radial-gradient(' +\n `circle ${size || 'farthest-corner'} at ${centerX} ${centerY}` +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nfunction image(opts: {\n bg: MaybeMissing<ImageBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n const image = opts.bg?.image_url;\n\n if (!image) {\n return;\n }\n\n return {\n size: imageSize(opts.bg.scale),\n pos: imagePos(opts.bg),\n image: 'url(\"' + htmlFilter(image) + '\")'\n };\n}\n\nexport function imageSize(scale?: ImageScale): string | undefined {\n if (scale === 'fill' || !scale) {\n return 'cover';\n } else if (scale === 'fit') {\n return 'contain';\n }\n}\n\nexport function imagePos(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}): string {\n let hpos: string;\n let vpos: string;\n\n if (obj.content_alignment_horizontal === 'left') {\n hpos = '0%';\n } else if (obj.content_alignment_horizontal === 'right') {\n hpos = '100%';\n } else {\n hpos = '50%';\n }\n\n if (obj.content_alignment_vertical === 'top') {\n vpos = '0%';\n } else if (obj.content_alignment_vertical === 'bottom') {\n vpos = '100%';\n } else {\n vpos = '50%';\n }\n\n return hpos + ' ' + vpos;\n}\n","export function getUrlSchema(url: string): string {\n const match = /^([^/]+):\\/\\//.exec(url);\n\n return match && match[1] || '';\n}\n\nexport function isBuiltinSchema(schema: string, builtinSchemas: Set<string>): boolean {\n return builtinSchemas.has(schema);\n}\n","import type { Mods } from '../types/general';\n\nfunction push(list: string[], val: string | undefined): void {\n if (val) {\n list.push(val);\n }\n}\n\nexport function genClassName(\n component: string,\n css: Record<string, string>,\n mods: Mods\n): string {\n const res: string[] = [];\n\n push(res, css[component]);\n\n for (const key in mods) {\n if (mods.hasOwnProperty(key)) {\n const val = mods[key];\n if (val) {\n const cssKey = `${component}_${key}` + (typeof val === 'string' ? `_${val}` : '');\n\n push(res, css[cssKey]);\n }\n }\n }\n\n return res.join(' ');\n}\n","import type { RootCtxValue } from '../context/root';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport interface DevtoolResult {\n destroy(): void;\n}\n\nfunction devtoolReal(node: HTMLElement, {\n json,\n origJson,\n templateContext,\n rootCtx\n}: {\n json: Partial<DivBaseData>;\n origJson?: DivBase | undefined;\n templateContext: TemplateContext;\n rootCtx: RootCtxValue;\n}): DevtoolResult {\n rootCtx.registerComponent?.({\n node,\n json,\n origJson,\n templateContext\n });\n\n return {\n destroy() {\n rootCtx.unregisterComponent?.({ node });\n }\n };\n}\n\nexport const devtool = process.env.DEVTOOL ? devtoolReal : undefined;\n","import type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TemplateContext } from '../../typings/common';\nimport type { TransitionChange } from '../types/base';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n getChild(id: string): StateInterface | undefined;\n setState(stateId: string): void;\n}\n\nexport interface StateCtxValue {\n registerInstance(id: string, block: StateInterface): void;\n\n unregisterInstance(id: string): void;\n\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ): Promise<void>;\n\n hasTransitionChange(id?: string): boolean;\n\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ): Promise<void>;\n\n registerChild(id: string): void;\n unregisterChild(id: string): void;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(edgeInsets: EdgeInsets): string {\n return pxToEm(edgeInsets.top || 0) +\n ' ' +\n pxToEm(edgeInsets.right || 0) +\n ' ' +\n pxToEm(edgeInsets.bottom || 0) +\n ' ' +\n pxToEm(edgeInsets.left || 0);\n}\n","export function isNumber(val: number | undefined): val is number {\n if (typeof val !== 'number' && typeof val !== 'string') {\n return false;\n }\n\n const num = Number(val);\n\n return !isNaN(num);\n}\n","import { isNumber } from './isNumber';\n\nexport function isNonNegativeNumber(val: number | undefined): val is number {\n return isNumber(val) && val >= 0;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(edgeInsets: EdgeInsets | undefined, defaultVal: string): string {\n if (!edgeInsets) {\n return defaultVal;\n }\n\n const list = [\n edgeInsets.top,\n edgeInsets.right,\n edgeInsets.bottom,\n edgeInsets.left\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return edgeInsertsToCss(edgeInsets);\n}\n","export function correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num < 0) {\n return defaultVal;\n }\n return num;\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isDeepEqual<A, B>(a: A, b: B): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return Object.is(a, b);\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i];\n\n if (!hasOwnProperty.call(b, key) || !isDeepEqual(a[key as keyof A], b[key as keyof B])) {\n return false;\n }\n }\n\n return true;\n}\n","import { isDeepEqual } from './isDeepEqual';\n\nexport function assignIfDifferent<A, B>(newVal: A, defaultVal: B): A | B {\n if (isDeepEqual(newVal, defaultVal)) {\n return defaultVal;\n }\n return newVal;\n}\n","import type { Interpolation } from '../types/base';\n\nexport function correctCSSInterpolator(\n interpolator: string | undefined,\n defaultVal: Interpolation\n): Interpolation {\n if (\n interpolator === 'linear' ||\n interpolator === 'ease' ||\n interpolator === 'ease_in_out' ||\n interpolator === 'ease_in' ||\n interpolator === 'ease_out'\n ) {\n return interpolator;\n }\n\n return defaultVal;\n}\n","export function correctNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num)) {\n return defaultVal;\n }\n return num;\n}\n","import { ActionAnimation, AnyAnimation } from '../types/actionable';\n\nexport function flattenAnimation(animation: ActionAnimation): AnyAnimation[] {\n const res: AnyAnimation[] = [];\n\n if (animation.name === 'set') {\n (animation.items || []).forEach(item => {\n res.push(...flattenAnimation(item));\n });\n } else {\n res.push(animation);\n }\n\n return res;\n}\n","import type { CornersRadius } from '../types/border';\nimport { pxToEm } from './pxToEm';\n\nexport function borderRadius(cornersRadius: CornersRadius, defaultRadius = 0, fontSize = 10): string {\n return [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ]\n .map(it => pxToEm((it || defaultRadius) / fontSize * 10))\n .join(' ');\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function doNothing(): void {}\n","export const ACTION_CTX = Symbol('action');\n\nexport interface ActionCtxValue {\n hasAction(): boolean;\n}\n","export interface Coords {\n x: number;\n y: number\n}\n\nexport function getTouchCoords(event: TouchEvent): Coords {\n const firstEvent = event.touches[0];\n const x = firstEvent.clientX || firstEvent.pageX;\n const y = firstEvent.clientY || firstEvent.pageY;\n\n return { x, y };\n}\n","<script lang=\"ts\">\n import { getContext, setContext } from 'svelte';\n\n import rootCss from '../Root.module.css';\n\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { doNothing } from '../../utils/doNothing';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { wrapError } from '../../utils/wrapError';\n import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n export let doubleTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let longTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let cls = '';\n export let style: string | null = null;\n export let attrs: Record<string, string | undefined> | undefined = undefined;\n export let use: ((element: HTMLElement, opts?: any) => void) = doNothing;\n export let customAction: ((event: Event) => boolean) | null = null;\n export let isNativeActionAnimation = true;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return Boolean(actionCtx.hasAction() || actions?.length);\n }\n });\n\n const MIN_SWIPE_PX = 8;\n const MIN_LONG_TAP_DURATION = 400;\n\n let href = '';\n let target: string | undefined = undefined;\n let startTs = -1;\n let startCoords: Coords | null = null;\n let isChanged = false;\n\n if (Array.isArray(actions) && actions?.length) {\n for (let i = 0; i < actions.length; ++i) {\n const url = actions[i].url;\n\n if (url) {\n href = url;\n target = actions[i].target || undefined;\n break;\n }\n }\n }\n\n if (Array.isArray(actions) && actions?.length && actionCtx.hasAction()) {\n href = '';\n rootCtx.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n\n let hasJSAction = Boolean(customAction);\n if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n href = '';\n hasJSAction = true;\n }\n\n async function onClick(event: MouseEvent): Promise<void> {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n const cancelled = customAction?.(event) === false;\n\n if (cancelled) {\n event.preventDefault();\n } else if (actions) {\n const hasCustomAction = actions.some(action => {\n const url = action?.url;\n if (!url) {\n return false;\n }\n\n const schema = getUrlSchema(url);\n\n return schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols());\n });\n if (hasCustomAction) {\n event.preventDefault();\n }\n rootCtx.execAnyActions(actions);\n }\n }\n\n function onDoubleClick(event: MouseEvent): void {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n rootCtx.execAnyActions(doubleTapActions, true);\n }\n\n function onTouchStart(event: TouchEvent): void {\n if (event.touches.length > 1) {\n return;\n }\n\n startCoords = getTouchCoords(event);\n isChanged = false;\n startTs = Date.now();\n }\n\n function onTouchMove(event: TouchEvent): void {\n if (!startCoords) {\n return;\n }\n\n const coords = getTouchCoords(event);\n\n if (Math.abs(startCoords.x - coords.x) > MIN_SWIPE_PX || Math.abs(startCoords.y - coords.y) > MIN_SWIPE_PX) {\n isChanged = true;\n }\n }\n\n function onTouchEnd(): void {\n if (!startCoords || startTs < 0) {\n return;\n }\n\n if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n rootCtx.execAnyActions(longTapActions, true);\n }\n\n startCoords = null;\n startTs = -1;\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n return;\n }\n\n if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n rootCtx.execAnyActions(actions);\n event.preventDefault();\n }\n }\n</script>\n\n{#if href}\n <a\n use:use\n {href}\n {target}\n {style}\n class=\"{cls} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n on:click={onClick}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n {...attrs}\n >\n <slot />\n </a>\n{:else}\n <span\n use:use\n class=\"{cls}{hasJSAction ? ` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` : ''} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n {style}\n role={hasJSAction ? 'button' : null}\n tabindex={hasJSAction ? 0 : null}\n on:click={hasJSAction ? onClick : null}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n {...attrs}\n >\n <slot />\n </span>\n{/if}\n","import { isNumber } from './isNumber';\n\nexport function isPositiveNumber(val: number | undefined): val is number {\n return isNumber(val) && val > 0;\n}\n","import type { Filter } from '../types/filter';\nimport type { MaybeMissing } from '../expressions/json';\nimport { LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(filters: MaybeMissing<Filter>[], logError: LogError): string {\n return filters.map(filter => {\n if (filter?.type === 'blur') {\n if (isPositiveNumber(filter.radius)) {\n return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n }\n } else {\n logError(wrapError(new Error('Unknown filter'), {\n level: 'warn',\n additional: {\n filter: filter?.type\n }\n }));\n }\n }).filter(Boolean).join(' ');\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"outer-background\":\"divkit-bf253\",\"outer-background_clip\":\"divkit-dcad7\",\"outer-background__item\":\"divkit-b921d\",\"outer-background__item_hidden\":\"divkit-cd613\"};","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './OuterBackground.module.css';\n\n import type { Style } from '../../types/general';\n import type { Background } from '../../types/background';\n import type { MaybeMissing } from '../../expressions/json';\n import { getBackground } from '../../utils/background';\n import { makeStyle } from '../../utils/makeStyle';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { getCssFilter } from '../../utils/filters';\n\n export let background: MaybeMissing<Background[]> = [];\n export let radius = '';\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: styles = background.map(bg => {\n const stl: Style = {};\n const obj: {\n image_url?: string;\n style: Style;\n } = {\n style: stl\n };\n\n if (bg.type === 'nine_patch_image' && bg.insets) {\n stl['border-image'] = `url(\"${bg.image_url}\") ${bg.insets.top || 0} ${bg.insets.right || 0} ${bg.insets.bottom || 0} ${bg.insets.left || 0} fill`;\n stl['border-image-width'] = 'auto';\n } else {\n const res = getBackground([bg]);\n\n if (bg.type === 'solid') {\n stl['background-color'] = res.color;\n }\n if (bg.type === 'gradient') {\n stl['background-image'] = res.image;\n }\n if (bg.type === 'image') {\n stl.opacity = Number(bg.alpha);\n obj.image_url = bg.image_url;\n stl['object-fit'] = res.size;\n stl['object-position'] = res.position;\n\n if (Array.isArray(bg.filters) && bg.filters.length) {\n stl.filter = getCssFilter(bg.filters, rootCtx.logError);\n }\n }\n }\n\n return obj;\n });\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css['outer-background__item_hidden']);\n }\n }\n</script>\n\n<span\n class={css['outer-background'] + (radius ? ' ' + css['outer-background_clip'] : '')}\n style:border-radius={radius}\n>\n {#each styles as item}\n {#if item.image_url}\n <img\n src={item.image_url}\n alt=\"\"\n aria-hidden=\"true\"\n loading=\"lazy\"\n decoding=\"async\"\n class={css['outer-background__item']}\n style={makeStyle(item.style)}\n on:error={onImgError}\n >{:else}<span class={css['outer-background__item']} style={makeStyle(item.style)}></span>\n {/if}\n {/each}\n</span>\n","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import css from './Outer.module.css';\n\n import type { DivBaseData } from '../../types/base';\n import type { Mods, Style } from '../../types/general';\n import type { ActionAnimation, AnyAnimation, DivActionableData } from '../../types/actionable';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Visibility } from '../../types/base';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { CornersRadius } from '../../types/border';\n import type { WrapContentSize } from '../../types/sizes';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { visibilityAction } from '../../use/visibilityAction';\n import { genClassName } from '../../utils/genClassName';\n import { devtool, DevtoolResult } from '../../use/devtool';\n import { STATE_CTX, StateCtxValue } from '../../context/state';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctAlpha } from '../../utils/correctAlpha';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctColor } from '../../utils/correctColor';\n import { correctVisibility } from '../../utils/correctVisibility';\n import { wrapError } from '../../utils/wrapError';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNumber } from '../../utils/correctNumber';\n import { flattenAnimation } from '../../utils/flattenAnimation';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { sumEdgeInsets } from '../../utils/sumEdgeInsets';\n import { correctBorderRadiusObject } from '../../utils/correctBorderRadiusObject';\n import { borderRadius } from '../../utils/borderRadius';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import Actionable from './Actionable.svelte';\n import OuterBackground from './OuterBackground.svelte';\n\n export let json: Partial<DivBaseData & DivActionableData> = {};\n export let origJson: DivBase | undefined = undefined;\n export let templateContext: TemplateContext;\n export let cls = '';\n export let style: Style | undefined = undefined;\n export let layoutParams: LayoutParams = {};\n export let customDescription = false;\n export let customPaddings = false;\n export let customActions = '';\n export let additionalPaddings: EdgeInsets | null = null;\n\n const HORIZONTAL_ALIGN_TO_GENERAL = {\n left: 'start',\n center: 'center',\n right: 'end'\n };\n\n const VERTICAL_ALIGN_TO_GENERAL = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n };\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n\n let currentNode: HTMLElement;\n let attrs: Record<string, string> | undefined;\n\n $: jsonBorder = rootCtx.getDerivedFromVars(json.border);\n let borderStyle: Style = {};\n let borderElemStyle: Style = {};\n let hasBorder = false;\n let strokeWidth = 1;\n let strokeColor = 'transparent';\n let cornerRadius = 0;\n let cornersRadius: CornersRadius = {\n 'top-left': 0,\n 'top-right': 0,\n 'bottom-right': 0,\n 'bottom-left': 0\n };\n let backgroundRadius = '';\n $: {\n let newBorderStyle: Style = {};\n let newBorderElemStyle: Style = {};\n let newHasBorder = false;\n let newBackgroundRadius = '';\n\n if ($jsonBorder) {\n if ($jsonBorder.has_shadow) {\n const shadow = $jsonBorder.shadow;\n if (shadow) {\n newBorderStyle['box-shadow'] =\n pxToEm(shadow.offset?.x?.value || 0) + ' ' +\n pxToEm(shadow.offset?.y?.value || 0) + ' ' +\n pxToEm(shadow.blur ?? 2) + ' ' +\n correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19);\n } else {\n newBorderStyle['box-shadow'] = '0 1px 2px 0 rgba(0,0,0,.18), 0 0 0 1px rgba(0,0,0,.07)';\n }\n }\n if ($jsonBorder.stroke) {\n newHasBorder = true;\n strokeWidth = correctNonNegativeNumber($jsonBorder.stroke.width, strokeWidth);\n strokeColor = correctColor($jsonBorder.stroke.color, 1, strokeColor);\n newBorderElemStyle.border = `${pxToEm(strokeWidth)} solid ${strokeColor}`;\n }\n if ($jsonBorder.corners_radius) {\n cornersRadius = correctBorderRadiusObject($jsonBorder.corners_radius, cornersRadius);\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n } else if ($jsonBorder.corner_radius) {\n cornerRadius = correctNonNegativeNumber($jsonBorder.corner_radius, cornerRadius);\n cornersRadius = {\n 'top-left': cornerRadius,\n 'top-right': cornerRadius,\n 'bottom-right': cornerRadius,\n 'bottom-left': cornerRadius\n };\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n }\n\n // Clip browser rendering artifacts by border-radius + border-width/2\n if (newHasBorder && strokeWidth && ($jsonBorder.corners_radius || $jsonBorder.corner_radius)) {\n let radius: CornersRadius = { ...cornersRadius };\n\n ([\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ] as const).forEach(corner => {\n radius[corner] = (radius[corner] || 0) + strokeWidth / 2;\n });\n\n newBackgroundRadius = borderRadius(radius);\n }\n }\n borderStyle = assignIfDifferent(newBorderStyle, borderStyle);\n borderElemStyle = assignIfDifferent(newBorderElemStyle, borderElemStyle);\n hasBorder = newHasBorder;\n backgroundRadius = newBackgroundRadius;\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n $: {\n selfPadding = correctEdgeInsertsObject(($jsonPaddings && !customPaddings) ? $jsonPaddings : undefined, selfPadding);\n }\n\n $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings));\n\n $: jsonMargins = rootCtx.getDerivedFromVars(json.margins);\n let margin = '';\n $: {\n margin = correctEdgeInserts($jsonMargins, margin);\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.alignment_horizontal);\n let widthMods: Mods = {};\n let width: string | undefined;\n let widthMin: string | undefined;\n let widthMax: string | undefined;\n let widthNum = 0;\n let widthFlexGrow = 0;\n let widthFlexShrink = 0;\n let widthFill = false;\n let hasWidthError = false;\n $: {\n let widthType: 'parent' | 'content' | undefined = undefined;\n let newWidth: string | undefined = undefined;\n let newWidthMin: string | undefined = undefined;\n let newWidthMax: string | undefined = undefined;\n let newWidthMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newWidthFill = false;\n let newWidthError = false;\n\n const type = $jsonWidth?.type;\n\n if (type === 'fixed') {\n widthNum = correctNonNegativeNumber($jsonWidth?.value, widthNum);\n newWidth = pxToEm(widthNum);\n } else if (\n type === 'wrap_content' ||\n !layoutParams.overlapParent && (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n widthType = 'content';\n if (\n type === 'wrap_content' && $jsonWidth?.constrained ||\n (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n newWidthMods['width-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const width = $jsonWidth as WrapContentSize;\n if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n newWidthMin = pxToEm(width.min_size.value);\n }\n if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n newWidthMax = pxToEm(width.max_size.value);\n }\n }\n\n if (type === 'match_parent' || !type) {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n } else {\n widthType = 'parent';\n if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n newWidthError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'vertical') {\n newWidth = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.left || 0) + ($jsonMargins?.right || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexGrow = $jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newWidthFill = true;\n }\n }\n }\n\n if (widthType === 'parent') {\n newWidthMods['halign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentHorizontal;\n if (align === 'left' || align === 'center' || align === 'right') {\n newWidthMods['halign-self'] = HORIZONTAL_ALIGN_TO_GENERAL[align];\n } else {\n newWidthMods['halign-self'] = layoutParams.parentHAlign || 'start';\n }\n }\n\n if (widthType) {\n newWidthMods.width = widthType;\n }\n\n width = newWidth;\n widthMin = newWidthMin;\n widthMax = newWidthMax;\n widthFlexGrow = newFlexGrow;\n widthFlexShrink = newFlexShrink;\n widthMods = assignIfDifferent(newWidthMods, widthMods);\n widthFill = newWidthFill;\n hasWidthError = newWidthError;\n }\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.alignment_vertical);\n let heightMods: Mods = {};\n let height: string | undefined;\n let heightMin: string | undefined;\n let heightMax: string | undefined;\n let heightNum = 0;\n let heightFlexGrow = 0;\n let heightFlexShrink = 0;\n let heightFill = false;\n let hasHeightError = false;\n $: {\n let heightType: 'parent' | 'content' | undefined = undefined;\n let newHeight: string | undefined = undefined;\n let newHeightMin: string | undefined = undefined;\n let newHeightMax: string | undefined = undefined;\n let newHeightMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newHeightFill = false;\n let newHeightError = false;\n\n const type = $jsonHeight?.type;\n\n if (type === 'fixed') {\n heightNum = correctNonNegativeNumber($jsonHeight?.value, heightNum);\n newHeight = pxToEm(heightNum);\n } else if (type === 'match_parent' && (layoutParams.overlapParent || !layoutParams.parentVerticalWrapContent)) {\n heightType = 'parent';\n if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n newHeightError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'horizontal') {\n newHeight = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.top || 0) + ($jsonMargins?.bottom || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexGrow = $jsonHeight?.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newHeightFill = true;\n }\n }\n } else {\n heightType = 'content';\n if (\n type === 'wrap_content' && $jsonHeight?.constrained ||\n type === 'match_parent' && layoutParams.parentVerticalWrapContent\n ) {\n newHeightMods['height-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const height = $jsonHeight as WrapContentSize;\n if (height?.min_size && isNonNegativeNumber(height.min_size.value)) {\n newHeightMin = pxToEm(height.min_size.value);\n }\n if (height?.max_size && isNonNegativeNumber(height.max_size.value)) {\n newHeightMax = pxToEm(height.max_size.value);\n }\n }\n\n if (type === 'match_parent') {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n }\n\n if (heightType === 'parent') {\n newHeightMods['valign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentVertical;\n if (\n align === 'top' ||\n align === 'center' ||\n align === 'bottom' ||\n align === 'baseline' && layoutParams.parentContainerOrientation === 'horizontal'\n ) {\n newHeightMods['valign-self'] = VERTICAL_ALIGN_TO_GENERAL[align];\n } else {\n newHeightMods['valign-self'] = layoutParams.parentVAlign || 'start';\n }\n }\n\n if (heightType) {\n newHeightMods.height = heightType;\n }\n\n height = newHeight;\n heightMin = newHeightMin;\n heightMax = newHeightMax;\n heightFlexGrow = newFlexGrow;\n heightFlexShrink = newFlexShrink;\n heightMods = assignIfDifferent(newHeightMods, heightMods);\n heightFill = newHeightFill;\n hasHeightError = newHeightError;\n }\n\n $: parentOverlapMod = layoutParams.overlapParent ? true : undefined;\n\n $: parentOverlapAbsoluteMod = layoutParams.overlapParent &&\n (!$jsonWidth || $jsonWidth.type === 'match_parent') &&\n $jsonHeight?.type === 'match_parent';\n\n $: gridArea = layoutParams.gridArea ?\n `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n undefined;\n\n $: jsonAlpha = rootCtx.getDerivedFromVars(json.alpha);\n let alpha = 1;\n let opacity: number | undefined;\n $: {\n alpha = correctAlpha($jsonAlpha, alpha);\n opacity = alpha === 1 ? undefined : alpha;\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n $: {\n attrs = undefined;\n if ($jsonAccessibility && !customDescription && $jsonAccessibility.description) {\n attrs = {};\n attrs['aria-label'] = $jsonAccessibility.description;\n }\n }\n\n $: jsonBackground = rootCtx.getDerivedFromVars(json.background);\n let backgroundStyle: Style;\n let hasSeparateBg: boolean;\n $: {\n backgroundStyle = {};\n hasSeparateBg = false;\n if ($jsonBackground) {\n hasSeparateBg =\n $jsonBackground.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n Boolean(backgroundRadius);\n\n if (!hasSeparateBg) {\n const res = getBackground($jsonBackground);\n backgroundStyle['background-color'] = res.color;\n backgroundStyle['background-image'] = res.image;\n backgroundStyle['background-size'] = res.size;\n backgroundStyle['background-position'] = res.position;\n backgroundStyle['background-repeat'] = 'no-repeat';\n }\n }\n }\n\n const jsonTransitionTriggers = layoutParams.fakeElement ?\n [] :\n (json.transition_triggers || ['state_change', 'visibility_change']);\n const hasStateChangeTrigger = jsonTransitionTriggers.indexOf('state_change') !== -1 && json.id;\n const hasVisibilityChangeTrigger = jsonTransitionTriggers.indexOf('visibility_change') !== -1 && json.id;\n\n let stateChangingInProgress: boolean | undefined;\n let visibilityChangingInProgress: boolean | undefined;\n let transitionChangeInProgress: boolean | undefined;\n $: {\n stateChangingInProgress = undefined;\n if (hasStateChangeTrigger && json.transition_in && rootCtx.isRunning('stateChange')) {\n stateChangingInProgress = true;\n }\n }\n $: {\n transitionChangeInProgress = undefined;\n if (\n hasStateChangeTrigger && json.transition_change &&\n rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(json.id)\n ) {\n transitionChangeInProgress = true;\n }\n }\n\n $: jsonAction = rootCtx.getDerivedFromVars(json.action);\n $: jsonActions = rootCtx.getDerivedFromVars(json.actions);\n $: jsonDoubleTapActions = rootCtx.getDerivedFromVars(json.doubletap_actions);\n $: jsonLongTapActions = rootCtx.getDerivedFromVars(json.longtap_actions);\n let actions: MaybeMissing<Action>[] = [];\n let doubleTapActions: MaybeMissing<Action>[] = [];\n let longTapActions: MaybeMissing<Action>[] = [];\n $: {\n let newActions = $jsonActions || $jsonAction && [$jsonAction] || [];\n let newDoubleTapActions = $jsonDoubleTapActions || [];\n let newLongTapActions = $jsonLongTapActions || [];\n\n if (layoutParams.fakeElement) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n } else {\n if (!Array.isArray(newActions)) {\n newActions = [];\n rootCtx.logError(wrapError(new Error('Actions should be array')));\n }\n if (!Array.isArray(newDoubleTapActions)) {\n newDoubleTapActions = [];\n rootCtx.logError(wrapError(new Error('DoubleTapActions should be array')));\n }\n if (!Array.isArray(newLongTapActions)) {\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error('LongTapActions should be array')));\n }\n }\n\n if ((newActions.length || newDoubleTapActions.length || newLongTapActions.length) && customActions) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error(`Cannot use action on component \"${customActions}\"`)));\n }\n\n // todo check parent actions with customActions\n actions = newActions;\n doubleTapActions = newDoubleTapActions;\n longTapActions = newLongTapActions;\n }\n\n $: jsonActionAnimation = rootCtx.getDerivedFromVars(json.action_animation);\n let actionAnimationList: AnyAnimation[] = [];\n let actionAnimationTransition = '';\n let animationOpacityStart: number | undefined = undefined;\n let animationOpacityEnd: number | undefined = undefined;\n let animationScaleStart: number | undefined = undefined;\n let animationScaleEnd: number | undefined = undefined;\n $: {\n if ($jsonActionAnimation) {\n actionAnimationList = flattenAnimation($jsonActionAnimation as ActionAnimation);\n actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n }\n }\n\n function hasNativeAnimation(list: AnyAnimation[]) {\n return list.some(it => it.name === 'native');\n }\n\n function parseActionAnimation(animation: MaybeMissing<AnyAnimation>): string {\n const startValue = correctNumber(animation.start_value, 1);\n const endValue = correctNumber(animation.end_value, 1);\n const delay = correctNonNegativeNumber(animation.start_delay, 0);\n const duration = correctNonNegativeNumber(animation.duration, 300);\n const interpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n\n switch (animation.name) {\n case 'fade':\n animationOpacityStart = startValue;\n animationOpacityEnd = endValue;\n return `opacity ${duration}ms ${interpolator} ${delay}ms`;\n case 'scale':\n animationScaleStart = startValue;\n animationScaleEnd = endValue;\n return `transform ${duration}ms ${interpolator} ${delay}ms`;\n case 'native':\n case 'no_animation':\n return '';\n default:\n rootCtx.logError(wrapError(new Error('Unknown action_animation name'), {\n additional: {\n animation: animation.name\n }\n }));\n return '';\n }\n }\n\n let isVisibilityInited = false;\n let visibility: Visibility = 'visible';\n $: jsonVisibility = rootCtx.getDerivedFromVars(json.visibility);\n $: {\n const prevVisibility = visibility;\n const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n if (prevVisibility !== nextVisibility) {\n if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n onVisibilityChange(nextVisibility);\n } else {\n visibility = nextVisibility;\n }\n }\n\n if (!isVisibilityInited) {\n isVisibilityInited = true;\n }\n }\n\n async function onVisibilityChange(nextVisibility: Visibility) {\n visibility = nextVisibility;\n\n const direction = nextVisibility === 'visible' ? 'in' : 'out';\n const transition = direction === 'in' ? json.transition_in : json.transition_out;\n\n if (\n hasVisibilityChangeTrigger &&\n transition\n ) {\n await tick();\n\n if (direction === 'in') {\n visibilityChangingInProgress = true;\n }\n stateCtx.runVisibilityTransition(\n {\n ...json,\n visibility: 'visible'\n } as DivBaseData,\n templateContext,\n transition,\n currentNode,\n direction\n ).then(() => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n }).catch(e => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n throw e;\n });\n }\n }\n\n $: mods = {\n ...widthMods,\n ...heightMods,\n 'parent-overlap': parentOverlapMod,\n 'parent-overlap-absolute': parentOverlapAbsoluteMod,\n 'scroll-snap': layoutParams.scrollSnap,\n 'hide-on-transition-in': stateChangingInProgress ||\n visibilityChangingInProgress ||\n transitionChangeInProgress,\n visibility,\n 'has-action-animation': Boolean(actionAnimationTransition),\n 'parent-flex': layoutParams.parentContainerOrientation || undefined,\n 'parent-grid': Boolean(layoutParams.gridArea) || undefined\n };\n\n $: jsonTransform = rootCtx.getDerivedFromVars(json.transform);\n let pivotXNum = 0;\n let pivotYNum = 0;\n let transformOrigin: string | undefined;\n let transform: string | undefined;\n $: {\n if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n const pivotX = $jsonTransform.pivot_x || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotXNum = correctNumber(pivotX.value, pivotXNum);\n const pivotXCSSValue = pivotX.type === 'pivot-fixed' ? pxToEm(pivotXNum) : `${pivotXNum}%`;\n const pivotY = $jsonTransform.pivot_y || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotYNum = correctNumber(pivotY.value, pivotYNum);\n const pivotYCSSValue = pivotY.type === 'pivot-fixed' ? pxToEm(pivotYNum) : `${pivotYNum}%`;\n transformOrigin = `${pivotXCSSValue} ${pivotYCSSValue}`;\n transform = `rotate(${$jsonTransform.rotation}deg)`;\n }\n }\n\n // eslint-disable-next-line no-nested-ternary\n $: flexBasis = (widthFill || heightFill) ?\n '100%' :\n ((widthFlexGrow || heightFlexGrow) ? 0 : undefined);\n\n $: stl = {\n ...style,\n ...backgroundStyle,\n ...borderStyle,\n width,\n 'min-width': widthMin,\n 'max-width': widthMax,\n height,\n 'min-height': heightMin,\n // input max-height\n 'max-height': heightMax || style?.['max-height'],\n 'grid-area': gridArea,\n padding,\n margin,\n opacity,\n transition: actionAnimationTransition,\n 'transform-origin': transformOrigin,\n transform,\n 'flex-grow': widthFlexGrow || heightFlexGrow || undefined,\n 'flex-shrink': (widthFlexShrink || heightFlexShrink) ? 1 : undefined,\n 'flex-basis': flexBasis,\n '--divkit-animation-opacity-start': animationOpacityStart,\n '--divkit-animation-opacity-end': animationOpacityEnd,\n '--divkit-animation-scale-start': animationScaleStart,\n '--divkit-animation-scale-end': animationScaleEnd\n };\n\n function useAction(node: HTMLElement) {\n currentNode = node;\n if (hasStateChangeTrigger && json.transition_in) {\n stateCtx.registerChildWithTransitionIn(\n json as DivBaseData,\n templateContext,\n json.transition_in,\n node\n ).then(() => {\n stateChangingInProgress = false;\n }).catch(e => {\n stateChangingInProgress = false;\n throw e;\n });\n }\n if (hasStateChangeTrigger && json.transition_out) {\n stateCtx.registerChildWithTransitionOut(\n json as DivBaseData,\n templateContext,\n json.transition_out,\n node\n );\n }\n if (hasStateChangeTrigger && json.transition_change) {\n stateCtx.registerChildWithTransitionChange(\n json as DivBaseData,\n templateContext,\n json.transition_change,\n node\n ).then(() => {\n transitionChangeInProgress = false;\n }).catch(e => {\n transitionChangeInProgress = false;\n throw e;\n });\n }\n\n const visibilityActions = layoutParams.fakeElement ?\n [] :\n rootCtx.getJsonWithVars(\n json.visibility_actions ||\n json.visibility_action && [json.visibility_action]\n );\n visibilityAction(node, {\n visibilityActions,\n rootCtx\n });\n\n const id = json.id;\n if (id) {\n stateCtx.registerChild(id);\n }\n\n let dev: DevtoolResult | null = null;\n\n if (devtool && !layoutParams.fakeElement) {\n dev = devtool(node, {\n json,\n origJson,\n rootCtx,\n templateContext\n });\n }\n\n return {\n destroy() {\n if (id) {\n stateCtx.unregisterChild(id);\n }\n if (dev) {\n dev.destroy();\n }\n }\n };\n }\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n <Actionable\n use={useAction}\n cls=\"{cls} {genClassName('outer', css, mods)}\"\n style={makeStyle(stl)}\n {actions}\n {doubleTapActions}\n {longTapActions}\n {attrs}\n isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n >\n {#if hasSeparateBg}<OuterBackground background={$jsonBackground} radius={backgroundRadius} />{/if}<slot />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n </Actionable>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadiusObject(\n cornersRadius: CornersRadius,\n defaultVal: CornersRadius\n): CornersRadius {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return cornersRadius;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject(\n edgeInsets: EdgeInsets | undefined,\n defaultVal: EdgeInsets | null\n): EdgeInsets | null {\n if (!edgeInsets) {\n return defaultVal;\n }\n\n const list = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const;\n\n for (let i = 0; i < list.length; ++i) {\n if (edgeInsets[list[i]] && !isNonNegativeNumber(edgeInsets[list[i]])) {\n return defaultVal;\n }\n }\n\n return edgeInsets;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\n\nexport function sumEdgeInsets(a: EdgeInsets | null, b: EdgeInsets | null): EdgeInsets {\n if (!a && !b) {\n return {};\n }\n\n if (!b) {\n return a as EdgeInsets;\n }\n\n if (!a) {\n return b;\n }\n\n const res: EdgeInsets = {};\n\n ([\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const).forEach(side => {\n const aVal = a[side];\n if (aVal) {\n res[side] = aVal;\n }\n const bVal = b[side];\n if (bVal) {\n res[side] = (res[side] || 0) + bVal;\n }\n });\n\n return res;\n}\n","import { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctAlpha(val: number | undefined, defaultVal: number): number {\n if (!isNonNegativeNumber(val) || val === undefined || val > 1) {\n return defaultVal;\n }\n return Number(val);\n}\n","import { Visibility } from '../types/base';\n\nexport function correctVisibility(visibility: string | undefined, defaultVal: Visibility): Visibility {\n if (\n visibility === 'visible' ||\n visibility === 'invisible' ||\n visibility === 'gone'\n ) {\n return visibility;\n }\n\n return defaultVal;\n}\n","import type { VisibilityAction } from '../types/visibilityAction';\nimport type { MaybeMissing } from '../expressions/json';\nimport { RootCtxValue } from '../context/root';\nimport { getUrlSchema, isBuiltinSchema } from '../utils/url';\n\nexport function visibilityAction(node: HTMLElement, {\n visibilityActions,\n rootCtx\n}: {\n visibilityActions?: MaybeMissing<VisibilityAction[]>;\n rootCtx: RootCtxValue;\n}) {\n if (!visibilityActions?.length) {\n return;\n }\n\n const visibilityStatus: {\n action: MaybeMissing<VisibilityAction>;\n visible: boolean;\n count: number;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n }[] = visibilityActions.map(it => ({\n action: it,\n visible: false,\n count: 0,\n finished: false\n }));\n\n const thresholds = [...new Set([...visibilityActions.map(it => (it.visibility_percentage || 50) / 100)])];\n\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n visibilityStatus.forEach(status => {\n const nowVisible = entry.intersectionRatio >= (status.action.visibility_percentage || 50) / 100;\n\n if (!status.visible && nowVisible) {\n if (!status.finished) {\n status.timer = setTimeout(() => {\n ++status.count;\n const limit = status.action.log_limit === 0 ? Infinity : (status.action.log_limit || 1);\n if (++status.count >= limit) {\n status.finished = true;\n }\n\n const actionUrl = status.action.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols())) {\n if (schema === 'div-action') {\n rootCtx.execAction(status.action);\n } else if (status.action.log_id) {\n rootCtx.execCustomAction(status.action as VisibilityAction & { url: string });\n }\n }\n }\n\n rootCtx.logStat('visible', status.action);\n }, status.action.visibility_duration || 800);\n }\n } else if (!nowVisible) {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n }\n status.visible = nowVisible;\n });\n });\n }, {\n threshold: thresholds\n });\n\n observer.observe(node);\n\n return {\n destroy() {\n observer.disconnect();\n }\n };\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text-range_singleline\":\"divkit-ccb64\",\"text-range__top-offset\":\"divkit-d9237\",\"text-range_decoration_both\":\"divkit-d7e07\",\"text-range_decoration_underline\":\"divkit-f3dde\",\"text-range_decoration_strike\":\"divkit-d27b7\",\"text-range_decoration_none\":\"divkit-c6b0f\"};","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num <= 0) {\n return defaultVal;\n }\n return num;\n}\n","import type { FontWeight } from '../types/text';\n\nexport function fontWeightToCss(fontWeight?: FontWeight | undefined): number | undefined {\n if (\n fontWeight === 'light' ||\n fontWeight === 'medium' ||\n fontWeight === 'bold' ||\n fontWeight === 'regular'\n ) {\n if (fontWeight === 'medium') {\n return 500;\n } else if (fontWeight === 'bold') {\n return 700;\n } else if (fontWeight === 'light') {\n return 300;\n }\n\n return 400;\n }\n}\n","import type { FontWeight } from '../types/text';\nimport { fontWeightToCss } from './fontWeightToCss';\n\nexport function correctFontWeight(\n fontWeight: FontWeight | undefined,\n defaultVal: number | undefined\n): number | undefined {\n return fontWeightToCss(fontWeight) || defaultVal;\n}\n","<script lang=\"ts\">\n import css from './TextRange.module.css';\n\n import type { TextRange } from '../../types/text';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import Actionable from '../utilities/Actionable.svelte';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { correctColor } from '../../utils/correctColor';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { getBackground } from '../../utils/background';\n\n export let text: string;\n export let rootFontSize: number;\n export let textStyles: Partial<TextRange> = {};\n export let singleline = false;\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n\n let decoration = 'none';\n $: {\n let newDecoration = 'none';\n\n if (textStyles.underline || textStyles.strike) {\n if (textStyles.underline === 'single' && textStyles.strike === 'single') {\n newDecoration = 'both';\n } else if (textStyles.underline === 'single') {\n newDecoration = 'underline';\n } else if (textStyles.strike === 'single') {\n newDecoration = 'strike';\n }\n }\n\n decoration = newDecoration;\n }\n\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n }\n\n let lineHeight = 1.25;\n $: {\n if (isPositiveNumber(textStyles.line_height)) {\n lineHeight = Number(textStyles.line_height) / fontSize;\n }\n }\n\n let letterSpacing = '';\n $: {\n if (isNonNegativeNumber(textStyles.letter_spacing)) {\n letterSpacing = pxToEm(textStyles.letter_spacing);\n }\n }\n\n let fontWeight: number | undefined = undefined;\n $: {\n fontWeight = correctFontWeight(textStyles.font_weight, fontWeight);\n }\n\n let color = '';\n $: {\n color = correctColor(textStyles.text_color, 1, color);\n }\n\n $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n $: bg = textStyles.background ? getBackground([textStyles.background]) : null;\n\n let border: {\n color: string;\n width: number;\n } | null = null;\n $: if (textStyles.border?.stroke && correctColor(textStyles.border.stroke.color) !== 'transparent' && isPositiveNumber(textStyles.border.stroke.width)) {\n border = {\n color: textStyles.border.stroke.color,\n width: textStyles.border.stroke.width\n };\n } else {\n border = null;\n }\n\n $: borderRadius = correctPositiveNumber(textStyles.border?.corner_radius, 0);\n\n $: mods = {\n singleline,\n decoration\n };\n\n $: style = {\n 'font-size': pxToEm((fontSize * 10) / rootFontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n 'font-weight': fontWeight,\n color,\n background: bg?.color || undefined,\n /**\n * box-shadow instead of border because:\n * 1) Doesn't take space as border does\n * 2) There should not be a border-radius on line breaks, but there should be a border\n */\n 'box-shadow': border ? `inset 0 0 0 ${pxToEm(border.width)} ${border.color}` : undefined,\n 'border-radius': borderRadius ? pxToEm(borderRadius) : undefined\n };\n</script>\n\n{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n cls={genClassName('text-range', css, mods)}\n {actions}\n style={makeStyle(style)}\n>\n {text}\n</Actionable>\n","import type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { AlignmentVertical } from '../types/alignment';\n\nexport function correctAlignmentVertical(\n orientation: string | undefined,\n defaultVal: AlignmentVertical\n): AlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { TintMode } from '../types/image';\n\nexport function correctTintMode(tintMode: TintMode | undefined, defaultVal: TintMode): TintMode {\n if (\n tintMode === 'source_in' ||\n tintMode === 'source_atop' ||\n tintMode === 'darken' ||\n tintMode === 'lighten' ||\n tintMode === 'multiply' ||\n tintMode === 'screen'\n ) {\n return tintMode;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Text.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivTextData, TextImage, TextRange, TextStyles } from '../../types/text';\n import type { Style } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { TintMode } from '../../types/image';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import TextRangeView from './TextRange.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { getBackground } from '../../utils/background';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctColor } from '../../utils/correctColor';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import { propToString } from '../../utils/propToString';\n import { correctTintMode } from '../../utils/correctTintMode';\n\n export let json: Partial<DivTextData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasError = false;\n $: jsonText = rootCtx.getDerivedFromVars(json.text);\n let text = '';\n $: {\n text = propToString($jsonText, text);\n if (!text) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text\" prop for div \"text\"')));\n } else {\n hasError = false;\n }\n }\n $: jsonRanges = rootCtx.getDerivedFromVars(json.ranges);\n $: jsonImages = rootCtx.getDerivedFromVars(json.images);\n\n $: jsonRootTextStyles = rootCtx.getDerivedFromVars({\n font_size: json.font_size,\n letter_spacing: json.letter_spacing,\n font_weight: json.font_weight,\n text_color: json.text_color,\n underline: json.underline,\n strike: json.strike,\n line_height: json.line_height\n });\n\n $: jsonTextSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n }\n\n $: jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight = 1.25;\n let customLineHeight = false;\n $: {\n const newLineHeight = $jsonLineHeight;\n if (isPositiveNumber(newLineHeight)) {\n lineHeight = Number(newLineHeight) / fontSize;\n customLineHeight = true;\n } else {\n customLineHeight = false;\n }\n }\n\n $: jsonMaxLines = rootCtx.getDerivedFromVars(json.max_lines);\n $: singleline = $jsonMaxLines === 1;\n let maxHeight = '';\n let lineClamp: string | number = '';\n let multiline = false;\n $: {\n let newMaxHeight = '';\n let newLineClamp: string | number = '';\n let newMultiline = false;\n\n if ($jsonMaxLines && $jsonMaxLines > 1) {\n let lines = Number($jsonMaxLines);\n\n newMaxHeight = lines * lineHeight + 'em';\n\n // multiline overflow enabled only if there is no images and ranges\n if (!$jsonRanges && !$jsonImages) {\n newLineClamp = lines;\n newMultiline = true;\n }\n }\n\n maxHeight = newMaxHeight;\n lineClamp = newLineClamp;\n multiline = newMultiline;\n }\n\n let halign: AlignmentHorizontal = 'left';\n $: jsonHAlign = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n $: {\n halign = correctAlignmentHorizontal($jsonHAlign, halign);\n }\n\n let valign: AlignmentVertical = 'top';\n $: jsonVAlign = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n $: {\n valign = correctAlignmentVertical($jsonVAlign, valign);\n }\n\n $: isAllTextSameColor =\n !$jsonRanges ||\n (\n text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n $jsonRanges[0].start === 0 && typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n );\n\n $: jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n\n $: isOnlyOneColorDefined = Boolean($jsonTextColor) !==\n Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\n let rootTextColor = '';\n $: {\n let newRootTextColor = '';\n\n if ($jsonMaxLines && isAllTextSameColor && isOnlyOneColorDefined) {\n // Recolor the ellipsis only if the entire text have the same color\n newRootTextColor = correctColor(\n ($jsonTextColor || ($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color)) as string,\n 1,\n rootTextColor\n );\n }\n\n rootTextColor = newRootTextColor;\n }\n\n $: jsonTruncate = rootCtx.getDerivedFromVars(json.truncate);\n $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n $: jsonTextGradient = rootCtx.getDerivedFromVars(json.text_gradient);\n let gradient = '';\n $: {\n let newGradient = '';\n\n if ($jsonTextGradient) {\n const bg = getBackground([$jsonTextGradient]);\n if (bg.image) {\n newGradient = bg.image;\n }\n }\n\n gradient = newGradient;\n }\n\n $: jsonSelectable = rootCtx.getDerivedFromVars(json.selectable);\n let selectable = false;\n $: {\n selectable = correctBooleanInt($jsonSelectable, selectable);\n }\n\n let renderList: ({\n text: string;\n textStyles: TextStyles;\n actions?: MaybeMissing<Action[]>;\n } | {\n image: {\n url: string;\n width: string;\n height: string;\n wrapperStyle: Style;\n svgFilterId: string;\n };\n })[] = [];\n let usedTintColors: [string, TintMode][] = [];\n\n function updateRenderList(\n text: string,\n textRanges: MaybeMissing<TextRange[]> | undefined,\n textImages: MaybeMissing<TextImage[]> | undefined\n ) {\n let newRenderList: typeof renderList = [];\n\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n usedTintColors = [];\n\n if (!(Array.isArray(textRanges) && textRanges.length || Array.isArray(textImages) && textImages.length && text)) {\n renderList = [];\n return;\n }\n\n const content = text;\n let ranges = textRanges || [\n {\n start: 0,\n end: content.length\n }\n ];\n let images = textImages || [];\n let prevIndex = 0;\n let activeRanges: TextStyles[] = [];\n let list: ({\n index: number;\n range: MaybeMissing<TextRange> & {\n start: number;\n end: number;\n };\n type: 'rangeStart' | 'rangeEnd';\n isStart?: boolean;\n } | {\n index: number;\n type: 'image';\n arrayIndex: number;\n image: MaybeMissing<TextImage> & {\n start: number;\n url: string;\n };\n })[] = [];\n\n ranges.forEach(range => {\n if (range.start !== undefined && range.end !== undefined) {\n list.push({\n index: range.start,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeStart',\n isStart: true\n });\n list.push({\n index: range.end,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeEnd'\n });\n }\n });\n images.forEach((image, index) => {\n if (image.start !== undefined && image.url && image.start <= content.length) {\n list.push({\n index: image.start,\n image: image as typeof image & {\n start: number;\n url: string;\n },\n type: 'image',\n arrayIndex: index\n });\n }\n });\n list.sort((a, b) => {\n if (a.index === b.index) {\n if (a.type !== b.type) {\n if (a.type === 'image') {\n return -1;\n } else if (b.type === 'image') {\n return 1;\n }\n\n return a.type < b.type ? -1 : 1;\n } else if (a.type === 'image' && b.type === 'image') {\n return b.arrayIndex - a.arrayIndex;\n } else if (a.type === 'rangeStart' && b.type === 'rangeStart') {\n return a.range.end - b.range.end;\n } else if (a.type === 'rangeStart') {\n return 1;\n } else if (b.type === 'rangeStart') {\n return -1;\n }\n if (a.type !== 'image' && b.type !== 'image') {\n return a.range.start - b.range.start;\n }\n return 0;\n }\n\n return a.index - b.index;\n });\n list.forEach(item => {\n let range = item.type === 'image' ? null : item.range;\n let index = item.index;\n\n if (index > prevIndex) {\n let textStyles = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n newRenderList.push({\n text: content.substring(prevIndex, index),\n textStyles,\n actions: item.type === 'rangeEnd' && item.range?.actions || undefined\n });\n }\n\n if (item.type === 'rangeStart' && range) {\n activeRanges.push(range);\n } else if (item.type === 'rangeEnd') {\n activeRanges = activeRanges.filter(range => range !== item.range);\n } else if (item.type === 'image') {\n let textStyles2 = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n let imageWidth = pxToEm(\n (((item.image.width && item.image.width.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n let imageHeight = pxToEm(\n (((item.image.height && item.image.height.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n const wrapperStyle: Style = {\n 'font-size': pxToEm(((Number(textStyles2.font_size) || 12) * 10) / fontSize)\n };\n\n let svgFilterId = '';\n const tintColor = item.image.tint_color;\n const tintMode = correctTintMode(item.image.tint_mode, 'source_in');\n if (tintColor) {\n const color = correctColor(item.image.tint_color);\n svgFilterId = rootCtx.addSvgFilter(color, tintMode);\n usedTintColors.push([color, tintMode]);\n }\n\n newRenderList.push({\n image: {\n url: item.image.url,\n width: imageWidth,\n height: imageHeight,\n wrapperStyle,\n svgFilterId\n }\n });\n }\n\n prevIndex = index;\n });\n\n if (prevIndex < content.length) {\n newRenderList.push({\n text: content.substring(prevIndex),\n textStyles: { ...$jsonRootTextStyles } as TextStyles\n });\n }\n\n renderList = newRenderList;\n }\n\n $: updateRenderList(text, $jsonRanges, $jsonImages);\n\n $: mods = {\n singleline,\n multiline,\n halign,\n valign,\n truncate\n };\n\n $: innerMods = {\n gradient: Boolean(gradient)\n };\n\n $: style = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'max-height': maxHeight,\n '-webkit-line-clamp': lineClamp,\n color: rootTextColor,\n 'background-image': gradient\n };\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css.text__image_hidden);\n }\n }\n\n onDestroy(() => {\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls=\"{genClassName('text', css, mods)} {selectable ? '' : rootCss.root__unselectable}\"\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={genClassName('text__inner', css, innerMods)} style={makeStyle(style)}>\n {#if renderList.length}\n {#each renderList as item, index}\n {#if 'text' in item}\n {#if item.text}\n <TextRangeView\n text={item.text}\n rootFontSize={fontSize}\n textStyles={item.textStyles}\n {singleline}\n actions={item.actions}\n />\n {/if}\n {:else if item.image}\n <span style={makeStyle(item.image.wrapperStyle)}><img\n class={css.text__image}\n src={item.image.url}\n loading=\"lazy\"\n decoding=\"async\"\n aria-hidden=\"true\"\n alt=\"\"\n style={makeStyle({\n width: item.image.width,\n height: item.image.height,\n // Normalizes line-height for the containing text line\n 'margin-top': customLineHeight ? `-${item.image.height}` : undefined,\n 'margin-bottom': customLineHeight ? `-${item.image.height}` : undefined,\n filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n })}\n on:error={onImgError}\n ></span>\n {/if}\n {/each}\n {:else}\n <TextRangeView\n {text}\n rootFontSize={fontSize}\n textStyles={$jsonRootTextStyles}\n {singleline}\n />\n {/if}\n </span>\n </Outer>\n{/if}\n","import { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined, defaultVal: string): string {\n const valToString = String(val ?? '');\n\n return valToString || defaultVal;\n}\n","export function correctBooleanInt(val: number | boolean | undefined, defaultVal: boolean): boolean {\n if (val === 1 || val === 0 || val === false || val === true) {\n return Boolean(val);\n }\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"divkit-d37d6\",\"container_wrap\":\"divkit-c8551\",\"container_orientation_vertical\":\"divkit-ddc33\",\"container_valign_top\":\"divkit-a331a\",\"container_valign_center\":\"divkit-aae61\",\"container_valign_bottom\":\"divkit-c2226\",\"container_orientation_horizontal\":\"divkit-fe458\",\"container_halign_left\":\"divkit-a3091\",\"container_halign_center\":\"divkit-bac9d\",\"container_halign_right\":\"divkit-f4230\",\"container_orientation_overlap\":\"divkit-a644d\"};","import type { Drawable } from '../types/drawable';\nimport type { Style } from '../types/general';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Circle, RoundedRectangle } from '../types/shape';\nimport type { Stroke } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\nexport interface DrawableStyle extends Style {\n width: number;\n height: number;\n borderRadius: number;\n background: string;\n boxShadow?: string;\n}\n\ninterface DrawableSize {\n width: number;\n height: number;\n radius: number;\n}\n\nfunction calcRoundedRectangleSize(shape: MaybeMissing<RoundedRectangle>): DrawableSize {\n return {\n width: Number(shape.item_width?.value || 10),\n height: Number(shape.item_height?.value || 10),\n radius: Number(shape.corner_radius?.value ?? 5)\n };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n const size = Number(shape.radius?.value || 10) * 2;\n\n return {\n width: size,\n height: size,\n radius: size\n };\n}\n\nfunction calcDrawableStyle(\n size: DrawableSize,\n shape: MaybeMissing<RoundedRectangle | Circle>,\n old?: {\n stroke?: MaybeMissing<Stroke>;\n color?: string;\n }\n): DrawableStyle {\n const stl: Partial<DrawableStyle> = {};\n\n const stroke = shape.stroke || old?.stroke;\n const borderColor = stroke?.color ? correctColor(stroke.color) : '';\n const borderWidth = stroke?.width ? Number(stroke.width ?? 1) : '';\n\n stl.width = size.width;\n stl.height = size.height;\n stl.borderRadius = size.radius;\n\n const bgColor = shape.background_color || old?.color;\n stl.background = correctColor(bgColor);\n\n if (borderColor && borderWidth) {\n stl.boxShadow = `inset 0 0 0 ${pxToEm(borderWidth)} ${borderColor}`;\n }\n\n return stl as DrawableStyle;\n}\n\nexport function correctDrawableStyle<D = DrawableStyle>(\n drawable: MaybeMissing<Drawable> | undefined,\n availShapes: string[],\n defaultValue: D\n): D {\n if (\n !drawable || !drawable.shape ||\n !drawable.shape.type || !availShapes.includes(drawable.shape.type) ||\n drawable.type !== 'shape_drawable'\n ) {\n return defaultValue;\n }\n let size: DrawableSize;\n if (drawable.shape.type === 'rounded_rectangle') {\n size = calcRoundedRectangleSize(drawable.shape);\n } else if (drawable.shape.type === 'circle') {\n size = calcCircleSize(drawable.shape);\n } else {\n return defaultValue;\n }\n\n return calcDrawableStyle(size, drawable.shape, {\n color: drawable.color,\n stroke: drawable.stroke\n }) as unknown as D;\n}\n","import type { BooleanInt } from '../../typings/common';\nimport type { DrawableStyle } from './correctDrawableStyles';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport type { ContainerOrientation } from '../types/container';\nimport { pxToEm } from './pxToEm';\n\nexport interface SeparatorStyle {\n show_at_start?: BooleanInt;\n show_at_end?: BooleanInt;\n show_between?: BooleanInt;\n style: DrawableStyle;\n}\n\nfunction setAdditionalPadding(\n insets: EdgeInsets,\n separator: SeparatorStyle | null,\n crossAxis: boolean\n): void {\n if (separator?.show_at_start) {\n if (crossAxis) {\n insets.top = separator.style.height;\n } else {\n insets.left = separator.style.width;\n }\n }\n\n if (separator?.show_at_end) {\n if (crossAxis) {\n insets.bottom = separator.style.height;\n } else {\n insets.right = separator.style.width;\n }\n }\n}\n\nexport function calcAdditionalPaddings(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n) {\n const res: EdgeInsets = {};\n\n setAdditionalPadding(res, separator, orientation === 'vertical');\n setAdditionalPadding(res, lineSeparator, orientation === 'horizontal');\n\n return res;\n}\n\nexport function calcItemsGap(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n): string {\n let vals: number[];\n\n if (orientation === 'horizontal') {\n vals = [\n lineSeparator?.show_between ? lineSeparator.style.height : 0,\n separator?.show_between ? separator.style.width : 0\n ];\n } else {\n vals = [\n separator?.show_between ? separator.style.height : 0,\n lineSeparator?.show_between ? lineSeparator.style.width : 0\n ];\n }\n\n return vals.map(pxToEm).join(' ');\n}\n","let res: boolean;\n\n/**\n * Based on the Chris Smith work in Modernizr\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/flexgap.js\n * MIT License\n */\nexport function hasGapSupport(): boolean {\n if (res !== undefined) {\n return res;\n }\n\n const flex = document.createElement('div');\n flex.style.position = 'absolute';\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.gap = '1px';\n\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n\n document.body.appendChild(flex);\n res = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return res;\n}\n","<script lang=\"ts\">\n import { onDestroy, onMount } from 'svelte';\n\n import css from './ContainerSeparator.module.css';\n import outerCss from '../utilities/Outer.module.css';\n\n import type { ContainerOrientation } from '../../types/container';\n import type { SeparatorStyle } from '../../utils/container';\n import type { DrawableStyle } from '../../utils/correctDrawableStyles';\n import { simpleThrottle } from '../../utils/simpleThrottle';\n import { Box, getMarginBox } from '../../utils/getMarginBox';\n\n export let orientation: ContainerOrientation;\n export let separator: SeparatorStyle | null;\n export let lineSeparator: SeparatorStyle | null;\n\n const THROTTLE_TIMEOUT = 10;\n const throttledUpdated = simpleThrottle(updateSeparators, THROTTLE_TIMEOUT);\n\n interface SeparatorItem {\n left: number;\n top: number;\n width: number;\n height: number;\n style: DrawableStyle;\n }\n let separators: SeparatorItem[] = [];\n let node: HTMLElement;\n $: parentElement = node?.parentElement || null;\n let mounted = false;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n $: if (mounted && parentElement || mutationObserver || resizeObserver) {\n if (mutationObserver) {\n mutationObserver.disconnect();\n mutationObserver = null;\n }\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n if (mounted && parentElement) {\n if (typeof MutationObserver !== 'undefined') {\n mutationObserver = new MutationObserver(mutationObserverCallback);\n mutationObserver.observe(parentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(throttledUpdated);\n resizeObserver.observe(parentElement);\n }\n }\n }\n\n $: if (mounted && parentElement) {\n throttledUpdated();\n }\n\n function mutationObserverCallback(records: MutationRecord[]): void {\n if (records.some(record => {\n const classList = (record.target as HTMLElement)?.classList;\n\n return !classList?.contains(css['container-separator__shape']) &&\n !classList?.contains(css['container-separator']);\n })) {\n throttledUpdated();\n }\n }\n\n // eslint-disable-next-line max-params\n function appendSeparator(\n separators: SeparatorItem[],\n separatorStyle: DrawableStyle,\n box0: Box,\n box1: Box,\n containingBox: Box,\n crossAxis: boolean\n ) {\n if (crossAxis) {\n separators.push({\n top: box0.bottom,\n left: containingBox.left,\n width: containingBox.right - containingBox.left,\n height: box1.top - box0.bottom,\n style: separatorStyle\n });\n } else {\n separators.push({\n top: containingBox.top,\n left: box0.right,\n width: box1.left - box0.right,\n height: containingBox.bottom - containingBox.top,\n style: separatorStyle\n });\n }\n }\n\n function appendSeparators(\n separators: SeparatorItem[],\n separator: SeparatorStyle,\n boxes: Box[],\n crossAxis: boolean\n ): void {\n const containingBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n\n if (separator?.show_at_start) {\n appendSeparator(\n separators,\n separator.style,\n // only right and bottom is used\n {\n top: 0,\n right: boxes[0].left - separator.style.width,\n bottom: boxes[0].top - separator.style.height,\n left: 0\n },\n boxes[0],\n containingBox,\n crossAxis\n );\n }\n if (separator?.show_between) {\n for (let i = 0; i < boxes.length - 1; ++i) {\n appendSeparator(\n separators,\n separator.style,\n boxes[i],\n boxes[i + 1],\n containingBox,\n crossAxis\n );\n }\n }\n if (separator?.show_at_end) {\n const lastBox = boxes[boxes.length - 1];\n\n appendSeparator(\n separators,\n separator.style,\n lastBox,\n // only top and left is used\n {\n top: lastBox.bottom + separator.style.height,\n right: 0,\n bottom: 0,\n left: lastBox.right + separator.style.width\n },\n containingBox,\n crossAxis\n );\n }\n }\n\n function updateSeparators(): void {\n if (!parentElement) {\n return;\n }\n\n const parentBbox = parentElement.getBoundingClientRect();\n\n separators = [];\n\n let children = [...parentElement.children]\n .filter(it => it !== node && !it.classList.contains(outerCss.outer__border)) as HTMLElement[];\n let rows: HTMLElement[][] = [];\n\n while (children.length) {\n const row: HTMLElement[] = [];\n const firstChild = children.shift() as HTMLElement;\n row.push(firstChild);\n\n let bbox = firstChild.getBoundingClientRect();\n let right = bbox.right;\n let bottom = bbox.bottom;\n\n while (children.length) {\n let first = children[0];\n let bbox = first.getBoundingClientRect();\n\n if (orientation === 'vertical') {\n if (bbox.top < bottom) {\n break;\n }\n } else if (bbox.left < right) {\n break;\n }\n\n right = Math.max(right, bbox.right);\n bottom = Math.max(bottom, bbox.bottom);\n row.push(first);\n children.shift();\n }\n\n rows.push(row);\n }\n\n const rowBoxes: Box[] = [];\n rows.forEach(row => {\n const boxes = row.map(it => getMarginBox(it));\n\n if (separator) {\n appendSeparators(separators, separator as SeparatorStyle, boxes, orientation === 'vertical');\n }\n\n const rowBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n rowBoxes.push(rowBox);\n });\n if (lineSeparator) {\n appendSeparators(separators, lineSeparator, rowBoxes, orientation === 'horizontal');\n }\n\n separators.forEach(separator => {\n separator.top -= parentBbox.top;\n separator.left -= parentBbox.left;\n });\n }\n\n onMount(() => {\n mounted = true;\n });\n\n onDestroy(() => {\n mounted = false;\n });\n</script>\n\n<svelte:window on:resize={throttledUpdated} />\n\n<div bind:this={node} class={css['container-separator']}>\n {#each separators as item}\n <div\n class={css['container-separator__item']}\n style:left=\"{item.left}px\"\n style:top=\"{item.top}px\"\n style:width=\"{item.width}px\"\n style:height=\"{item.height}px\"\n >\n <div\n class={css['container-separator__shape']}\n style:width=\"{item.style.width}px\"\n style:height=\"{item.style.height}px\"\n style:border-radius=\"{item.style.borderRadius}px\"\n style:background=\"{item.style.background}\"\n style:box-shadow=\"{item.style.boxShadow}\"\n ></div>\n </div>\n {/each}\n</div>\n","// extracted by mini-css-extract-plugin\nexport default {\"container-separator\":\"divkit-a7719\",\"container-separator__item\":\"divkit-c770e\",\"container-separator__shape\":\"divkit-f6e9a\"};","export function simpleThrottle<F extends(...args: any[]) => any>(fn: F, timeout: number): F {\n let runTs = 0;\n let prevRes: unknown;\n let awaits = false;\n\n return function(this: any) {\n const now = Date.now();\n\n if (!runTs || Math.abs(now - runTs) > timeout) {\n runTs = now;\n\n // eslint-disable-next-line prefer-rest-params\n return (prevRes = fn.apply(this, arguments as unknown as any[]));\n }\n\n if (!awaits) {\n awaits = true;\n setTimeout(() => {\n awaits = false;\n // eslint-disable-next-line prefer-rest-params\n prevRes = fn.apply(this, arguments as unknown as any[]);\n }, timeout);\n }\n\n return prevRes;\n } as unknown as F;\n}\n","export interface Box {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function getMarginBox(elem: HTMLElement): Box {\n const bbox = elem.getBoundingClientRect();\n const computed = getComputedStyle(elem);\n\n return {\n top: bbox.top - parseFloat(computed.marginTop),\n right: bbox.right + parseFloat(computed.marginRight),\n bottom: bbox.bottom + parseFloat(computed.marginBottom),\n left: bbox.left - parseFloat(computed.marginLeft)\n };\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Container.module.css';\n\n import type { ContainerOrientation, DivContainerData } from '../../types/container';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { SeparatorStyle } from '../../utils/container';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { calcAdditionalPaddings, calcItemsGap } from '../../utils/container';\n import { hasGapSupport } from '../../utils/hasGapSupport';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import ContainerSeparators from './ContainerSeparators.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Outer from '../utilities/Outer.svelte';\n\n export let json: Partial<DivContainerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const HALIGN_MAP = {\n left: 'start',\n center: 'center',\n right: 'end'\n } as const;\n\n const VALIGN_MAP = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n } as const;\n\n const AVAIL_SEPARATOR_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"container\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let orientation: ContainerOrientation = 'vertical';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctContainerOrientation($jsonOrientation, orientation);\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: wrap = $jsonLayoutMode === 'wrap';\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.separator);\n let separator: SeparatorStyle | null = null;\n $: {\n if ($jsonSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n separator?.style || null\n );\n\n if (style) {\n separator = {\n show_at_start: Boolean($jsonSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonSeparator.show_at_end ?? false),\n show_between: Boolean($jsonSeparator.show_between ?? true),\n style\n };\n } else {\n separator = null;\n }\n } else {\n separator = null;\n }\n }\n\n $: jsonLineSeparator = rootCtx.getDerivedFromVars(json.line_separator);\n let lineSeparator: SeparatorStyle | null = null;\n $: {\n if ($jsonLineSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonLineSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n lineSeparator?.style || null\n );\n\n if (style) {\n lineSeparator = {\n show_at_start: Boolean($jsonLineSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonLineSeparator.show_at_end ?? false),\n show_between: Boolean($jsonLineSeparator.show_between ?? true),\n style\n };\n } else {\n lineSeparator = null;\n }\n } else {\n lineSeparator = null;\n }\n }\n\n $: additionalPaddings = (separator || lineSeparator) ?\n calcAdditionalPaddings(orientation, separator, lineSeparator) :\n null;\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspect: number | undefined = undefined;\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspect = newRatio;\n } else {\n aspect = undefined;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n\n let childLayoutParams: LayoutParams = {};\n $: {\n let newChildLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n if (orientation === 'overlap') {\n newChildLayoutParams.overlapParent = true;\n }\n if (orientation !== 'horizontal') {\n newChildLayoutParams.parentHAlign = HALIGN_MAP[contentHAlign];\n if (\n !$jsonHeight ||\n $jsonHeight.type === 'wrap_content' ||\n $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n ) {\n newChildLayoutParams.parentVerticalWrapContent = true;\n }\n }\n if (orientation !== 'vertical') {\n newChildLayoutParams.parentVAlign = VALIGN_MAP[contentVAlign];\n if (\n $jsonWidth?.type === 'wrap_content' ||\n $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n ) {\n newChildLayoutParams.parentHorizontalWrapContent = true;\n }\n }\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentContainerOrientation = 'horizontal';\n }\n if (orientation === 'vertical') {\n newChildLayoutParams.parentContainerOrientation = 'vertical';\n }\n if (wrap) {\n newChildLayoutParams.parentContainerWrap = true;\n }\n\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: mods = {\n orientation,\n valign: contentVAlign,\n halign: contentHAlign,\n wrap\n };\n\n $: style = {\n gap: (separator || lineSeparator) ?\n calcItemsGap(orientation, separator, lineSeparator) :\n undefined,\n 'aspect-ratio': aspect\n };\n</script>\n\n{#if !hasItemsError}\n <Outer\n cls={genClassName('container', css, mods)}\n {style}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n {additionalPaddings}\n >\n {#each items as item}\n <Unknown layoutParams={childLayoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n\n {#if separator || lineSeparator}\n <ContainerSeparators\n {separator}\n {lineSeparator}\n {orientation}\n />\n {/if}\n </Outer>\n{/if}\n","import type { ContainerOrientation } from '../types/container';\n\nexport function correctContainerOrientation(\n orientation: string | undefined,\n defaultVal: ContainerOrientation\n): ContainerOrientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal' ||\n orientation === 'overlap'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"divkit-a30bb\",\"separator_orientation_horizontal\":\"divkit-f529e\",\"separator_orientation_vertical\":\"divkit-e9e27\",\"separator__inner\":\"divkit-db7d8\"};","import type { Orientation } from '../types/orientation';\n\nexport function correctGeneralOrientation(\n orientation: string | undefined,\n defaultVal: Orientation\n): Orientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Separator.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivSeparatorData } from '../../types/separator';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Orientation } from '../../types/orientation';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivSeparatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonDelimiterStyle = rootCtx.getDerivedFromVars(json.delimiter_style);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonDelimiterStyle?.orientation, orientation);\n }\n\n // Avoid transparent separator creation\n $: hasContent = !(\n $jsonDelimiterStyle?.color &&\n (\n $jsonDelimiterStyle.color === 'transparent' ||\n (\n $jsonDelimiterStyle.color.length === 9 &&\n $jsonDelimiterStyle.color.indexOf('#00') === 0\n )\n )\n );\n\n // let background = correctColor('#14000000');\n let background = 'rgba(0,0,0,0.08)';\n $: {\n background = correctColor($jsonDelimiterStyle?.color, 1, background);\n }\n\n $: width = orientation === 'horizontal' ? '100%' : pxToEm(1);\n $: height = orientation === 'horizontal' ? pxToEm(1) : '100%';\n\n $: style = {\n background,\n width,\n height\n };\n\n $: mods = {\n orientation\n };\n</script>\n\n<Outer\n cls={genClassName('separator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n {#if hasContent}\n <span class={css.separator__inner} style={makeStyle(style)}></span>\n {/if}\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"divkit-a448f\",\"image_is-width-content\":\"divkit-fe14a\",\"image_is-height-content\":\"divkit-f4d92\",\"image__image\":\"divkit-ce046\",\"image_error\":\"divkit-f10d9\",\"image__aspect-wrapper\":\"divkit-dc808\",\"image_aspect\":\"divkit-ae784\",\"image_loaded\":\"divkit-cf4e0\",\"divkit-image-appearance\":\"divkit-e555f\",\"image_before-appearance\":\"divkit-ffe8a\"};","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Image.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivImageData, TintMode } from '../../types/image';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { htmlFilter } from '../../utils/htmlFilter';\n import { imageSize } from '../../utils/background';\n import { correctImagePosition } from '../../utils/correctImagePosition';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctColor } from '../../utils/correctColor';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctTintMode } from '../../utils/correctTintMode';\n import { getCssFilter } from '../../utils/filters';\n\n export let json: Partial<DivImageData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n // const DEFAULT_PLACEHOLDER_COLOR = correctColor('#14000000');\n const DEFAULT_PLACEHOLDER_COLOR = 'rgba(0,0,0,0.08)';\n\n const STATE_LOADING = 0;\n const STATE_LOADED = 1;\n const STATE_ERROR = 2;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonImageUrl = rootCtx.getDerivedFromVars(json.image_url);\n\n $: jsonGifUrl = rootCtx.getDerivedFromVars(json.gif_url);\n $: imageUrl = $jsonImageUrl || $jsonGifUrl;\n\n let state = STATE_LOADING;\n let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n function updateImageUrl(_url: string | undefined): void {\n state = STATE_LOADING;\n }\n $: updateImageUrl(imageUrl);\n\n let hasError = false;\n $: {\n if (!imageUrl) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"image_url\" for \"image\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n $: jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let backgroundImage = '';\n $: {\n const preview = $jsonPreview;\n\n if ((state === STATE_LOADING || state === STATE_ERROR) && preview) {\n if (preview.startsWith('data:')) {\n backgroundImage = `url(\"${htmlFilter(preview)}\")`;\n } else {\n backgroundImage = `url(\"data:image/jpg;base64,${htmlFilter(preview)}\")`;\n }\n } else {\n backgroundImage = '';\n }\n }\n\n $: jsonPlaceholderColor = rootCtx.getDerivedFromVars(json.placeholder_color);\n function updatePlaceholderColor(state: number, color: string | undefined): void {\n if (state === STATE_LOADING || state === STATE_ERROR) {\n placeholderColor = correctColor(color, 1, placeholderColor);\n } else {\n placeholderColor = '';\n }\n }\n $: updatePlaceholderColor(state, $jsonPlaceholderColor);\n\n $: jsonScale = rootCtx.getDerivedFromVars(json.scale);\n // Exactly \"none\", \"scale-down\" would not match android\n let scale = 'none';\n $: {\n scale = imageSize($jsonScale) || scale;\n }\n\n $: jsonPosition = rootCtx.getDerivedFromVars({\n content_alignment_horizontal: json.content_alignment_horizontal,\n content_alignment_vertical: json.content_alignment_vertical\n });\n let position = '50% 50%';\n function updatePosition(pos: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n }): void {\n position = correctImagePosition(pos, position);\n }\n $: updatePosition($jsonPosition);\n\n $: jsonA11y = rootCtx.getDerivedFromVars(json.accessibility);\n $: alt = $jsonA11y?.description || '';\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspectPaddingBottom = '0';\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n } else {\n aspectPaddingBottom = '0';\n }\n }\n\n $: jsonTintColor = rootCtx.getDerivedFromVars(json.tint_color);\n let tintColor: string | undefined = undefined;\n $: jsonTintMode = rootCtx.getDerivedFromVars(json.tint_mode);\n let tintMode: TintMode = 'source_in';\n let svgFilterId = '';\n $: {\n const val = $jsonTintColor;\n const newTintColor = val ? correctColor(val) : undefined;\n const newTintMode = correctTintMode($jsonTintMode, tintMode);\n if (newTintColor !== tintColor || newTintMode !== tintMode) {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n svgFilterId = newTintColor ? rootCtx.addSvgFilter(newTintColor, newTintMode) : '';\n tintColor = newTintColor;\n tintMode = newTintMode;\n }\n }\n\n $: jsonAppearanceAnimation = rootCtx.getDerivedFromVars(json.appearance_animation);\n let animationInterpolator = '';\n let animationFadeStart = 0;\n let animationDelay = 0;\n let animationDuration = 0;\n\n $: if ($jsonAppearanceAnimation && $jsonAppearanceAnimation.type === 'fade') {\n const animation = $jsonAppearanceAnimation;\n\n animationInterpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n animationDuration = correctNonNegativeNumber(animation.duration, 300);\n animationDelay = correctNonNegativeNumber(animation.start_delay, 0);\n animationFadeStart = correctNonNegativeNumber(animation.alpha, 0);\n }\n\n $: jsonFilters = rootCtx.getDerivedFromVars(json.filters);\n let filter = '';\n let filterClipPath = '';\n $: {\n let newFilter = '';\n let newClipPath = '';\n if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n newFilter = getCssFilter($jsonFilters, rootCtx.logError);\n }\n if (newFilter) {\n newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n }\n filter = newFilter;\n filterClipPath = newClipPath;\n }\n\n $: mods = {\n aspect: aspectPaddingBottom !== '0',\n 'is-width-content': isWidthContent,\n 'is-height-content': isHeightContent,\n loaded: state === STATE_LOADED,\n 'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING\n };\n\n $: style = {\n // Image preview shows, if loading of original image is failed\n 'background-image': backgroundImage,\n 'background-color': backgroundImage ? undefined : placeholderColor,\n 'background-size': scale,\n 'clip-path': filterClipPath || undefined,\n 'object-fit': scale,\n 'object-position': position,\n filter: [\n state === STATE_LOADED && svgFilterId ? `url(#${svgFilterId})` : '',\n filter\n ].filter(Boolean).join(' '),\n '--divkit-appearance-interpolator': animationInterpolator || undefined,\n '--divkit-appearance-fade-start': animationInterpolator ? animationFadeStart : undefined,\n '--divkit-appearance-delay': animationInterpolator ? `${animationDelay}ms` : undefined,\n '--divkit-appearance-duration': animationInterpolator ? `${animationDuration}ms` : undefined\n };\n\n function onLoad(): void {\n if (state === STATE_LOADING) {\n state = STATE_LOADED;\n }\n }\n\n function onError(): void {\n if (state === STATE_LOADING) {\n state = STATE_ERROR;\n }\n }\n\n onDestroy(() => {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n });\n\n // Recreate image on svg filter change for the Safari\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('image', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customDescription={true}\n >\n {#key svgFilterId}\n {#if mods.aspect}\n <span class={css['image__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n </span>\n {:else}\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n {/if}\n {/key}\n </Outer>\n{/if}\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport { imagePos } from './background';\n\nexport function correctImagePosition(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}, defaultVal: string): string {\n const halign = obj.content_alignment_horizontal;\n const valign = obj.content_alignment_vertical;\n\n if (\n halign && halign !== 'left' && halign !== 'center' && halign !== 'right' ||\n valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n ) {\n return defaultVal;\n }\n\n return imagePos(obj);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"divkit-d9080\",\"grid_halign_left\":\"divkit-f63b3\",\"grid_halign_center\":\"divkit-a14a6\",\"grid_halign_right\":\"divkit-b0717\",\"grid_valign_top\":\"divkit-fbca8\",\"grid_valign_center\":\"divkit-d4310\",\"grid_valign_bottom\":\"divkit-e4205\"};","import { pxToEm } from './pxToEm';\n\n/**\n * Filter weights, that would result in < 1fr\n * @param weight\n */\nfunction isSpannedWeight(weight: number): boolean {\n return weight > 0 && weight < 1;\n}\n\nfunction formatWeight(weight: number): string {\n return String(Math.ceil(weight * 1000) / 1000);\n}\n\nexport function gridCalcTemplates(weights: number[], minSizes: number[], length: number): string {\n // If result weight is lesser than 1, multiply all weights so all of them would exceed 1\n if (weights.some(isSpannedWeight)) {\n const multiply = Math.max(...weights.filter(isSpannedWeight).map(weight => 1 / weight));\n weights = weights.map(weight => weight * multiply);\n }\n\n const allTracksHasWeight = weights.every(Boolean);\n let minSize = 0;\n let totalWeight = 0;\n const template: string[] = [];\n\n if (allTracksHasWeight) {\n totalWeight = weights.reduce((acc, item) => {\n return acc + item;\n }, 0);\n\n for (let i = 0; i < length; ++i) {\n if (!minSizes[i]) {\n continue;\n }\n\n const minTrackSize = (minSizes[i] / weights[i]) * totalWeight;\n\n if (minTrackSize > minSize) {\n minSize = minTrackSize;\n }\n }\n }\n\n for (let i = 0; i < length; ++i) {\n if (minSize) {\n template[i] =\n `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n } else if (weights[i]) {\n template[i] = `${formatWeight(weights[i])}fr`;\n } else {\n template[i] = 'auto';\n }\n }\n\n return template.join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Grid.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivGridData } from '../../types/grid';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Size } from '../../types/sizes';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n\n export let json: Partial<DivGridData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"grid\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n\n let columnCount = 1;\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n $: {\n columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n interface ChildInfo {\n rowSpan: number | undefined;\n columnSpan: number | undefined;\n width: MaybeMissing<Size> | undefined;\n height: MaybeMissing<Size> | undefined;\n }\n let childStore: Readable<ChildInfo[]>;\n $: {\n let children: Readable<ChildInfo>[] = [];\n\n items.forEach(item => {\n children.push(\n rootCtx.getDerivedFromVars({\n rowSpan: item.json.row_span,\n columnSpan: item.json.column_span,\n width: item.json.width,\n height: item.json.height\n })\n );\n });\n\n // Create a new array every time so that it is not equal to the previous one\n childStore = derived(children, val => [...val]);\n }\n\n let resultItems: {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n layoutParams: LayoutParams;\n }[];\n let columnsWeight: number[] = [];\n let rowsWeight: number[] = [];\n let columnsMinWidth: number[] = [];\n let rowsMinHeight: number[] = [];\n let rowCount = 0;\n let hasLayoutError = false;\n $: {\n const used: Record<string, boolean> = {};\n let x = 0;\n let y = 0;\n columnsWeight = [];\n rowsWeight = [];\n columnsMinWidth = [];\n rowsMinHeight = [];\n hasLayoutError = false;\n\n resultItems = items.map((item, index) => {\n const childInfo = $childStore[index];\n const colSpan = Number(childInfo.columnSpan) || 1;\n const rowSpan = Number(childInfo.rowSpan) || 1;\n\n const gridArea = {\n x,\n y,\n colSpan,\n rowSpan\n };\n\n const widthWeight =\n childInfo.width?.type === 'match_parent' ?\n Number(childInfo.width.weight || 1) / colSpan :\n 0;\n const heightWeight =\n childInfo.height?.type === 'match_parent' ?\n Number(childInfo.height.weight || 1) / rowSpan :\n 0;\n const widthMin =\n colSpan === 1 && childInfo.width?.type === 'fixed' && childInfo.width.value ?\n Number(childInfo.width.value) / colSpan :\n 0;\n const heightMin =\n rowSpan === 1 && childInfo.height?.type === 'fixed' && childInfo.height.value ?\n Number(childInfo.height.value) / rowSpan :\n 0;\n\n for (let i = x; i < x + colSpan; ++i) {\n for (let j = y; j < y + rowSpan; ++j) {\n if (used[i + '_' + j]) {\n hasLayoutError = true;\n continue;\n }\n\n used[i + '_' + j] = true;\n\n if (!columnsWeight[i] || columnsWeight[i] < widthWeight) {\n columnsWeight[i] = widthWeight;\n }\n\n if (!rowsWeight[j] || rowsWeight[j] < heightWeight) {\n rowsWeight[j] = heightWeight;\n }\n\n if (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin) {\n columnsMinWidth[i] = widthMin;\n }\n\n if (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin) {\n rowsMinHeight[j] = heightMin;\n }\n }\n }\n\n do {\n ++x;\n\n if (x >= columnCount) {\n x = 0;\n ++y;\n }\n } while (used[x + '_' + y]);\n\n return {\n ...item,\n layoutParams: {\n gridArea,\n fakeElement: layoutParams?.fakeElement || false\n }\n };\n });\n\n if (x !== 0) {\n hasLayoutError = true;\n }\n\n if (hasLayoutError) {\n rootCtx.logError(wrapError(new Error('Mismatching \"grid\" rows/columns')));\n }\n\n rowCount = y;\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: mods = {\n valign: contentVAlign,\n halign: contentHAlign\n };\n\n $: style = {\n 'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnCount),\n 'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowCount)\n };\n\n $: hasError = hasItemsError || hasLayoutError;\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('grid', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {style}\n {layoutParams}\n >\n {#each resultItems as item}\n <Unknown layoutParams={item.layoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"gallery\":\"divkit-cbb0f\",\"gallery_orientation_horizontal\":\"divkit-c9be7\",\"gallery_orientation_vertical\":\"divkit-a72d5\",\"gallery__scroller\":\"divkit-a4e39\",\"gallery_scroll-snap\":\"divkit-f606e\",\"gallery__items-grid\":\"divkit-eb4a5\",\"gallery__items\":\"divkit-af276\",\"gallery__arrow\":\"divkit-b72d7\",\"gallery__arrow-icon\":\"divkit-d100d\",\"gallery__arrow_left\":\"divkit-a0a5d\",\"gallery__arrow_right\":\"divkit-f0f59\",\"gallery__arrow-icon-path\":\"divkit-b4173\"};","export function joinTemplateSizes(sizes: string[]): string {\n const result: string[] = [];\n let temp = sizes[0];\n let counter = 1;\n\n for (let i = 1; i <= sizes.length; i++) {\n if (sizes[i] !== temp) {\n result.push(counter > 1 ? `repeat(${counter}, ${temp})` : temp);\n temp = sizes[i];\n counter = 1;\n } else {\n counter++;\n }\n }\n\n return result.join(' ');\n}\n","type SimpleFunction = (...args: any[]) => any;\ntype DebouncedFunction<F extends SimpleFunction> = (...args: Parameters<F>) => void;\n\nexport function debounce<F extends SimpleFunction>(fn: F, timeout: number): DebouncedFunction<F> {\n let timer: ReturnType<typeof setTimeout> | null;\n\n return function(this: ThisParameterType<F>, ...args: Parameters<F>) {\n if (timer !== null) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, timeout);\n };\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Gallery.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Align, LayoutParams } from '../../types/layoutParams';\n import type { DivGalleryData } from '../../types/gallery';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n import type { Orientation } from '../../types/orientation';\n import type { MaybeMissing } from '../../expressions/json';\n import type { Size } from '../../types/sizes';\n import type { Style } from '../../types/general';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctAlignment } from '../../utils/correctAlignment';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { joinTemplateSizes } from '../../utils/joinTemplateSizes';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivGalleryData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let scroller: HTMLElement;\n let galleryItemsWrappers: HTMLElement[] = [];\n let hasScrollLeft = false;\n let hasScrollRight = false;\n\n let resizeObserver: ResizeObserver | null = null;\n let itemsGridElem: HTMLElement;\n let mounted = false;\n\n const leftClass = rootCtx.getCustomization('galleryLeftClass');\n const rightClass = rootCtx.getCustomization('galleryRightClass');\n\n let hasError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"gallery\"')));\n } else {\n hasError = false;\n }\n }\n\n const isDesktop = rootCtx.isDesktop;\n\n interface Item {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n }\n\n $: items = (!hasError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n $: if (shouldCheckArrows) {\n if (typeof ResizeObserver !== 'undefined') {\n // Gallery can contain a dynamic content (e.g. loading images with auto-size)\n resizeObserver = new ResizeObserver(() => {\n updateArrowsVisibilityDebounced();\n });\n resizeObserver.observe(itemsGridElem);\n }\n } else if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n let columns = 1;\n $: {\n columns = correctPositiveNumber($jsonColumnCount, columns);\n }\n\n function rebuildItemsGrid(items: Item[], columns: number): Item[][] {\n let column = 0;\n let res: Item[][] = [];\n\n for (let i = 0; i < items.length; ++i) {\n if (!res[column]) {\n res[column] = [];\n }\n res[column].push(items[i]);\n if (++column >= columns) {\n column = 0;\n }\n }\n\n return res;\n }\n $: itemsGrid = rebuildItemsGrid(items, columns);\n\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let align: Align = 'start';\n $: jsonCrossContentAlignment = rootCtx.getDerivedFromVars(json.cross_content_alignment);\n $: {\n align = correctAlignment($jsonCrossContentAlignment, align);\n }\n\n let gridGap: string | undefined;\n let itemSpacing = 8;\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n gridGap = pxToEm(itemSpacing);\n }\n\n let crossGridGap: string | undefined;\n let crossSpacing;\n $: jsonCrossSpacing = rootCtx.getDerivedFromVars(json.cross_spacing);\n $: {\n crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n crossGridGap = pxToEm(crossSpacing);\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: gridTemplate = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n let templateSizes: string[] = [];\n\n let childStore: Readable<(MaybeMissing<Size> | undefined)[]>;\n $: {\n let children: Readable<MaybeMissing<Size> | undefined>[] = [];\n\n items.forEach(item => {\n const itemSize = orientation === 'horizontal' ? 'width' : 'height';\n children.push(rootCtx.getDerivedFromVars(item.json[itemSize]));\n });\n\n childStore = derived(children, val => val);\n }\n $: {\n templateSizes = [];\n if (columns > 1) {\n // TODO: think about match_parent in this task DIVKIT-307\n templateSizes.push('auto');\n } else {\n $childStore.forEach(childInfo => {\n if ((!childInfo && orientation === 'horizontal') || childInfo?.type === 'match_parent') {\n templateSizes.push('100%');\n } else {\n templateSizes.push('max-content');\n }\n });\n }\n }\n\n let scrollerStyle: Style = {};\n let scrollSnap = false;\n $: jsonScrollMode = rootCtx.getDerivedFromVars(json.scroll_mode);\n let childLayoutParams: LayoutParams = {};\n $: {\n const newScrollerStyle: Style = {};\n let newChildLayoutParams: LayoutParams = {};\n scrollSnap = false;\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentVAlign = align;\n } else {\n newChildLayoutParams.parentHAlign = align;\n }\n\n if ($jsonScrollMode === 'paging') {\n scrollSnap = true;\n newChildLayoutParams.scrollSnap = 'start';\n const scrollPadding = orientation === 'horizontal' ? 'scroll-padding-left' : 'scroll-padding-top';\n newScrollerStyle[scrollPadding] = pxToEm(itemSpacing / 2);\n }\n\n // todo multiple columns\n if (columns === 1) {\n newChildLayoutParams.parentLayoutOrientation = orientation;\n }\n\n scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridStyle = {\n padding,\n 'grid-gap': crossGridGap\n };\n\n $: columnStyle = {\n 'grid-gap': gridGap,\n [gridTemplate]: joinTemplateSizes(templateSizes)\n };\n\n $: mods = {\n orientation,\n 'scroll-snap': scrollSnap\n };\n\n $: jsonDefaultItem = rootCtx.getDerivedFromVars(json.default_item);\n let defaultItem = 0;\n $: {\n defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n }\n\n function updateArrowsVisibility(): void {\n if (!scroller) {\n return;\n }\n\n const scrollLeft = scroller.scrollLeft;\n const scrollWidth = scroller.scrollWidth;\n const containerWidth = scroller.offsetWidth;\n\n hasScrollLeft = scrollLeft > 2;\n hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n }\n\n const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n function scroll(type: 'left' | 'right'): void {\n scroller.scroll({\n left: scroller.scrollLeft + (scroller.offsetWidth * .75) * (type === 'right' ? 1 : -1),\n behavior: 'smooth'\n });\n }\n\n function getItems(): HTMLElement[] {\n let res: HTMLElement[] = [];\n let maxLen = galleryItemsWrappers[0].children.length;\n\n for (let j = 0; j < maxLen; ++j) {\n for (let i = 0; i < columns; ++i) {\n const elem = galleryItemsWrappers[i].children[j] as HTMLElement;\n if (elem) {\n res.push(elem);\n }\n }\n }\n\n return res;\n }\n\n function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n scroller.scroll({\n [scrollDirection]: Math.max(0, galleryElements[index][elementOffset] - itemSpacing / 2),\n behavior\n });\n }\n\n function checkIsIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.right > scroller.left && scroller.right > item.left;\n }\n\n return item.bottom > scroller.top && scroller.bottom > item.top;\n }\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(action: 'prev' | 'next'): number {\n const galleryElements = getItems();\n const scrollerRect = scroller.getBoundingClientRect();\n\n // Try to find the most left fully visible element\n const firstFullyVisibleElement = galleryElements.findIndex(el =>\n checkIsFullyIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n // If there is no fully visible elements, it means that:\n // - only one element is partly visible and its width bigger than gallery width\n // - two elements are partly visible\n const visibleElementsMap = galleryElements.map(el =>\n checkIsIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n const firstVisibleElement = visibleElementsMap.findIndex(Boolean);\n\n if (firstVisibleElement !== -1) {\n // If two elements are partly visible, we should scroll to current element on \"set_item_previous\" action\n const isPreviousEqualCurrent = action === 'prev' && visibleElementsMap.filter(Boolean).length === 2;\n return isPreviousEqualCurrent ? firstVisibleElement + 1 : firstVisibleElement;\n }\n\n return action === 'prev' ? 1 : galleryElements.length - 2;\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n const galleryElements = getItems();\n if (item < 0 || item > galleryElements.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToGalleryItem(galleryElements, item);\n },\n setPreviousItem(overflow: Overflow) {\n const currentElementIndex = calculateCurrentElementIndex('prev');\n const galleryElements = getItems();\n let previousItem = currentElementIndex - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? galleryElements.length - 1 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, previousItem);\n },\n setNextItem(overflow: Overflow) {\n // Go to scroller start, if we reached right/bottom edge of scroller\n const isEdgeScroll = orientation === 'horizontal' ? (\n scroller.scrollLeft + scroller.offsetWidth === scroller.scrollWidth\n ) : (\n scroller.scrollTop + scroller.offsetHeight === scroller.scrollHeight\n );\n const galleryElements = getItems();\n if (isEdgeScroll && overflow === 'ring') {\n scrollToGalleryItem(galleryElements, 0);\n return;\n }\n\n const currentElementIndex = calculateCurrentElementIndex('next');\n let nextItem = currentElementIndex + 1;\n\n if (nextItem > galleryElements.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n if (!hasError) {\n updateArrowsVisibility();\n\n if (defaultItem) {\n const galleryElements = getItems();\n scrollToGalleryItem(galleryElements, defaultItem, 'auto');\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('gallery', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n customActions={'gallery'}\n >\n <div\n class=\"{css.gallery__scroller} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={scroller}\n on:scroll={shouldCheckArrows ? updateArrowsVisibility : null}\n style={makeStyle(scrollerStyle)}\n >\n <div\n bind:this={itemsGridElem}\n class={css['gallery__items-grid']}\n style={makeStyle(gridStyle)}\n >\n {#each itemsGrid as itemsRow, rowIndex}\n <div\n class={css.gallery__items}\n style={makeStyle(columnStyle)}\n bind:this={galleryItemsWrappers[rowIndex]}\n >\n {#each itemsRow as item}\n <Unknown\n layoutParams={childLayoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n </div>\n {/each}\n </div>\n </div>\n {#if orientation === 'horizontal'}\n {#if hasScrollLeft && shouldCheckArrows}\n <div class=\"{leftClass || `${css.gallery__arrow} ${css.gallery__arrow_left}`}\" on:click={() => scroll('left')}>\n {#if !leftClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {#if hasScrollRight && shouldCheckArrows}\n <div class=\"{rightClass || `${css.gallery__arrow} ${css.gallery__arrow_right}`}\" on:click={() => scroll('right')}>\n {#if !rightClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {/if}\n </Outer>\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n orientation: string | undefined,\n defaultVal: Align\n): Align {\n if (\n orientation === 'start' ||\n orientation === 'center' ||\n orientation === 'end'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tabs\":\"divkit-e0df5\",\"tabs__list\":\"divkit-ea19b\",\"tabs__item\":\"divkit-c25c7\",\"tabs__item_selected\":\"divkit-d560a\",\"tabs__item_actionable\":\"divkit-dfda0\",\"tabs__panels\":\"divkit-f5dc0\",\"tabs__swiper\":\"divkit-eb42c\",\"tabs__swiper_animated\":\"divkit-b9f18\",\"tabs__swiper_inited\":\"divkit-fa574\",\"tabs__panel\":\"divkit-cc9fb\",\"tabs__panel_visible\":\"divkit-e7306\",\"tabs__separator\":\"divkit-b85bf\"};","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n\n import css from './Tabs.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Mods } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivTabsData } from '../../types/tabs';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { SwitchElements, Overflow } from '../../types/switch-elements';\n import type { TabItem } from '../../types/tabs';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Actionable from '../utilities/Actionable.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { makeStyle } from '../../utils/makeStyle';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { pxToEm } from '../../utils/pxToEm';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctBorderRadius } from '../../utils/correctBorderRadius';\n import { correctColor } from '../../utils/correctColor';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n\n export let json: Partial<DivTabsData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('tabs');\n\n let hasError = false;\n $: items = json.items || [];\n $: {\n if (!items?.length || !Array.isArray(items)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n let childLayoutParams: LayoutParams = {};\n $: {\n let newLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newLayoutParams.fakeElement = true;\n }\n if ($jsonWidth?.type === 'wrap_content') {\n newLayoutParams.parentHorizontalWrapContent = true;\n }\n if (!$jsonHeight || $jsonHeight.type === 'wrap_content') {\n newLayoutParams.parentVerticalWrapContent = true;\n }\n\n childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n }\n\n let tabsElem: HTMLElement;\n let panelsWrapper: HTMLElement;\n let swiperElem: HTMLElement;\n let mods: Mods = {};\n const jsonSelectedTab = rootCtx.getJsonWithVars(json.selected_tab);\n let selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n $: {\n if (!hasError && (selected < 0 || selected >= items.length)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab,\n length: items.length\n }\n }));\n selected = selected < 0 ? 0 : items.length - 1;\n }\n }\n\n $: jsonTabStyle = rootCtx.getDerivedFromVars(json.tab_title_style);\n $: tabStyle = $jsonTabStyle || {};\n\n let tabFontSize = 12;\n $: {\n tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n }\n\n let tabPaddings = '';\n\n $: {\n if (tabStyle.font_size || tabStyle.paddings) {\n const paddings: EdgeInsets = tabStyle.paddings || {\n top: 6,\n right: 8,\n bottom: 6,\n left: 8\n };\n\n const adjustedPaddings: EdgeInsets = {\n top: (Number(paddings.top) || 0) / tabFontSize * 10,\n right: (Number(paddings.right) || 0) / tabFontSize * 10,\n bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n left: (Number(paddings.left) || 0) / tabFontSize * 10\n };\n\n tabPaddings = correctEdgeInserts(adjustedPaddings, tabPaddings);\n }\n }\n\n let tabLineHeight = '';\n $: {\n const lineHeight = tabStyle.line_height;\n if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n }\n }\n\n let tabLetterSpacing = '';\n $: {\n const letterSpacing = tabStyle.letter_spacing;\n if (letterSpacing !== undefined && isNonNegativeNumber(letterSpacing)) {\n tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n }\n }\n\n let tabBorderRadius = '';\n $: {\n if (tabStyle.corner_radius || tabStyle.corners_radius || tabStyle.font_size) {\n const defaultRadius = tabStyle.corner_radius ?? 1000;\n\n if (tabStyle.corners_radius) {\n tabBorderRadius = correctBorderRadius(tabStyle.corners_radius, defaultRadius, tabFontSize, tabBorderRadius);\n } else if (isNonNegativeNumber(defaultRadius)) {\n tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n }\n }\n }\n\n let tabActiveFontWeight: number | undefined = undefined;\n $: {\n tabActiveFontWeight = correctFontWeight(tabStyle.active_font_weight || tabStyle.font_weight, tabActiveFontWeight);\n }\n\n let tabInactiveFontWeight: number | undefined = undefined;\n $: {\n tabInactiveFontWeight = correctFontWeight(\n tabStyle.inactive_font_weight || tabStyle.font_weight,\n tabInactiveFontWeight\n );\n }\n\n let tabActiveTextColor = '';\n $: {\n tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n }\n\n let tabInactiveTextColor = '';\n $: {\n tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n }\n\n let tabActiveBackground = '';\n $: {\n tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n }\n\n let tabInactiveBackground = '';\n $: {\n tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n }\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.has_separator);\n $: jsonSeparatorColor = rootCtx.getDerivedFromVars(json.separator_color);\n $: jsonSeparatorPaddings = rootCtx.getDerivedFromVars(json.separator_paddings);\n let separatorBackground = '';\n let separatorMargins = '';\n $: {\n if ($jsonSeparator) {\n if ($jsonSeparatorColor) {\n separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n }\n if ($jsonSeparatorPaddings) {\n separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, separatorMargins);\n }\n }\n }\n $: separatorStyle = {\n background: separatorBackground,\n margin: separatorMargins\n };\n\n $: jsonSwipeEnabled = rootCtx.getDerivedFromVars(json.switch_tabs_by_content_swipe_enabled);\n $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n true :\n Boolean($jsonSwipeEnabled);\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n let isSwipeInitialized = false;\n let isAnimated = false;\n let previousSelected = selected;\n let showedPanels: boolean[] = [];\n let visiblePanels: boolean[] = [];\n function updateItems(_items: TabItem[]): void {\n if (hasError) {\n return;\n }\n\n showedPanels = items.map((_, i) => i === selected);\n visiblePanels = items.map((_, i) => i === selected);\n }\n $: updateItems(items);\n\n async function setSelected(val: number, focus = false): Promise<void> {\n previousSelected = selected;\n selected = val;\n initTabsSwipe();\n changeTab();\n\n if (focus) {\n await tick();\n\n const selectedTab = tabsElem.querySelector(`.${css.tabs__item_selected}`) as HTMLElement | null;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n }\n\n function moveSelected(shift: number, focus = false): void {\n const len = items?.length;\n if (!len) {\n return;\n }\n\n let newSelected = selected + shift;\n\n if (newSelected >= len) {\n newSelected = 0;\n } else if (newSelected < 0) {\n newSelected = len - 1;\n }\n\n setSelected(newSelected, focus);\n }\n\n function selectItem(_event: Event, index: number): boolean {\n if (selected !== index) {\n setSelected(index);\n\n return false;\n }\n\n return true;\n }\n\n function changeTab(): void {\n isAnimated = true;\n updateTransform(-selected * 100);\n updateShowedPanels();\n updateWrapperHeight();\n hideNonVisiblePanels();\n currentTransform = -selected * panelsWrapper.clientWidth;\n }\n\n async function updateTransform(transform: number): Promise<void> {\n await tick();\n swiperElem.style.transform = `translate3d(${transform}%,0,0)`;\n }\n\n function updateShowedPanels(around = false): void {\n const start = around ?\n Math.max(0, selected - 1) :\n Math.min(selected, previousSelected);\n const end = around ?\n Math.min(items.length - 1, selected + 1) :\n Math.max(selected, previousSelected);\n\n showedPanels = showedPanels.map((isShowed, index) => isShowed || index >= start && index <= end);\n visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n }\n\n async function updateWrapperHeight(): Promise<void> {\n await tick();\n const activePanel = document.getElementById(`${instId}-panel-${selected}`);\n\n if (activePanel) {\n panelsWrapper.style.height = pxToEm(activePanel.offsetHeight);\n }\n }\n\n let hidePanelsTimeout: number | null = null;\n\n function hideNonVisiblePanels(): void {\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n hidePanelsTimeout = window.setTimeout(() => {\n visiblePanels = items.map((_, i) => i === selected);\n }, 400);\n }\n\n function onTabKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n if (!items) {\n return;\n }\n\n if (event.which === ARROW_LEFT) {\n moveSelected(-1, true);\n } else if (event.which === ARROW_RIGHT) {\n moveSelected(1, true);\n } else if (event.which === HOME) {\n setSelected(0, true);\n } else if (event.which === END) {\n setSelected(items.length - 1, true);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n // todo desktop arrows\n\n function initTabsSwipe(): void {\n if (isSwipeInitialized) {\n return;\n }\n\n isSwipeInitialized = true;\n panelsWrapper.style.height = pxToEm(panelsWrapper.clientHeight);\n swiperElem.style.transform = `translate3d(${-previousSelected * 100}%,0,0)`;\n }\n\n let startCoords: Coords | null = null;\n let moveCoords: Coords | null = null;\n let swipeStartTime: number;\n let isSwipeStarted = false;\n let isSwipeCanceled = false;\n let startTransform: number;\n let currentTransform: number;\n\n function onTouchStart(event: TouchEvent): void {\n const target = event.target as HTMLElement | null;\n const restrictClosest = target?.closest?.(`.${rootCss['root_restrict-scroll']}`);\n\n if (\n items.length < 2 ||\n event.touches.length > 1 ||\n (restrictClosest && restrictClosest !== panelsWrapper)\n ) {\n return;\n }\n\n isSwipeStarted = false;\n isSwipeCanceled = false;\n startCoords = getTouchCoords(event);\n moveCoords = null;\n swipeStartTime = Date.now();\n startTransform = currentTransform || -selected * panelsWrapper.clientWidth;\n isAnimated = false;\n\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n }\n\n function onTouchMove(event: TouchEvent): void {\n const coords = getTouchCoords(event);\n if (\n !startCoords ||\n moveCoords && moveCoords.x === coords.x && moveCoords.y === coords.y\n ) {\n return;\n }\n\n moveCoords = coords;\n const panelsWrapperWidth = panelsWrapper.clientWidth;\n if (isSwipeStarted) {\n currentTransform = coords.x - startCoords.x + startTransform;\n\n // Slowing down scroll on edges\n const scrollWidth = panelsWrapperWidth * items.length;\n if (currentTransform > 0) {\n currentTransform = currentTransform * panelsWrapperWidth / (currentTransform + panelsWrapperWidth * 3);\n } else if (-currentTransform + panelsWrapperWidth > scrollWidth) {\n let space = -currentTransform + panelsWrapperWidth - scrollWidth;\n space = space * panelsWrapperWidth / (space + panelsWrapperWidth * 3);\n currentTransform = panelsWrapperWidth - scrollWidth - space;\n }\n\n updateTransform(currentTransform * 100 / panelsWrapperWidth);\n } else if (Math.abs(coords.y - startCoords.y) > 10) {\n // Swipe is not started, so we cancel it because of vertical scroll\n isSwipeCanceled = true;\n } else if (!isSwipeCanceled && Math.abs(coords.x - startCoords.x) > 8) {\n initTabsSwipe();\n isSwipeStarted = true;\n startCoords = coords;\n updateTransform(-selected * 100);\n updateShowedPanels(true);\n }\n\n if (isSwipeStarted && event.cancelable) {\n event.preventDefault();\n }\n }\n\n function onTouchEnd(): void {\n isSwipeCanceled = false;\n startCoords = null;\n let newSelected = selected;\n if (!isSwipeStarted) {\n return;\n }\n isSwipeStarted = false;\n\n // 512px limit for big screens\n const panelsWrapperWidth = Math.min(512, panelsWrapper.clientWidth);\n const swipeDist = Math.abs(startTransform - currentTransform);\n const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n newSelected += (startTransform > currentTransform) ? 1 : -1;\n }\n\n if (newSelected >= items.length) {\n newSelected = items.length - 1;\n } else if (newSelected < 0) {\n newSelected = 0;\n }\n\n if (newSelected === selected) {\n // Scroll back to current tab\n currentTransform = -newSelected * panelsWrapperWidth;\n updateTransform(-newSelected * 100);\n hideNonVisiblePanels();\n } else {\n setSelected(newSelected);\n }\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n setSelected(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = selected - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : selected;\n }\n\n setSelected(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = selected + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : selected;\n }\n\n setSelected(nextItem);\n }\n });\n }\n\n onDestroy(() => {\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('tabs', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customActions={'tabs'}\n >\n <div\n bind:this={tabsElem}\n class=\"{css.tabs__list} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n role=\"tablist\"\n style:--divkit-tabs-font-size={pxToEm(tabFontSize)}\n style:--divkit-tabs-paddings={tabPaddings}\n style:--divkit-tabs-line-height={tabLineHeight}\n style:--divkit-tabs-letter-spacing={tabLetterSpacing}\n style:--divkit-tabs-active-font-weight={tabActiveFontWeight || ''}\n style:--divkit-tabs-inactive-font-weight={tabInactiveFontWeight || ''}\n style:--divkit-tabs-active-text-color={tabActiveTextColor}\n style:--divkit-tabs-inactive-text-color={tabInactiveTextColor}\n style:--divkit-tabs-active-background-color={tabActiveBackground}\n style:--divkit-tabs-inactive-background-color={tabInactiveBackground}\n style:--divkit-tabs-border-radius={tabBorderRadius}\n on:keydown={onTabKeydown}\n >\n {#each items as item, index}\n {@const isSelected = index === selected}\n\n <Actionable\n cls={genClassName('tabs__item', css, {\n selected: isSelected,\n actionable: Boolean(item.title_click_action)\n })}\n actions={item.title_click_action && !layoutParams?.fakeElement ? [item.title_click_action] : []}\n attrs={{\n id: `${instId}-tab-${index}`,\n 'aria-controls': `${instId}-panel-${index}`,\n role: 'tab',\n // eslint-disable-next-line no-nested-ternary\n tabindex: isSelected && !layoutParams?.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n 'aria-selected': isSelected ? 'true' : 'false'\n }}\n customAction={layoutParams?.fakeElement ? null : (event => selectItem(event, index))}\n >\n {item.title}\n </Actionable>\n {/each}\n </div>\n {#if $jsonSeparator}\n <div\n class={css.tabs__separator}\n style={makeStyle(separatorStyle)}\n ></div>\n {/if}\n <div\n class=\"{css.tabs__panels} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={panelsWrapper}\n >\n <div\n class={genClassName('tabs__swiper', css, {\n inited: isSwipeInitialized,\n animated: isAnimated\n })}\n bind:this={swiperElem}\n on:touchstart={isSwipeEnabled ? onTouchStart : undefined}\n on:touchmove={isSwipeEnabled ? onTouchMove : undefined}\n on:touchend={isSwipeEnabled ? onTouchEnd : undefined}\n on:touchcancel={isSwipeEnabled ? onTouchEnd : undefined}\n >\n {#each items as item, index}\n <div\n class={genClassName('tabs__panel', css, {\n visible: visiblePanels[index]\n })}\n role=\"tabpanel\"\n id=\"{instId}-panel-{index}\"\n aria-labelledby=\"{instId}-tab-{index}\"\n style=\"left: {index * 100}%\"\n >\n {#if showedPanels[index]}\n <Unknown div={item.div} {templateContext} layoutParams={childLayoutParams} />\n {/if}\n </div>\n {/each}\n </div>\n </div>\n </Outer>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { borderRadius } from './borderRadius';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadius(\n cornersRadius: CornersRadius,\n defaultRadius: number,\n fontSize: number,\n defaultVal: string\n): string {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return borderRadius(cornersRadius, defaultRadius, fontSize);\n}\n","export const ARROW_LEFT = 37;\nexport const ARROW_RIGHT = 39;\nexport const HOME = 36;\nexport const END = 35;\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","export function interpolateEasing(table: number[]) {\n return (t: number) => {\n if (t <= 0) {\n return 0;\n } else if (t >= 1) {\n return 1;\n }\n\n const x = t * table.length;\n const i = Math.floor(x);\n const p0 = table[i];\n const p1 = table[i + 1];\n const t2 = x - i;\n\n return p0 * t2 + p1 * (1 - t2);\n };\n}\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0021, 0.0045, 0.0071, 0.0100, 0.0131, 0.0165, 0.0202,\n 0.0242, 0.0284, 0.0330, 0.0378, 0.0429, 0.0483, 0.0540,\n 0.0601, 0.0664, 0.0731, 0.0800, 0.0872, 0.0948, 0.1026,\n 0.1108, 0.1192, 0.1279, 0.1369, 0.1461, 0.1556, 0.1653,\n 0.1753, 0.1855, 0.1958, 0.2064, 0.2171, 0.2279, 0.2389,\n 0.2500, 0.2612, 0.2725, 0.2839, 0.2952, 0.3067, 0.3181,\n 0.3295, 0.3410, 0.3524, 0.3637, 0.3750, 0.3863, 0.3974,\n 0.4085, 0.4195, 0.4304, 0.4412, 0.4519, 0.4624, 0.4729,\n 0.4832, 0.4934, 0.5034, 0.5133, 0.5231, 0.5327, 0.5422,\n 0.5516, 0.5608, 0.5699, 0.5788, 0.5876, 0.5963, 0.6048,\n 0.6132, 0.6214, 0.6295, 0.6375, 0.6453, 0.6530, 0.6606,\n 0.6680, 0.6754, 0.6825, 0.6896, 0.6965, 0.7034, 0.7101,\n 0.7166, 0.7231, 0.7295, 0.7357, 0.7418, 0.7479, 0.7538,\n 0.7596, 0.7653, 0.7709, 0.7764, 0.7818, 0.7871, 0.7923,\n 0.7974, 0.8024, 0.8073, 0.8122, 0.8169, 0.8216, 0.8261,\n 0.8306, 0.8350, 0.8394, 0.8436, 0.8478, 0.8518, 0.8558,\n 0.8598, 0.8636, 0.8674, 0.8711, 0.8747, 0.8783, 0.8818,\n 0.8852, 0.8886, 0.8919, 0.8951, 0.8983, 0.9014, 0.9044,\n 0.9074, 0.9103, 0.9131, 0.9159, 0.9187, 0.9213, 0.9240,\n 0.9265, 0.9290, 0.9315, 0.9339, 0.9362, 0.9385, 0.9408,\n 0.9430, 0.9451, 0.9472, 0.9492, 0.9512, 0.9532, 0.9551,\n 0.9569, 0.9587, 0.9605, 0.9622, 0.9638, 0.9655, 0.9670,\n 0.9686, 0.9701, 0.9715, 0.9729, 0.9743, 0.9756, 0.9769,\n 0.9782, 0.9794, 0.9805, 0.9817, 0.9828, 0.9838, 0.9848,\n 0.9858, 0.9868, 0.9877, 0.9886, 0.9894, 0.9902, 0.9910,\n 0.9917, 0.9924, 0.9931, 0.9937, 0.9943, 0.9949, 0.9954,\n 0.9959, 0.9964, 0.9969, 0.9973, 0.9977, 0.9980, 0.9983,\n 0.9986, 0.9989, 0.9991, 0.9993, 0.9995, 0.9997, 0.9998,\n 0.9999, 0.9999, 1.0000, 1.0000\n];\n\nexport const ease = interpolateEasing(table);\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0005, 0.0020, 0.0045, 0.0078, 0.0119, 0.0168,\n 0.0224, 0.0286, 0.0355, 0.0429, 0.0508, 0.0592, 0.0681,\n 0.0774, 0.0870, 0.0969, 0.1072, 0.1177, 0.1285, 0.1395,\n 0.1507, 0.1621, 0.1736, 0.1853, 0.1970, 0.2089, 0.2208,\n 0.2328, 0.2448, 0.2569, 0.2689, 0.2810, 0.2930, 0.3050,\n 0.3170, 0.3289, 0.3408, 0.3526, 0.3644, 0.3760, 0.3876,\n 0.3991, 0.4105, 0.4218, 0.4330, 0.4440, 0.4550, 0.4658,\n 0.4765, 0.4871, 0.4975, 0.5078, 0.5180, 0.5280, 0.5379,\n 0.5477, 0.5573, 0.5668, 0.5761, 0.5853, 0.5944, 0.6033,\n 0.6120, 0.6206, 0.6291, 0.6374, 0.6456, 0.6537, 0.6616,\n 0.6693, 0.6770, 0.6845, 0.6918, 0.6990, 0.7061, 0.7130,\n 0.7199, 0.7265, 0.7331, 0.7395, 0.7458, 0.7520, 0.7580,\n 0.7640, 0.7698, 0.7755, 0.7810, 0.7865, 0.7918, 0.7971,\n 0.8022, 0.8072, 0.8121, 0.8169, 0.8216, 0.8262, 0.8307,\n 0.8351, 0.8394, 0.8436, 0.8477, 0.8517, 0.8557, 0.8595,\n 0.8633, 0.8669, 0.8705, 0.8740, 0.8775, 0.8808, 0.8841,\n 0.8873, 0.8904, 0.8934, 0.8964, 0.8993, 0.9022, 0.9049,\n 0.9076, 0.9103, 0.9129, 0.9154, 0.9178, 0.9202, 0.9226,\n 0.9249, 0.9271, 0.9293, 0.9314, 0.9335, 0.9355, 0.9375,\n 0.9394, 0.9413, 0.9431, 0.9449, 0.9466, 0.9483, 0.9500,\n 0.9516, 0.9532, 0.9547, 0.9562, 0.9576, 0.9591, 0.9605,\n 0.9618, 0.9631, 0.9644, 0.9657, 0.9669, 0.9681, 0.9692,\n 0.9703, 0.9714, 0.9725, 0.9736, 0.9746, 0.9756, 0.9765,\n 0.9775, 0.9784, 0.9793, 0.9802, 0.9810, 0.9818, 0.9826,\n 0.9834, 0.9842, 0.9849, 0.9856, 0.9863, 0.9870, 0.9877,\n 0.9883, 0.9890, 0.9896, 0.9902, 0.9908, 0.9913, 0.9919,\n 0.9924, 0.9930, 0.9935, 0.9940, 0.9944, 0.9949, 0.9954,\n 0.9958, 0.9963, 0.9967, 0.9971, 0.9975, 0.9979, 0.9983,\n 0.9986, 0.9990, 0.9993, 0.9997, 1.0000\n];\n\nexport const spring = interpolateEasing(table);\n","import { linear, cubicIn, cubicOut, cubicInOut } from 'svelte/easing';\nimport { AnyTransition, Interpolation } from '../types/base';\nimport { ease } from './easings/ease';\nimport { spring } from './easings/spring';\n\nconst EASING: Record<Interpolation, (t: number) => number> = {\n linear,\n ease,\n ease_in: cubicIn,\n ease_out: cubicOut,\n ease_in_out: cubicInOut,\n spring\n};\n\nconst DEFAULT_DURATION = 200;\nconst DEFAULT_DELAY = 0;\nconst DEFAULT_ALPHA = 0;\nconst DEFAULT_SCALE = 0;\n\nexport function calcMaxDuration(transitions: AnyTransition[]): number {\n return Math.max(...transitions.map(\n it =>\n (Number(it.duration) || DEFAULT_DURATION) +\n (Number(it.start_delay) || DEFAULT_DELAY)\n ));\n}\n\nexport interface TransitionProps {\n transitions: AnyTransition[];\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n direction: 'in' | 'out';\n maxDuration: number;\n alpha?: number;\n}\n\nexport function inOutTransition(node: HTMLElement, {\n transitions,\n elementBbox,\n rootBbox,\n direction,\n maxDuration,\n alpha\n}: TransitionProps) {\n const startAlpha = alpha ?? 1;\n\n return {\n duration: maxDuration,\n css: (t: number) => {\n const tMs = t * maxDuration;\n\n const parts: {\n active?: boolean;\n opacity?: number;\n translate?: string;\n scale?: string;\n }[] = transitions.map(it => {\n const delay = Number(it.start_delay) || DEFAULT_DELAY;\n const duration = Number(it.duration) || DEFAULT_DURATION;\n const relative = Math.max(0, Math.min(1, (tMs - delay) / duration));\n const oriented = direction === 'in' ? 1 - relative : relative;\n\n const easing = EASING[it.interpolator || 'ease_in_out'] || cubicInOut;\n const eased = easing(oriented);\n\n if (it.type === 'fade') {\n if (eased >= 1) {\n return {\n active: false,\n opacity: 0\n };\n }\n return {\n active: eased > 0 && eased < 1,\n opacity: (1 - eased) * startAlpha + eased * (it.alpha || DEFAULT_ALPHA)\n };\n } else if (it.type === 'slide') {\n const multiply = (it.edge === 'top' || it.edge === 'left') ? -1 : 1;\n const prop = (it.edge === 'top' || it.edge === 'bottom' || !it.edge) ? 'translateY' : 'translateX';\n let distance = it.distance?.value;\n\n if (distance === undefined) {\n if (it.edge === 'top' || it.edge === 'bottom' || !it.edge) {\n distance = Math.abs(\n rootBbox[it.edge === 'bottom' ? 'bottom' : 'top'] -\n elementBbox[it.edge === 'bottom' ? 'top' : 'bottom']\n );\n } else {\n distance = Math.abs(\n rootBbox[it.edge === 'left' ? 'left' : 'right'] -\n elementBbox[it.edge === 'left' ? 'right' : 'left']\n );\n }\n }\n\n const travel = distance * eased;\n\n return {\n active: eased > 0 && eased < 1,\n translate: `${prop}(${travel * multiply}px)`\n };\n } else if (it.type === 'scale') {\n const scale = (1 - eased) + eased * (it.scale || DEFAULT_SCALE);\n const pivotX = it.pivot_x ?? .5;\n const pivotY = it.pivot_y ?? .5;\n const offsetX = (1 - scale) * elementBbox.width * pivotX;\n const offsetY = (1 - scale) * elementBbox.height * pivotY;\n\n return {\n active: eased > 0 && eased < 1,\n scale: `translate(${offsetX}px, ${offsetY}px) scale(${scale})`\n };\n }\n\n return {};\n });\n\n const opacity = (parts\n .map(it => it.opacity)\n .filter(it => it !== undefined) as number[])\n .reduce((acc: number, item: number) => acc * item, 1);\n\n const translate = parts\n .map(it => it.translate)\n .filter(it => it !== undefined)\n .join(' ');\n\n const anyScale = parts\n .map(it => it.scale)\n .filter(it => it !== undefined)\n .join(' ');\n\n const activeScale = parts\n .filter(it => it.active)\n .map(it => it.scale)\n .filter(it => it !== undefined);\n\n const scale = activeScale.length ? activeScale[activeScale.length - 1] : anyScale;\n\n const transform = [translate, scale].filter(Boolean).join(' ');\n\n return `transform:${transform || 'none'};opacity:${opacity}`;\n }\n };\n}\n","export function lerp(a: number, b: number, t: number): number {\n return a * (1 - t) + b * t;\n}\n","import { linear, cubicIn, cubicOut, cubicInOut } from 'svelte/easing';\nimport type { ChangeBoundsTransition, Interpolation } from '../types/base';\nimport { ease } from './easings/ease';\nimport { spring } from './easings/spring';\nimport { lerp } from './lerp';\n\nconst EASING: Record<Interpolation, (t: number) => number> = {\n linear,\n ease,\n ease_in: cubicIn,\n ease_out: cubicOut,\n ease_in_out: cubicInOut,\n spring\n};\n\nconst DEFAULT_DURATION = 200;\nconst DEFAULT_DELAY = 0;\n\nexport interface TransitionProps {\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n}\n\nexport function changeBoundsTransition(node: HTMLElement, {\n rootBbox,\n beforeBbox,\n afterBbox,\n transition\n}: TransitionProps) {\n return {\n delay: transition.start_delay ?? DEFAULT_DELAY,\n duration: transition.duration ?? DEFAULT_DURATION,\n easing: (transition.interpolator && transition.interpolator in EASING) ?\n EASING[transition.interpolator] :\n cubicInOut,\n css: (t: number) => {\n return [\n `top:${lerp(beforeBbox.top, afterBbox.top, t) - rootBbox.top}px`,\n `left:${lerp(beforeBbox.left, afterBbox.left, t) - rootBbox.left}px`,\n `width:${lerp(beforeBbox.width, afterBbox.width, t)}px`,\n `height:${lerp(beforeBbox.height, afterBbox.height, t)}px`\n ].join(';');\n }\n };\n}\n","import { AnyTransition, AppearanceTransition } from '../types/base';\n\nexport function flattenTransition(transition: AppearanceTransition): AnyTransition[] {\n const res: AnyTransition[] = [];\n\n if (transition.type === 'set') {\n (transition.items || []).forEach(item => {\n res.push(...flattenTransition(item));\n });\n } else {\n res.push(transition);\n }\n\n return res;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"state\":\"divkit-b8efc\",\"state__animations\":\"divkit-adaae\",\"state__animation-child\":\"divkit-eb860\",\"state__animation-child-inner\":\"divkit-e08c6\"};","<script lang=\"ts\">\n import { setContext, getContext, tick, onDestroy } from 'svelte';\n\n import css from './State.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivStateData, State } from '../../types/state';\n import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n import type { ChangeBoundsTransition } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../../context/state';\n import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n import { flattenTransition } from '../../utils/flattenTransition';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n\n export let json: Partial<DivStateData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n let animationRoot: HTMLElement | undefined;\n let transitionChangeBoxes: Map<string, DOMRect> = new Map();\n let childrenIds = new Set<string>();\n\n $: if (json) {\n childrenIds = new Set<string>();\n }\n\n let hasError = false;\n $: items = json.states || [];\n $: {\n if (!items?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n } else {\n hasError = false;\n }\n }\n\n let childStateMap: Map<string, StateInterface> | null = null;\n\n interface AnimationItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n transitions: AnyTransition[];\n alpha?: number;\n width: number;\n height: number;\n offsetTop: number;\n offsetLeft: number;\n direction: 'in' | 'out';\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n interface AnimationItemWithMaxDuration extends AnimationItem {\n maxDuration: number;\n }\n interface ChangeBoundsItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n\n interface ChildWithTransition {\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: AppearanceTransition;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n interface ChildWithTransitionChange {\n id: string;\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: TransitionChange;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n let childrenWithTransitionIn: ChildWithTransition[] = [];\n let childrenWithTransitionOut: ChildWithTransition[] = [];\n let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n function haveFadeTransition(list: AnyTransition[]): boolean {\n return list.some(it => it.type === 'fade');\n }\n\n function getItemAnimation(rootBbox: DOMRect, child: ChildWithTransition, direction: 'in' | 'out'): AnimationItem {\n let { json, templateContext, transitions, node } = child;\n json = rootCtx.getJsonWithVars(json) as DivBaseData;\n transitions = rootCtx.getJsonWithVars(transitions) as AppearanceTransition;\n\n const transitionsList: AnyTransition[] = flattenTransition(transitions);\n const bbox = node.getBoundingClientRect();\n\n return {\n json: {\n ...json,\n margins: undefined,\n alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n },\n templateContext,\n elementBbox: bbox,\n rootBbox,\n transitions: transitionsList,\n alpha: json.alpha,\n width: bbox.width,\n height: bbox.height,\n offsetTop: bbox.top - rootBbox.top,\n offsetLeft: bbox.left - rootBbox.left,\n direction,\n resolvePromise: child.resolvePromise,\n node: child.node\n };\n }\n\n function getTransitionChange(transitionOrSet: TransitionChange): ChangeBoundsTransition | null {\n if (transitionOrSet.type === 'change_bounds') {\n return transitionOrSet;\n } else if (transitionOrSet.type === 'set') {\n return getTransitionChange(transitionOrSet.items[0]);\n }\n return null;\n }\n\n const stateId = json.div_id || json.id;\n\n if (!stateId) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n } else if (!layoutParams?.fakeElement) {\n stateCtx.registerInstance(stateId, {\n async setState(stateId: string) {\n if (selectedId === stateId) {\n return;\n }\n\n rootCtx.setRunning('stateChange', true);\n\n const wasIds = new Set(childrenIds);\n\n animationList.forEach(it => {\n if (it.resolvePromise) {\n it.resolvePromise();\n }\n });\n animationList = [];\n let transitionsOutToRun: AnimationItem[] = [];\n if (animationRoot) {\n const rootBbox = animationRoot.getBoundingClientRect();\n transitionsOutToRun = childrenWithTransitionOut\n .map(it => getItemAnimation(rootBbox, it, 'out'));\n }\n childrenWithTransitionChange.forEach(child => {\n transitionChangeBoxes.set(child.id, child.node.getBoundingClientRect());\n });\n childrenWithTransitionIn = [];\n childrenWithTransitionOut = [];\n childrenWithTransitionChange = [];\n\n const newState = items.find(it => it.state_id === stateId) || null;\n if (newState) {\n selectedId = stateId;\n selectedState = newState;\n } else {\n rootCtx.logError(wrapError(new Error('Cannot find state with id'), {\n additional: {\n stateId\n }\n }));\n }\n\n await tick();\n\n if (!animationRoot) {\n return;\n }\n const rootBbox = animationRoot.getBoundingClientRect();\n\n let transitionsInToRun: AnimationItem[] =\n childrenWithTransitionIn.filter(it => {\n if (it.json.id && !wasIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n })\n .map(it => getItemAnimation(rootBbox, it, 'in'));\n\n transitionsOutToRun = transitionsOutToRun.filter(it => {\n if (it.json.id && !childrenIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n });\n\n const inOutList: AnimationItem[] = transitionsOutToRun.concat(transitionsInToRun);\n const maxDuration = inOutList.reduce((acc: number, item: AnimationItem) => {\n return Math.max(\n acc,\n calcMaxDuration(item.transitions)\n );\n }, 0);\n\n const changeList: ChangeBoundsItem[] = childrenWithTransitionChange\n .filter(child => transitionChangeBoxes.has(child.id))\n .map(child => {\n const res: ChangeBoundsItem = {\n json: {\n ...child.json,\n margins: undefined,\n width: { type: 'match_parent' },\n height: { type: 'match_parent' },\n },\n templateContext: child.templateContext,\n rootBbox,\n beforeBbox: transitionChangeBoxes.get(child.id) as DOMRect,\n afterBbox: child.node.getBoundingClientRect(),\n node: child.node,\n transition: getTransitionChange(child.transitions) as ChangeBoundsTransition,\n resolvePromise: child.resolvePromise\n };\n\n return res;\n });\n\n animationList = [\n ...inOutList.map(it => {\n return {\n ...it,\n maxDuration\n };\n }),\n ...changeList\n ];\n\n transitionChangeBoxes.clear();\n\n rootCtx.setRunning('stateChange', false);\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n rootCtx.logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n return undefined;\n }\n });\n\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n rootCtx.logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ) {\n if (!animationRoot) {\n return Promise.resolve();\n }\n\n const rootBbox = animationRoot.getBoundingClientRect();\n const item: AnimationItem = getItemAnimation(\n rootBbox,\n {\n json,\n templateContext,\n transitions,\n node\n },\n direction\n );\n\n const maxDuration = calcMaxDuration(item.transitions);\n const itemWithMaxDuration: AnimationItemWithMaxDuration = {\n ...item,\n maxDuration\n };\n animationList = [\n ...animationList.filter(it => it.node !== item.node),\n itemWithMaxDuration\n ];\n\n return new Promise<void>(resolve => {\n itemWithMaxDuration.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionIn.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionOut.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ) {\n const id = json.id;\n\n if (!id) {\n return Promise.resolve();\n }\n\n const item: ChildWithTransitionChange = {\n id,\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionChange.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n hasTransitionChange(id?: string) {\n if (!id) {\n return false;\n }\n\n return transitionChangeBoxes.has(id);\n },\n registerChild(id: string): void {\n childrenIds.add(id);\n },\n unregisterChild(id: string): void {\n childrenIds.delete(id);\n }\n });\n }\n\n let selectedId: string | undefined;\n let selectedState: State | null = null;\n const jsonDefaultStateId = rootCtx.getJsonWithVars(json.default_state_id);\n let inited = false;\n function initDefaultState(items: State[]): void {\n if (inited) {\n return;\n }\n inited = true;\n\n if (items.length) {\n if (jsonDefaultStateId) {\n selectedId = jsonDefaultStateId;\n selectedState = items.find(it => it.state_id === selectedId) || null;\n if (!selectedState) {\n rootCtx.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n additional: {\n selectedId\n }\n }));\n }\n } else {\n selectedState = items[0];\n selectedId = selectedState.state_id;\n }\n }\n }\n $: initDefaultState(items);\n\n function onOutro(item: AnimationItem | ChangeBoundsItem): void {\n animationList = animationList.filter(it => it !== item);\n\n if (item.resolvePromise) {\n item.resolvePromise();\n }\n }\n\n onDestroy(() => {\n if (stateId && !layoutParams?.fakeElement) {\n stateCtx.unregisterInstance(stateId);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.state}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if selectedState?.div}\n {#key selectedState}\n <Unknown div={selectedState.div} templateContext={templateContext} />\n {/key}\n {/if}\n <div class={css.state__animations} bind:this={animationRoot} aria-hidden=\"true\">\n {#each animationList as item (item)}\n {#if 'direction' in item}\n <div\n class={css['state__animation-child']}\n style=\"left:{item.offsetLeft}px;top:{item.offsetTop}px;width:{item.width}px;height:{item.height}px\"\n in:inOutTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {:else}\n <div\n class={css['state__animation-child']}\n in:changeBoundsTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {/if}\n {/each}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"pager\":\"divkit-c5feb\",\"pager__items\":\"divkit-f6987\",\"pager__item\":\"divkit-feca7\",\"pager_orientation_horizontal\":\"divkit-b0a1c\",\"pager_orientation_vertical\":\"divkit-f772f\"};","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n\n import css from './Pager.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { DivPagerData } from '../../types/pager';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Orientation } from '../../types/orientation';\n import type { PagerData } from '../../stores/pagers';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivPagerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('pager');\n\n let pagerItemsWrapper: HTMLElement;\n\n let hasItemsError = false;\n $: {\n if (!json.items?.length || !Array.isArray(json.items)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"pager\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n $: items = (!hasItemsError && json.items || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let currentItem = 0;\n let prevSelectedItem = 0;\n\n let hasLayoutModeError = false;\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: {\n if (!$jsonLayoutMode) {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed') {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n } else {\n hasLayoutModeError = false;\n }\n }\n\n let orientation: Orientation = 'horizontal';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let itemSpacing = '';\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n const val = $jsonItemSpacing?.value;\n if (val && isNonNegativeNumber(val)) {\n itemSpacing = pxToEm(val || 0);\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridAuto = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n let sizeVal = '';\n\n $: {\n if ($jsonLayoutMode?.type === 'fixed') {\n const paddings = orientation === 'horizontal' ?\n pxToEmWithUnits((json.paddings?.left || 0) + (json.paddings?.right || 0)) :\n pxToEmWithUnits((json.paddings?.top || 0) + (json.paddings?.bottom || 0));\n const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value;\n sizeVal = neighbourPageWidth ?\n `calc(100% + ${paddings} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})` :\n '100%';\n } else if ($jsonLayoutMode?.type === 'percentage') {\n const pageWidth = $jsonLayoutMode.page_width?.value;\n sizeVal = `${Number(pageWidth)}%`;\n }\n }\n\n $: style = {\n 'grid-gap': itemSpacing,\n padding,\n [gridAuto]: sizeVal\n };\n\n $: mods = {\n orientation\n };\n\n $: hasError = hasItemsError || hasLayoutModeError;\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(): number {\n const pagerElements = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n const wrapperRect = pagerItemsWrapper.getBoundingClientRect();\n\n const firstFullyVisibleElement = pagerElements.findIndex(el =>\n checkIsFullyIntersecting(wrapperRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n return currentItem;\n }\n\n function onScroll(): void {\n const nextItem = calculateCurrentElementIndex();\n if (nextItem !== currentItem) {\n currentItem = nextItem;\n }\n }\n\n const onScrollDebounced = debounce(onScroll, 50);\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n\n function pagerDataUpdate(size: number, currentItem: number): void {\n const pagerId = json.id;\n if (pagerId) {\n const newPagersMap = new Map($pagers);\n $pagers = newPagersMap.set(pagerId, { instId, size, currentItem, scrollToPagerItem });\n }\n }\n\n function runSelectedActions(currentItem: number): void {\n // prevent initial actions execution\n if (currentItem === prevSelectedItem) {\n return;\n }\n prevSelectedItem = currentItem;\n\n const actions = rootCtx.getJsonWithVars(items[currentItem].json?.selected_actions);\n if (!actions?.length) {\n return;\n }\n rootCtx.execAnyActions(actions);\n }\n\n $: pagerDataUpdate(items.length, currentItem);\n\n $: runSelectedActions(currentItem);\n\n function scrollToPagerItem(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const nextPagerItem = pagerItemsWrapper.children[index] as HTMLElement;\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n pagerItemsWrapper.scroll({\n [scrollDirection]: nextPagerItem[elementOffset],\n behavior\n });\n currentItem = index;\n }\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToPagerItem(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = currentItem - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : currentItem;\n }\n\n scrollToPagerItem(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = currentItem + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentItem;\n }\n\n scrollToPagerItem(nextItem);\n }\n });\n }\n\n onMount(() => {\n const isIndicatorExist = Boolean(document.getElementById(`${instId}-tab-0`));\n\n if (isIndicatorExist) {\n const pagerItems = [...pagerItemsWrapper.children] as HTMLElement[];\n\n for (const [index, item] of pagerItems.entries()) {\n item.setAttribute('role', 'tabpanel');\n item.setAttribute('id', `${instId}-panel-${index}`);\n item.setAttribute('aria-labelledby', `${instId}-tab-${index}`);\n }\n }\n });\n\n onDestroy(() => {\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('pager', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n >\n <div\n class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n style={makeStyle(style)}\n bind:this={pagerItemsWrapper}\n on:scroll={onScrollDebounced}\n >\n {#each items as item}\n <div class={css.pager__item}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n layoutParams={layoutParams?.fakeElement ? { fakeElement: true } : undefined}\n />\n </div>\n {/each}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"divkit-d8e3f\",\"indicator__scroller\":\"divkit-b5db0\",\"indicator__items\":\"divkit-d5d94\",\"indicator__item\":\"divkit-f6629\",\"indicator_placement_default\":\"divkit-c1670\",\"indicator__item_active\":\"divkit-b39cd\",\"indicator_placement_stretch\":\"divkit-b6bd3\"};","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import rootCss from '../Root.module.css';\n import css from './Indicator.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivIndicatorData } from '../../types/indicator';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { PagerData } from '../../stores/pagers';\n import type { MaybeMissing } from '../../expressions/json';\n import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n\n import Outer from '../utilities/Outer.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { pxToEm } from '../../utils/pxToEm';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivIndicatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const AVAIL_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonShape = rootCtx.getDerivedFromVars(json.shape);\n $: jsonActiveItemColor = rootCtx.getDerivedFromVars(json.active_item_color);\n $: jsonInactiveItemColor = rootCtx.getDerivedFromVars(json.inactive_item_color);\n $: jsonActiveItemSize = rootCtx.getDerivedFromVars(json.active_item_size);\n $: jsonActiveShape = rootCtx.getDerivedFromVars(json.active_shape);\n $: jsonInactiveShape = rootCtx.getDerivedFromVars(json.inactive_shape);\n let activeStyle: DrawableStyle = {\n width: 13,\n height: 13,\n borderRadius: 6.5,\n background: '#ffdc60'\n };\n let inactiveStyle: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#33919cb5'\n };\n $: {\n if ($jsonActiveShape) {\n activeStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonActiveShape\n }, AVAIL_SHAPES, activeStyle);\n }\n if ($jsonInactiveShape) {\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonInactiveShape\n }, AVAIL_SHAPES, inactiveStyle);\n }\n if (!$jsonActiveShape && !$jsonInactiveShape && $jsonShape) {\n const activeSize = correctPositiveNumber($jsonActiveItemSize, 1.3);\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonShape,\n color: inactiveStyle.background\n }, AVAIL_SHAPES, inactiveStyle);\n inactiveStyle.background = correctColor($jsonInactiveItemColor, 1, inactiveStyle.background);\n activeStyle = {\n ...inactiveStyle,\n width: inactiveStyle.width * activeSize,\n height: inactiveStyle.height * activeSize,\n borderRadius: inactiveStyle.borderRadius * activeSize,\n background: activeStyle.background\n };\n activeStyle.background = correctColor($jsonActiveItemColor, 1, activeStyle.background);\n }\n }\n\n $: jsonSpaceBetweenCenters = rootCtx.getDerivedFromVars(json.space_between_centers);\n $: jsonItemsPlacement = rootCtx.getDerivedFromVars(json.items_placement);\n let placement: 'default' | 'stretch' = 'default';\n let spaceBetweenCenters = 15;\n let maxVisibleItems = 10;\n let itemSpacing = 5;\n $: if ($jsonItemsPlacement && ($jsonItemsPlacement.type === 'default' || $jsonItemsPlacement.type === 'stretch')) {\n placement = $jsonItemsPlacement.type;\n if (placement === 'default') {\n spaceBetweenCenters = correctNonNegativeNumber(\n ($jsonItemsPlacement as MaybeMissing<DivIndicatorDefaultItemPlacement>).space_between_centers?.value,\n spaceBetweenCenters\n );\n } else if (placement === 'stretch') {\n const placement = $jsonItemsPlacement as MaybeMissing<DivIndicatorStretchItemPlacement>;\n maxVisibleItems = correctPositiveNumber(placement.max_visible_items, maxVisibleItems);\n itemSpacing = correctNonNegativeNumber(placement.item_spacing?.value, itemSpacing);\n }\n } else {\n placement = 'default';\n if ($jsonSpaceBetweenCenters) {\n spaceBetweenCenters = correctNonNegativeNumber($jsonSpaceBetweenCenters.value, spaceBetweenCenters);\n }\n }\n\n let scroller: HTMLElement;\n let indicatorItemsWrapper: HTMLElement;\n let pagerData: PagerData;\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n $: {\n onPagerDataUpdate($pagers);\n }\n\n async function onPagerDataUpdate(pagersMap: Map<string, PagerData>): Promise<void> {\n if (json.pager_id && pagersMap.has(json.pager_id)) {\n pagerData = pagersMap.get(json.pager_id) as PagerData;\n\n await tick();\n\n const currentItemOffsetLeft =\n (indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement).offsetLeft;\n\n scroller.scroll({\n left: currentItemOffsetLeft - scroller.clientWidth / 2,\n behavior: 'smooth'\n });\n }\n }\n\n function onIndicatorItemClick(index: number) {\n if (index !== pagerData.currentItem) {\n pagerData.scrollToPagerItem(index);\n }\n }\n\n function onIndicatorItemKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n const { size, currentItem } = pagerData;\n if (event.which === ARROW_LEFT) {\n const prevItem = currentItem - 1 < 0 ? currentItem : currentItem - 1;\n moveFocus(prevItem);\n } else if (event.which === ARROW_RIGHT) {\n const nextItem = currentItem + 1 >= size ? currentItem : currentItem + 1;\n moveFocus(nextItem);\n } else if (event.which === HOME) {\n moveFocus(0);\n } else if (event.which === END) {\n moveFocus(size - 1);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n async function moveFocus(index: number) {\n pagerData.scrollToPagerItem(index);\n\n await tick();\n\n const activeItem = indicatorItemsWrapper.querySelector(`.${css.indicator__item_active}`) as HTMLElement | null;\n if (activeItem) {\n activeItem.focus();\n }\n }\n\n $: mods = {\n placement\n };\n</script>\n\n<Outer\n cls={genClassName('indicator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n <div\n class={css.indicator__scroller}\n bind:this={scroller}\n >\n <div\n class={css.indicator__items}\n role=\"tablist\"\n bind:this={indicatorItemsWrapper}\n style:margin={placement === 'default' ? `0 ${pxToEm(Math.max(0, activeStyle.width - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-inactive-width={pxToEm(inactiveStyle.width)}\n style:--divkit-indicator-inactive-height={pxToEm(inactiveStyle.height)}\n style:--divkit-indicator-inactive-border-radius={pxToEm(inactiveStyle.borderRadius)}\n style:--divkit-indicator-inactive-background={inactiveStyle.background || ''}\n style:--divkit-indicator-inactive-box-shadow={inactiveStyle.boxShadow || ''}\n style:--divkit-indicator-active-width={pxToEm(activeStyle.width)}\n style:--divkit-indicator-active-height={pxToEm(activeStyle.height)}\n style:--divkit-indicator-active-border-radius={pxToEm(activeStyle.borderRadius)}\n style:--divkit-indicator-active-background={activeStyle.background || ''}\n style:--divkit-indicator-active-box-shadow={activeStyle.boxShadow || ''}\n style:--divkit-indicator-active-scale={activeStyle.width / inactiveStyle.width}\n style:--divkit-indicator-default-margin={placement === 'default' ? `0 ${pxToEm((spaceBetweenCenters - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-stretch-margin={placement === 'stretch' ? pxToEm(itemSpacing) : ''}\n style:--divkit-indicator-stretch-max-count={placement === 'stretch' ? maxVisibleItems : ''}\n style:--divkit-indicator-stretch-max-spacer={placement === 'stretch' ? pxToEm((maxVisibleItems - 1) * itemSpacing) : ''}\n >\n {#if pagerData}\n {#each Array(pagerData.size) as _, index}\n {@const isActiveItem = index === pagerData.currentItem}\n <div\n class=\"{genClassName('indicator__item', css, { active: isActiveItem })} {rootCss.root__clickable}\"\n role=\"tab\"\n id=\"{pagerData.instId}-tab-{index}\"\n aria-controls=\"{pagerData.instId}-panel-{index}\"\n aria-selected={isActiveItem ? 'true' : 'false'}\n tabindex={isActiveItem ? 0 : -1}\n on:click={() => onIndicatorItemClick(index)}\n on:keydown={onIndicatorItemKeydown}\n ></div>\n {/each}\n {/if}\n </div>\n </div>\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"slider\":\"divkit-ef4f7\",\"slider__input\":\"divkit-d1d65\",\"slider__input_secondary\":\"divkit-c7980\",\"slider__thumb\":\"divkit-f3453\",\"slider__thumb_secondary\":\"divkit-e1984\",\"slider__tracks-wrapper\":\"divkit-f7338\",\"slider__tracks-inner\":\"divkit-ac903\",\"slider__track\":\"divkit-e956c\",\"slider__active-track\":\"divkit-ec5bf\",\"slider__thumb-text\":\"divkit-c4af5\",\"slider__thumb-text_secondary\":\"divkit-d8821\",\"slider__tick\":\"divkit-bd9bf\",\"slider__tick_active\":\"divkit-d8ce2\",\"slider__tick_inactive\":\"divkit-e71e7\"};","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { fontWeightToCss } from './fontWeightToCss';\nimport { pxToEm } from './pxToEm';\n\nexport interface TransformedSliderTextStyle {\n fontSize: string;\n fontWeight: number | undefined;\n textColor: string;\n offset?: {\n x: number;\n y: number;\n };\n}\n\nexport function correctSliderTextStyle(\n textStyle: MaybeMissing<SliderTextStyle> | undefined,\n defaultValue: TransformedSliderTextStyle | undefined\n): TransformedSliderTextStyle | undefined {\n if (!textStyle || !textStyle.font_size) {\n return defaultValue;\n }\n\n const offset = textStyle.offset;\n const convertedColor = textStyle.text_color && correctColor(textStyle.text_color) || '#000';\n const fontWeight = fontWeightToCss(textStyle.font_weight);\n\n if (\n isPositiveNumber(textStyle.font_size) &&\n convertedColor !== 'transparent'\n ) {\n const res: TransformedSliderTextStyle = {\n fontSize: pxToEm(textStyle.font_size),\n fontWeight,\n textColor: convertedColor\n };\n\n if (typeof offset?.x?.value === 'number' && typeof offset?.y?.value === 'number') {\n res.offset = {\n x: offset.x.value,\n y: offset.y.value\n };\n }\n\n return res;\n }\n}\n","export function clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val));\n}\n","export const MAX_INT = 2147483647;\nexport const MIN_INT = -2147483648;\n\nexport const MAX_NUMBER = Number.MAX_VALUE;\nexport const MIN_NUMBER = Number.MIN_VALUE;\n\nexport const STRING = 'string';\nexport const INTEGER = 'integer';\nexport const NUMBER = 'number';\nexport const BOOLEAN = 'boolean';\nexport const COLOR = 'color';\nexport const URL = 'url';\nexport const DATETIME = 'datetime';\n","import { writable } from 'svelte/store';\nimport type { Subscriber, Unsubscriber, Writable } from 'svelte/types/runtime/store';\nimport type { EvalValue } from './eval';\nimport { MAX_INT, MIN_INT } from './const';\nimport { parseColor } from '../utils/correctColor';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url';\nexport type VariableValue = string | number | boolean;\n\nexport abstract class Variable<ValueType = any, TypeName = VariableType> {\n protected name: string;\n protected value: ValueType;\n protected store?: Writable<ValueType>;\n\n constructor(name: string, value: ValueType) {\n const val = this.convertValue(value);\n\n this.name = name;\n this.value = val;\n }\n\n getName(): string {\n return this.name;\n }\n\n protected abstract convertValue(value: unknown): ValueType;\n\n subscribe(cb: Subscriber<ValueType>): Unsubscriber {\n if (!this.store) {\n this.store = writable(this.value);\n }\n\n return this.store.subscribe(cb);\n }\n\n set(val: string): void {\n const value = this.fromString(val);\n\n this.setValue(value);\n }\n\n protected abstract fromString(val: string): ValueType;\n\n setValue(val: ValueType): void {\n const converted = this.convertValue(val);\n\n this.value = converted;\n\n if (this.store) {\n this.store.set(converted);\n }\n }\n\n getValue(): ValueType {\n return this.value;\n }\n\n abstract getType(): TypeName;\n}\n\nexport class StringVariable extends Variable<string, 'string'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'string' {\n return 'string';\n }\n}\n\nexport class IntegerVariable extends Variable<number, 'integer'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n value > MAX_INT ||\n value < MIN_INT ||\n value !== Math.round(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'integer' {\n return 'integer';\n }\n}\n\nexport class NumberVariable extends Variable<number, 'number'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n !isFinite(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'number' {\n return 'number';\n }\n}\n\nexport class BooleanVariable extends Variable<number, 'boolean'> {\n protected convertValue(value: unknown) {\n if (value !== 1 && value !== 0 && value !== true && value !== false) {\n throw new Error('Incorrect variable value');\n }\n\n return Number(value);\n }\n\n protected fromString(val: string) {\n if (val === '1' || val === 'true') {\n return 1;\n } else if (val === '0' || val === 'false') {\n return 0;\n }\n\n throw new Error('Incorrect variable value');\n }\n\n getType(): 'boolean' {\n return 'boolean';\n }\n}\n\nexport class ColorVariable extends Variable<string, 'color'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string' || !parseColor(value)) {\n throw new Error('Incorrect variable value');\n }\n\n // save input value, some expression tests rely on that\n return value;\n }\n\n protected fromString(val: string) {\n return this.convertValue(val);\n }\n\n getType(): 'color' {\n return 'color';\n }\n}\n\nexport class UrlVariable extends Variable<string, 'url'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'url' {\n return 'url';\n }\n}\n\nexport const TYPE_TO_CLASS = {\n string: StringVariable,\n number: NumberVariable,\n integer: IntegerVariable,\n boolean: BooleanVariable,\n color: ColorVariable,\n url: UrlVariable\n};\n\nexport function createVariable(\n name: string,\n type: VariableType,\n value: unknown\n):\n StringVariable | NumberVariable | IntegerVariable |\n BooleanVariable | ColorVariable | UrlVariable {\n if (!(type in TYPE_TO_CLASS)) {\n throw new Error('Unsupported variable type');\n }\n\n return new (TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n if (type === 'boolean' || type === 'number' || type === 'integer') {\n return 0;\n }\n\n return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n return {\n type: variable.getType(),\n value: variable.getValue()\n };\n}\n","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Slider.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivSliderData } from '../../types/slider';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { genClassName } from '../../utils/genClassName';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { correctSliderTextStyle, TransformedSliderTextStyle } from '../../utils/correctSliderTextStyle';\n import { wrapError } from '../../utils/wrapError';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { clamp } from '../../utils/clamp';\n import { correctNumber } from '../../utils/correctNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivSliderData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const DEFAULT_DRAWABLE_STYLE: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#000'\n };\n\n const THUMB_MARK_SHAPES = ['rounded_rectangle', 'circle'];\n const TRACK_SHAPES = ['rounded_rectangle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n let tracksInner: HTMLElement;\n let switchedTracks = false;\n\n $: jsonMinValue = rootCtx.getDerivedFromVars(json.min_value);\n $: jsonMaxValue = rootCtx.getDerivedFromVars(json.max_value);\n let minValue = 0;\n let maxValue = 100;\n $: {\n minValue = correctNumber($jsonMinValue, minValue);\n maxValue = correctNumber($jsonMaxValue, maxValue);\n checkTicks();\n }\n\n const firstVariable = rootCtx.getJsonWithVars(json.thumb_value_variable);\n const secondVariable = rootCtx.getJsonWithVars(json.thumb_secondary_value_variable);\n\n let valueVariable = firstVariable && rootCtx.getVariable(firstVariable, 'integer') || createVariable('temp', 'integer', 0);\n let value2Variable = secondVariable && rootCtx.getVariable(secondVariable, 'integer') || createVariable('temp', 'integer', 0);\n\n let value = clamp($valueVariable || 0, minValue, maxValue);\n let value2 = clamp($value2Variable || 0, minValue, maxValue);\n\n $: {\n const newVal = clamp($valueVariable || 0, minValue, maxValue);\n if (newVal !== value) {\n value = newVal;\n }\n }\n\n $: {\n const newVal2 = clamp($value2Variable || 0, minValue, maxValue);\n if (newVal2 !== value2) {\n value2 = newVal2;\n }\n }\n\n $: jsonThumbStyle = rootCtx.getDerivedFromVars(json.thumb_style);\n let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonThumbSecondaryStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_style);\n let thumbSecondaryStyle = thumbStyle;\n $: {\n thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonTrackInactiveStyle = rootCtx.getDerivedFromVars(json.track_inactive_style);\n let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n }\n\n $: jsonTrackActiveStyle = rootCtx.getDerivedFromVars(json.track_active_style);\n let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n }\n\n function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n let res: number[] = [];\n\n if (inside) {\n for (let i = from; i < to; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n } else {\n for (let i = minValue; i < from; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n for (let i = to; i < maxValue + 1; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n }\n\n return res;\n }\n\n $: jsonMarkActiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_active_style);\n let markActiveTicks: number[];\n let markActiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkActiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markActiveStyle = newStyle;\n }\n }\n $: if (markActiveStyle) {\n markActiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, true) :\n fillTicks(minValue, value, minValue, maxValue, true);\n checkTicks();\n } else {\n markActiveTicks = [];\n }\n\n $: jsonMarkInactiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_inactive_style);\n let markInactiveTicks: number[];\n let markInactiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkInactiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markInactiveStyle = newStyle;\n }\n }\n $: if (markInactiveStyle) {\n markInactiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, false) :\n fillTicks(value + 1, maxValue + 1, minValue, maxValue, true);\n checkTicks();\n } else {\n markInactiveTicks = [];\n }\n\n $: jsonTextStyle = rootCtx.getDerivedFromVars(json.thumb_text_style);\n let textStyle: TransformedSliderTextStyle | undefined = undefined;\n $: {\n textStyle = correctSliderTextStyle($jsonTextStyle, textStyle);\n }\n\n $: jsonSecondaryTextStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_text_style);\n let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n $: {\n textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, textStyle);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n $: jsonSecondaryAccessibility = rootCtx.getDerivedFromVars(json.secondary_value_accessibility);\n let secondaryDescription = '';\n $: if ($jsonSecondaryAccessibility?.description) {\n secondaryDescription = $jsonSecondaryAccessibility.description;\n } else if (secondVariable) {\n rootCtx.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n let hasError = false;\n $: {\n let newHasError = false;\n\n if (actionCtx.hasAction()) {\n rootCtx.logError(wrapError(new Error('Cannot show \"slider\" inside component with action')));\n newHasError = true;\n } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n newHasError = true;\n } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n newHasError = true;\n } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_inactive_style\" in slider')));\n newHasError = true;\n }\n\n if (newHasError !== hasError) {\n hasError = newHasError;\n }\n }\n\n $: maxThumbWidth = pxToEm(Math.max(...[\n thumbStyle.width,\n thumbSecondaryStyle.width,\n 0,\n ].filter(isNonNegativeNumber)));\n $: maxThumbHeight = pxToEm(Math.max(...[\n thumbStyle.height,\n thumbSecondaryStyle.height,\n 0,\n ].filter(isNonNegativeNumber)));\n $: trackPart = (value - minValue) / (maxValue - minValue);\n $: trackSecondaryPart = secondVariable ? (value2 - minValue) / (maxValue - minValue) : undefined;\n $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(trackSecondaryPart - trackPart) : trackPart;\n $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(trackSecondaryPart, trackPart) : 0;\n\n $: stl = {\n '--divkit-slider-thumb-width': pxToEm(thumbStyle.width),\n '--divkit-slider-thumb-height': pxToEm(thumbStyle.height),\n\n '--divkit-slider-thumb-secondary-width': pxToEm(thumbSecondaryStyle.width),\n '--divkit-slider-thumb-secondary-height': pxToEm(thumbSecondaryStyle.height),\n\n '--divkit-slider-text-offset-x': textStyle?.offset?.x ? pxToEmWithUnits(textStyle.offset.x) : undefined,\n '--divkit-slider-text-offset-y': textStyle?.offset?.y ? pxToEmWithUnits(textStyle.offset.y) : undefined,\n\n '--divkit-slider-text-secondary-offset-x': textSecondaryStyle?.offset?.x ? pxToEmWithUnits(textSecondaryStyle.offset.x) : undefined,\n '--divkit-slider-text-secondary-offset-y': textSecondaryStyle?.offset?.y ? pxToEmWithUnits(textSecondaryStyle.offset.y) : undefined,\n\n '--divkit-slider-tick-active-width': markActiveStyle ? pxToEm(markActiveStyle.width) : undefined,\n '--divkit-slider-tick-active-height': markActiveStyle ? pxToEm(markActiveStyle.height) : undefined,\n '--divkit-slider-tick-active-border-radius': markActiveStyle ? pxToEm(markActiveStyle.borderRadius) : undefined,\n '--divkit-slider-tick-active-background': markActiveStyle?.background || undefined,\n '--divkit-slider-tick-active-box-shadow': markActiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-tick-inactive-width': markInactiveStyle ? pxToEm(markInactiveStyle.width) : undefined,\n '--divkit-slider-tick-inactive-height': markInactiveStyle ? pxToEm(markInactiveStyle.height) : undefined,\n '--divkit-slider-tick-inactive-border-radius': markInactiveStyle ?\n pxToEm(markInactiveStyle.borderRadius) :\n undefined,\n '--divkit-slider-tick-inactive-background': markInactiveStyle?.background || undefined,\n '--divkit-slider-tick-inactive-box-shadow': markInactiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-max-thumb-width': maxThumbWidth,\n '--divkit-slider-max-thumb-height': maxThumbHeight,\n '--divkit-slider-track-part': trackPart,\n '--divkit-slider-track-secondary-part': trackSecondaryPart,\n };\n\n $: mods = {};\n\n function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n const pageX = 'pageX' in event ? event.pageX : event.changedTouches?.[0]?.pageX;\n if (pageX === undefined) {\n return;\n }\n\n const rangeBbox = tracksInner.getBoundingClientRect();\n const part = (pageX - rangeBbox.left) / rangeBbox.width;\n const newVal = (maxValue - minValue) * part;\n const final = Math.round(clamp(newVal, minValue, maxValue));\n const middle = (value + value2) / 2;\n\n switchedTracks = final < middle === value < value2;\n }\n\n function onInputChange(event: Event, type: 'first' | 'second'): void {\n const val = Number((event.target as HTMLInputElement).value);\n\n if (switchedTracks === (type === 'first')) {\n value2 = val;\n value2Variable.setValue(val);\n } else {\n value = val;\n valueVariable.setValue(val);\n }\n }\n\n let isTicksWarning = false;\n\n function checkTicks() {\n if (!tracksInner) {\n return;\n }\n\n const ticksCount = maxValue - minValue;\n const activeTickWidth = markActiveStyle?.width || 0;\n const inactiveTickWidth = markInactiveStyle?.width || 0;\n const maxTickWidth = Math.max(activeTickWidth, inactiveTickWidth);\n\n if (maxTickWidth * ticksCount >= tracksInner?.clientWidth) {\n if (!isTicksWarning) {\n rootCtx.logError(wrapError(new Error('Slider ticks overlap each other'), {\n level: 'warn'\n }));\n isTicksWarning = true;\n }\n } else {\n isTicksWarning = false;\n }\n }\n\n const checkTicksDebounced = debounce(checkTicks, 50);\n\n onMount(() => {\n checkTicks();\n });\n</script>\n\n<svelte:window on:resize={checkTicksDebounced} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('slider', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'slider'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <div class={css['slider__tracks-wrapper']}>\n <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n <div\n class={css.slider__track}\n style:height={pxToEm(trackInactiveStyle.height)}\n style:border-radius={pxToEm(trackInactiveStyle.borderRadius)}\n style:background={trackInactiveStyle.background}\n style:box-shadow={trackInactiveStyle.boxShadow || ''}\n ></div>\n <div\n class={css['slider__active-track']}\n style:left={(trackActiveOffset * 100).toFixed(2) + '%'}\n style:width={(trackActivePart * 100).toFixed(2) + '%'}\n style:height={pxToEm(trackActiveStyle.height)}\n style:border-radius={pxToEm(trackActiveStyle.borderRadius)}\n style:background={trackActiveStyle.background}\n style:box-shadow={trackActiveStyle.boxShadow || ''}\n ></div>\n {#each markActiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_active}\" style:--divkit-slider-tick={val}></div>\n {/each}\n {#each markInactiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_inactive}\" style:--divkit-slider-tick={val}></div>\n {/each}\n <div\n class={css.slider__thumb}\n style:border-radius={pxToEm(thumbStyle.borderRadius)}\n style:background={thumbStyle.background}\n style:box-shadow={thumbStyle.boxShadow || ''}\n >\n {#if textStyle}\n <div class={css['slider__thumb-text']}>\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textStyle?.fontSize || '1em'}\n style:font-weight={textStyle?.fontWeight || ''}\n style:color={textStyle?.textColor || '#000'}\n >\n {value}\n </div>\n </div>\n {/if}\n </div>\n {#if secondVariable}\n <div\n class=\"{css.slider__thumb} {css.slider__thumb_secondary}\"\n style:border-radius={pxToEm(thumbSecondaryStyle.borderRadius)}\n style:background={thumbSecondaryStyle.background}\n style:box-shadow={thumbSecondaryStyle.boxShadow || ''}\n >\n {#if textSecondaryStyle}\n <div class=\"{css['slider__thumb-text']} {css['slider__thumb-text_secondary']}\">\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textSecondaryStyle?.fontSize || '1em'}\n style:font-weight={textSecondaryStyle?.fontWeight || ''}\n style:color={textSecondaryStyle?.textColor || '#000'}\n >\n {value2}\n </div>\n </div>\n {/if}\n </div>\n {/if}\n <input\n type=\"range\"\n class={switchedTracks ? `${css.slider__input} ${css.slider__input_secondary}` : css.slider__input}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value2 : value}\n aria-label={description}\n on:input={event => onInputChange(event, 'first')}\n >\n {#if secondVariable}\n <input\n type=\"range\"\n class={switchedTracks ? css.slider__input : `${css.slider__input} ${css.slider__input_secondary}`}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value : value2}\n aria-label={secondaryDescription}\n on:input={event => onInputChange(event, 'second')}\n on:mousedown={secondVariable ? onSecondMousedown : null}\n on:touchstart={secondVariable ? onSecondMousedown : null}\n >\n {/if}\n </div>\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"divkit-c3a4c\",\"input__wrapper\":\"divkit-ef7eb\",\"input__holder\":\"divkit-bb3da\",\"input_multiline\":\"divkit-e48a3\",\"input__input\":\"divkit-f11e0\",\"input_highlight-color\":\"divkit-cc00f\",\"input_vertical-overflow\":\"divkit-b7075\"};","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Input.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivInputData, KeyboardType } from '../../types/input';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n\n export let json: Partial<DivInputData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let input: HTMLInputElement | HTMLTextAreaElement;\n let holder: HTMLElement;\n let isPressed = false;\n let verticalOverflow = false;\n\n const variable = rootCtx.getJsonWithVars(json.text_variable);\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n $: {\n value = $valueVariable as string;\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: placeholder = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = '';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n let fontWeight: number | undefined = undefined;\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n const jsonHighlightColor = rootCtx.getDerivedFromVars(json.highlight_color);\n let highlightColor = '';\n $: {\n highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n }\n\n const jsonKeyboardType = rootCtx.getDerivedFromVars(json.keyboard_type);\n const KEYBOARD_MAP: Record<KeyboardType, string> = {\n email: 'email',\n number: 'number',\n phone: 'tel',\n single_line_text: 'text',\n multi_line_text: 'text',\n uri: 'url'\n };\n let keyboardType = 'multi_line_text';\n let inputType = 'text';\n $: {\n if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n keyboardType = $jsonKeyboardType;\n }\n }\n\n const jsonVisibleMaxLines = rootCtx.getDerivedFromVars(json.max_visible_lines);\n $: isMultiline = keyboardType === 'multi_line_text'/* && isPositiveNumber($jsonVisibleMaxLines) && $jsonVisibleMaxLines > 1*/;\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let maxHeight = '';\n $: {\n if (isPositiveNumber($jsonVisibleMaxLines)) {\n maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n }\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n level: 'warn'\n }));\n }\n\n const jsonSelectAll = rootCtx.getDerivedFromVars(json.select_all_on_focus);\n\n $: mods = {\n 'highlight-color': Boolean(highlightColor),\n 'vertical-overflow': verticalOverflow,\n multiline: isMultiline\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n '--divkit-input-highlight-color': highlightColor,\n 'font-size': pxToEm(fontSize),\n 'font-weight': fontWeight,\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n color: textColor,\n 'max-height': maxHeight\n };\n\n function onInput(event: Event) {\n const value = (event.target as HTMLInputElement).value || '';\n\n valueVariable.setValue(value);\n\n checkVerticalOverflow();\n }\n\n // Handle text selection\n function onMousedown() {\n isPressed = false;\n\n setTimeout(() => {\n isPressed = true;\n }, 250);\n }\n\n function onClick() {\n if (!isPressed) {\n input.select();\n }\n }\n\n function checkVerticalOverflow(): void {\n verticalOverflow = holder.scrollHeight > holder.offsetHeight;\n }\n\n onMount(() => {\n checkVerticalOverflow();\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('input', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'input'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={css.input__wrapper}>\n <span class={css.input__holder} aria-hidden=\"true\" bind:this={holder}>\n <!--appends zero-space at end-->\n {value}{#if value.endsWith('\\n') || !value}{/if}\n </span>\n {#if isMultiline}\n <textarea\n bind:this={input}\n class={css.input__input}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n ></textarea>\n {:else}\n <input\n bind:this={input}\n type={inputType}\n class={css.input__input}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n >\n {/if}\n </span>\n </Outer>\n{/if}\n","import { SvelteComponent } from 'svelte';\nimport Text from './text/Text.svelte';\nimport Container from './container/Container.svelte';\nimport Separator from './separator/Separator.svelte';\nimport Image from './image/Image.svelte';\nimport Grid from './grid/Grid.svelte';\nimport Gallery from './gallery/Gallery.svelte';\nimport Tabs from './tabs/Tabs.svelte';\nimport State from './state/State.svelte';\nimport Pager from './pager/Pager.svelte';\nimport Indicator from './indicator/Indicator.svelte';\nimport Slider from './slider/Slider.svelte';\nimport Input from './input/Input.svelte';\n\nexport const TYPE_MAP: Record<string, typeof SvelteComponent> = {\n text: Text,\n container: Container,\n separator: Separator,\n image: Image,\n gif: Image,\n grid: Grid,\n gallery: Gallery,\n tabs: Tabs,\n state: State,\n pager: Pager,\n indicator: Indicator,\n slider: Slider,\n input: Input\n};\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import type { SvelteComponent } from 'svelte';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { TYPE_MAP } from '../typeMap';\n\n export let div: DivBaseData;\n export let templateContext: TemplateContext;\n export let origJson: DivBaseData | DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let childJson: DivBaseData;\n let childContext: TemplateContext;\n\n let component: typeof SvelteComponent | undefined;\n\n $: {\n childJson = div;\n childContext = templateContext;\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n\n if (!component) {\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n if (!component) {\n let error: string;\n if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n error = 'Recursive template';\n } else {\n error = 'Unknown component';\n }\n\n rootCtx.logError(wrapError(new Error(error), {\n additional: {\n component: childJson?.type || '<missing>'\n }\n }));\n }\n }\n }\n</script>\n\n{#if component}\n <svelte:component this={component} json={childJson} templateContext={childContext} {layoutParams} origJson={origJson || div} />\n{/if}\n","<script lang=\"ts\">\n import css from './RootSvgFilters.module.css';\n\n export let svgFiltersMap: Record<string, string>;\n</script>\n\n{#if Object.keys(svgFiltersMap).length}\n <svg\n class={css['root-svg-filters']}\n aria-hidden=\"true\"\n >\n <defs>\n {#each [...Object.keys(svgFiltersMap)] as filterKey}\n {@const [filterColor, filterMode] = filterKey.split(':')}\n <filter id={svgFiltersMap[filterKey]}>\n <feFlood flood-color={filterColor} />\n\n {#if filterMode === 'source_in' || filterMode === 'source_atop'}\n <feComposite in2=\"SourceGraphic\" operator={filterMode.split('_')[1]} />\n {:else if filterMode === 'multiply'}\n <feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"1\" k2=\"0\" k3=\"0\" k4=\"0\" />\n {:else}\n <feBlend in2=\"SourceGraphic\" mode={filterMode} />\n {/if}\n </filter>\n {/each}\n </defs>\n </svg>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"root-svg-filters\":\"divkit-dc22b\"};","import { wrapError, WrappedError } from './wrapError';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport function applyTemplate<T extends DivBase>(\n json: T,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: T;\n templateContext: TemplateContext;\n};\nexport function applyTemplate(\n json: DivBaseData,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: DivBaseData;\n templateContext: TemplateContext;\n} {\n const template = templates[json.type];\n\n if (!template) {\n logError(wrapError(new Error('No such template'), {\n additional: {\n template: json.type\n }\n }));\n\n return {\n json,\n templateContext\n };\n }\n\n let i;\n const newContext: TemplateContext = {};\n\n for (i in templateContext) {\n if (templateContext.hasOwnProperty(i)) {\n newContext[i] = templateContext[i];\n }\n }\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newContext[i] = json[i as keyof typeof json];\n }\n }\n\n function copyTemplated(base: any, extender: any) {\n const keys = Object.keys(extender).filter(key => key !== '__proto__');\n const simpleKeys = keys.filter(key => key.charAt(0) !== '$');\n const templateKeys = keys.filter(key => key.charAt(0) === '$');\n\n simpleKeys.forEach(key => {\n const item = extender[key];\n\n if (typeof item === 'object' && item !== null) {\n base[key] = Array.isArray(item) ? [] : {};\n copyTemplated(base[key], item);\n } else {\n base[key] = item;\n }\n });\n\n templateKeys.forEach(key => {\n const item = extender[key];\n\n const val = newContext[item];\n\n if (val !== undefined) {\n const prop = key.substring(1);\n base[prop] = val;\n } else {\n logError(wrapError(new Error('Missing template field'), {\n level: 'warn',\n additional: {\n key,\n template: json.type\n }\n }));\n }\n });\n\n return base;\n }\n\n const newJson = copyTemplated({}, template);\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newJson[i] = json[i as keyof typeof json];\n }\n }\n\n return {\n json: newJson,\n templateContext: newContext\n };\n}\n","import type { Readable } from 'svelte/types/runtime/store';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction voidUnsubscribe() {\n}\n\nexport function constStore<T>(val: T): Readable<T> {\n return {\n subscribe(cb) {\n cb(val);\n return voidUnsubscribe;\n }\n };\n}\n","// Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n\n\n import { MAX_INT, MIN_INT } from './const';\n\n function buildBinaryExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'BinaryExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildLogicalExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'LogicalExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildString(list) {\n if (list.every(it => typeof it === 'string')) {\n return {type: 'StringLiteral', value: list.join('')};\n }\n let res = list.reduce((result, element) => {\n if (typeof element === 'string' && typeof result[result.length - 1] === 'string') {\n result[result.length - 1] += element;\n } else {\n result.push(element);\n }\n return result;\n }, []).reduce((result, element) => {\n if (typeof element === 'string') {\n result.quasis.push({type: 'StringLiteral', value: element});\n } else {\n if (result.quasis.length === result.expressions.length) {\n result.quasis.push({type: 'StringLiteral', value: ''});\n }\n result.expressions.push(element);\n }\n return result;\n }, {\n type: 'TemplateLiteral',\n quasis: [],\n expressions: []\n });\n\n if (res.quasis.length === res.expressions.length) {\n res.quasis.push({type: 'StringLiteral', value: ''});\n }\n\n return res;\n }\n\n function convertToInt32(str) {\n var num = parseInt(str, 10);\n if (num > MAX_INT || num < MIN_INT) {\n throw new Error(`Value ${str} can't be converted to Integer type.`);\n }\n return num;\n }\n\n function escapeChar(char) {\n if (char === \"'\" || char === '\\\\') {\n return char;\n }\n throw new Error('Incorrect string escape');\n }\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { start: peg$parsestart, JsonStringContents: peg$parseJsonStringContents };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = \"@{\";\n var peg$c1 = \"}\";\n var peg$c2 = \"@{}\";\n var peg$c3 = \"\\\\\";\n var peg$c4 = \"?\";\n var peg$c5 = \":\";\n var peg$c6 = \"||\";\n var peg$c7 = \"&&\";\n var peg$c8 = \"==\";\n var peg$c9 = \"!=\";\n var peg$c10 = \">=\";\n var peg$c11 = \">\";\n var peg$c12 = \"<=\";\n var peg$c13 = \"<\";\n var peg$c14 = \"+\";\n var peg$c15 = \"-\";\n var peg$c16 = \"/\";\n var peg$c17 = \"*\";\n var peg$c18 = \"%\";\n var peg$c19 = \"!\";\n var peg$c20 = \"(\";\n var peg$c21 = \")\";\n var peg$c22 = \",\";\n var peg$c23 = \"'\";\n var peg$c24 = \".\";\n var peg$c25 = \"e\";\n var peg$c26 = \"E\";\n var peg$c27 = \"true\";\n var peg$c28 = \"false\";\n\n var peg$r0 = /^[^}]/;\n var peg$r1 = /^[^'}]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[a-zA-Z_0-9.]/;\n var peg$r4 = /^[a-zA-Z_]/;\n var peg$r5 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"@{\", false);\n var peg$e1 = peg$literalExpectation(\"}\", false);\n var peg$e2 = peg$literalExpectation(\"@{}\", false);\n var peg$e3 = peg$literalExpectation(\"\\\\\", false);\n var peg$e4 = peg$anyExpectation();\n var peg$e5 = peg$classExpectation([\"}\"], true, false);\n var peg$e6 = peg$literalExpectation(\"?\", false);\n var peg$e7 = peg$literalExpectation(\":\", false);\n var peg$e8 = peg$literalExpectation(\"||\", false);\n var peg$e9 = peg$literalExpectation(\"&&\", false);\n var peg$e10 = peg$literalExpectation(\"==\", false);\n var peg$e11 = peg$literalExpectation(\"!=\", false);\n var peg$e12 = peg$literalExpectation(\">=\", false);\n var peg$e13 = peg$literalExpectation(\">\", false);\n var peg$e14 = peg$literalExpectation(\"<=\", false);\n var peg$e15 = peg$literalExpectation(\"<\", false);\n var peg$e16 = peg$literalExpectation(\"+\", false);\n var peg$e17 = peg$literalExpectation(\"-\", false);\n var peg$e18 = peg$literalExpectation(\"/\", false);\n var peg$e19 = peg$literalExpectation(\"*\", false);\n var peg$e20 = peg$literalExpectation(\"%\", false);\n var peg$e21 = peg$literalExpectation(\"!\", false);\n var peg$e22 = peg$literalExpectation(\"(\", false);\n var peg$e23 = peg$literalExpectation(\")\", false);\n var peg$e24 = peg$literalExpectation(\",\", false);\n var peg$e25 = peg$otherExpectation(\"string\");\n var peg$e26 = peg$literalExpectation(\"'\", false);\n var peg$e27 = peg$classExpectation([\"'\", \"}\"], true, false);\n var peg$e28 = peg$otherExpectation(\"integer\");\n var peg$e29 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e30 = peg$otherExpectation(\"number\");\n var peg$e31 = peg$literalExpectation(\".\", false);\n var peg$e32 = peg$literalExpectation(\"e\", false);\n var peg$e33 = peg$literalExpectation(\"E\", false);\n var peg$e34 = peg$otherExpectation(\"boolean\");\n var peg$e35 = peg$literalExpectation(\"true\", false);\n var peg$e36 = peg$literalExpectation(\"false\", false);\n var peg$e37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"], \".\"], false, false);\n var peg$e38 = peg$otherExpectation(\"identifier\");\n var peg$e39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n var peg$e40 = peg$otherExpectation(\"whitespace\");\n var peg$e41 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(expr) { return expr; };\n var peg$f1 = function(list) { return buildString(list); };\n var peg$f2 = function(expr) { return expr; };\n var peg$f3 = function() { return ''; };\n var peg$f4 = function() { return text(); };\n var peg$f5 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f6 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f7 = function(str) { return str; };\n var peg$f8 = function(char) { return escapeChar(char); };\n var peg$f9 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f10 = function(expr, first, second) { return {type: 'ConditionalExpression', test: expr, consequent: first, alternate: second}; };\n var peg$f11 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f12 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f13 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f14 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f15 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f17 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n var peg$f18 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n var peg$f19 = function(id) { return {type: 'Variable', id}; };\n var peg$f20 = function(expr, list) { return [expr, ...list]; };\n var peg$f21 = function(expr) { return expr; };\n var peg$f22 = function(str) { return str; };\n var peg$f23 = function(list) { return buildString(list); };\n var peg$f24 = function(expr) { return expr; };\n var peg$f25 = function() { return ''; };\n var peg$f26 = function() { return text(); };\n var peg$f27 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f28 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f29 = function(str) { return str; };\n var peg$f30 = function(char) { return escapeChar(char); };\n var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f32 = function() { return {type: 'IntegerLiteral', value: convertToInt32(text())}; };\n var peg$f33 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f34 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f35 = function() { return {type: 'BooleanLiteral', value: true}; };\n var peg$f36 = function() { return {type: 'BooleanLiteral', value: false}; };\n var peg$f37 = function() { return {type: 'Identifier', name: text()}; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseJsonStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseJsonStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseJsonStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseJsonStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f6();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parseOr();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 63) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c5;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseExpression();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s1, s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseOr();\n }\n\n return s0;\n }\n\n function peg$parseOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseEqual();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEqual() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseComparison();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseComparison() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseSum();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSum() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f15(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseUnary();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUnary() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseUnary();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseCall();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseCall() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c20;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseArguments();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c21;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parseArguments() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parse_();\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s3 = peg$c21;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseString() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseStringContents();\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n\n return s0;\n }\n\n function peg$parseStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f23(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f25();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c23;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f28();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f31();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseInteger() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f32();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parseNumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s6 = peg$c25;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s6 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s6 = peg$c26;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s7 = peg$c14;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s7 = peg$c15;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f33();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 101) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s4 = peg$c14;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s4 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n\n return s0;\n }\n\n function peg$parseBoolean() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f35();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f36();\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parseReservedWord() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseReservedWord();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f37();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import type { EvalTypes, EvalValue } from '../eval';\n\nexport type FuncArg = EvalTypes | {\n type: EvalTypes;\n isVararg?: boolean;\n}\n\nexport interface Func {\n args: FuncArg[];\n cb(...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\n\ntype FuncMatchError = {\n type: 'mismatch';\n expected: EvalTypes;\n found: EvalTypes;\n} | {\n type: 'few';\n expected: number;\n found: number;\n} | {\n type: 'many';\n expected: number;\n found: number;\n} | {\n type: 'missing';\n};\n\n// no args\nexport function registerFunc(name: string, args: [], cb: () => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n A0 extends EvalTypes\n>(\n name: string,\n args: [A0],\n cb: (\n arg0: Extract<EvalValue, { type: A0 }>\n ) => EvalValue\n): void;\n// two specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes\n>(\n name: string,\n args: [A0, A1],\n cb: (\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>\n ) => EvalValue\n): void;\n// three specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes,\n A2 extends EvalTypes\n>(\n name: string,\n args: [A0, A1, A2],\n cb: (\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>,\n arg2: Extract<EvalValue, { type: A2 }>\n ) => EvalValue\n): void;\n// any args\nexport function registerFunc(name: string, args: FuncArg[], cb: (...args: any[]) => EvalValue): void;\n\nexport function registerFunc(name: string, args: FuncArg[], cb: (...args: EvalValue[]) => EvalValue): void {\n const desc: Func = {\n args,\n cb\n };\n\n const arr = funcs.get(name) || [];\n\n if (!funcs.has(name)) {\n funcs.set(name, arr);\n }\n arr.push(desc);\n\n const funcKey = name + ':' + args.map(it => {\n if (typeof it === 'object') {\n return it.type;\n }\n return it;\n }).join('#');\n\n funcByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[]): {\n type: 'match';\n} | FuncMatchError {\n let minArgs = func.args.length;\n let maxArgs = func.args.length;\n const lastArg = func.args[func.args.length - 1];\n\n if (typeof lastArg === 'object' && lastArg.isVararg) {\n --minArgs;\n maxArgs = Infinity;\n }\n\n if (args.length < minArgs) {\n return {\n type: 'few',\n expected: minArgs,\n found: args.length\n };\n } else if (args.length > maxArgs) {\n return {\n type: 'many',\n expected: maxArgs,\n found: args.length\n };\n }\n\n for (let i = 0; i < args.length; ++i) {\n let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n if (typeof funcArg !== 'object') {\n funcArg = {\n type: funcArg\n };\n }\n\n if (funcArg.type !== args[i].type) {\n return {\n type: 'mismatch',\n expected: funcArg.type,\n found: args[i].type\n };\n }\n }\n\n return {\n type: 'match'\n };\n}\n\nexport function findBestMatchedFunc(funcName: string, args: EvalValue[]): Func | FuncMatchError {\n const list = funcs.get(funcName);\n if (!list) {\n return {\n type: 'missing'\n };\n }\n\n let firstError: FuncMatchError | null = null;\n for (let i = 0; i < list.length; ++i) {\n const match = matchFuncArgs(list[i], args);\n if (match.type === 'match') {\n return list[i];\n }\n if (!firstError) {\n firstError = match;\n }\n }\n\n if (!firstError) {\n throw new Error('Missing function');\n }\n\n return firstError;\n}\n","import { Node } from './ast';\n\nexport function walk(ast: Node, visitors: {\n [Type in Node['type']]?: (node: Extract<Node, { type: Type }>) => void;\n}): void {\n visitors[ast.type]?.(ast as any);\n\n switch (ast.type) {\n case 'TemplateLiteral':\n ast.expressions.forEach(item => {\n walk(item, visitors);\n });\n break;\n case 'BinaryExpression':\n case 'LogicalExpression':\n walk(ast.left, visitors);\n walk(ast.right, visitors);\n break;\n case 'UnaryExpression':\n walk(ast.argument, visitors);\n break;\n case 'ConditionalExpression':\n walk(ast.test, visitors);\n walk(ast.consequent, visitors);\n walk(ast.alternate, visitors);\n break;\n case 'CallExpression':\n ast.arguments.forEach(item => {\n walk(item, visitors);\n });\n break;\n }\n}\n","import type { EvalValue, EvalValueBase } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { EvalTypes } from './eval';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { MAX_INT, MIN_INT } from './const';\nimport { parseColor, ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\n\nexport function valToInternal(val: EvalValue): EvalValue {\n if (val.type === 'url' || val.type === 'color') {\n return {\n type: 'string',\n value: val.value\n };\n }\n\n return val;\n}\n\nexport function dateToString(date: Date): string {\n return date\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, '');\n}\n\nexport function valToString(val: EvalValue): string {\n if (val.type === 'string') {\n return val.value;\n } else if (val.type === 'integer') {\n return String(val.value);\n } else if (val.type === 'number') {\n let res = String(val.value);\n\n if (!res.includes('.')) {\n if (res.includes('e')) {\n res = res.replace('e', '.0e');\n } else {\n res += '.0';\n }\n }\n\n res = res.replace(/e\\+?/i, 'E');\n\n return res;\n } else if (val.type === 'boolean') {\n return val.value ? 'true' : 'false';\n } else if (val.type === 'datetime') {\n return dateToString(val.value);\n } else if (val.type === 'color') {\n return stringifyColor(safeConvertColor(val.value));\n } else if (val.type === 'url') {\n return val.value;\n }\n\n\n // For purpose when new eval value types will be added\n throw new Error(`Unexpected type ${(val as EvalValueBase).type}`);\n}\n\nexport function valToPreview(val: EvalValue): string {\n let res = valToString(val);\n\n if (val.type === 'string') {\n res = \"'\" +\n res\n .replace(/\\\\/g, '\\\\\\'')\n .replace(/'/g, '\\\\\\'') +\n \"'\";\n }\n\n return res;\n}\n\nexport function typeToString(type: EvalTypes): string {\n if (type === 'datetime') {\n return 'DateTime';\n }\n return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nconst int32Array = new Int32Array(1);\nexport function roundInteger(val: number): number {\n int32Array[0] = val;\n return int32Array[0];\n}\n\nexport function checkIntegerOverflow(val: number): void {\n if (val < MIN_INT || val > MAX_INT) {\n throw new Error('Integer overflow.');\n }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n const res: string[] = [];\n\n walk(ast, {\n Variable(node: Variable): void {\n res.push(node.id.name);\n }\n });\n\n return res;\n}\n\nexport function evalError(msg: string, details: string): never {\n throw new Error(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function containsUnsetVariables(ast: Node, variables: VariablesMap): boolean {\n let result = false;\n\n walk(ast, {\n Variable(node: Variable): void {\n if (!variables.has(node.id.name)) {\n result = true;\n }\n }\n });\n\n return result;\n}\n\nexport function safeConvertColor(color: string): ParsedColor {\n const res = parseColor(color);\n\n if (res) {\n return res;\n }\n\n throw new Error('Unable to convert value to Color, expected format #AARRGGBB.');\n}\n\nexport function stringifyColor(color: ParsedColor): string {\n return `#${[color.a, color.r, color.g, color.b].map(it => {\n if (it < 0 || it > 255) {\n throw new Error('Value out of range 0..1.');\n }\n\n return padLeft(Math.round(it).toString(16), 2);\n }).join('').toUpperCase()}`;\n}\n","import type { BooleanValue, ColorValue, EvalValue, IntegerValue, NumberValue, StringValue, UrlValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, COLOR, INTEGER, MAX_INT, MIN_INT, NUMBER, STRING, URL } from '../const';\nimport { valToString } from '../utils';\n\nfunction toString(arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue): EvalValue {\n return {\n type: STRING,\n value: valToString(arg)\n };\n}\n\n\nfunction toNumber(arg: IntegerValue | StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || !Number.isFinite(num)) {\n throw new Error('Unable to convert value to Number.');\n }\n\n return {\n type: NUMBER,\n value: num\n };\n}\n\n\nfunction toIntegerNumber(arg: NumberValue): EvalValue {\n if (arg.value > MAX_INT || arg.value < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n const num = arg.value - (arg.value % 1);\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerString(arg: StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || num % 1 !== 0 || num > MAX_INT || num < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerBoolean(arg: BooleanValue): EvalValue {\n return {\n type: INTEGER,\n value: arg.value ? 1 : 0\n };\n}\n\n\nfunction toBooleanInteger(arg: IntegerValue): EvalValue {\n if (arg.value !== 1 && arg.value !== 0) {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value\n };\n}\n\nfunction toBooleanString(arg: StringValue): EvalValue {\n if (arg.value !== 'true' && arg.value !== 'false') {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value === 'true' ? 1 : 0\n };\n}\n\nfunction encodeUri(str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: encodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to encodeUri string.');\n }\n}\n\nfunction decodeUri(str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: decodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to decodeUri string.');\n }\n}\n\nexport function registerStd(): void {\n registerFunc('toString', [INTEGER], toString);\n registerFunc('toString', [NUMBER], toString);\n registerFunc('toString', [BOOLEAN], toString);\n registerFunc('toString', [COLOR], toString);\n registerFunc('toString', [URL], toString);\n\n registerFunc('toNumber', [INTEGER], toNumber);\n registerFunc('toNumber', [STRING], toNumber);\n\n registerFunc('toInteger', [NUMBER], toIntegerNumber);\n registerFunc('toInteger', [STRING], toIntegerString);\n registerFunc('toInteger', [BOOLEAN], toIntegerBoolean);\n\n registerFunc('toBoolean', [INTEGER], toBooleanInteger);\n registerFunc('toBoolean', [STRING], toBooleanString);\n\n registerFunc('encodeUri', [STRING], encodeUri);\n registerFunc('decodeUri', [STRING], decodeUri);\n}\n","import type { EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\n\nfunction len(arg: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: arg.value.length\n };\n}\n\nfunction contains(wholeStr: StringValue, partStr: StringValue): EvalValue {\n return {\n type: BOOLEAN,\n value: wholeStr.value.includes(partStr.value) ? 1 : 0\n };\n}\n\nfunction substring(str: StringValue, start: IntegerValue, end: IntegerValue): EvalValue {\n if (end.value < start.value) {\n throw new Error('Indexes should be in ascending order.');\n }\n\n if (\n start.value < 0 || start.value > str.value.length ||\n end.value < 0 || end.value > str.value.length\n ) {\n throw new Error('Indexes are out of bounds.');\n }\n\n return {\n type: STRING,\n value: str.value.substring(start.value, end.value)\n };\n}\n\nfunction replaceAll(str: StringValue, what: StringValue, replacer: StringValue): EvalValue {\n let res: string;\n\n if (what.value) {\n res = str.value.replace(new RegExp(escapeRegExp(what.value), 'g'), replacer.value);\n } else {\n // empty str\n res = str.value;\n }\n\n return {\n type: STRING,\n value: res\n };\n}\n\nfunction index(str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: str.value.indexOf(what.value)\n };\n}\n\nfunction lastIndex(str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: str.value.lastIndexOf(what.value)\n };\n}\n\nfunction trim(str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.trim()\n };\n}\n\nfunction trimLeft(str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/^\\s+/, '')\n };\n}\n\nfunction trimRight(str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/\\s+$/, '')\n };\n}\n\nfunction toUpperCase(str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toUpperCase()\n };\n}\n\nfunction toLowerCase(str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toLowerCase()\n };\n}\n\nfunction calcPad(val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): string {\n if (!pad.value.length) {\n return '';\n }\n\n let part = '';\n const str = val.type === STRING ? val.value : valToString(val);\n\n while (part.length + str.length < len.value) {\n part += pad.value;\n }\n if (part.length > 0 && part.length + str.length > len.value) {\n part = part.substring(0, len.value - str.length);\n }\n\n return part;\n}\n\nfunction padStart(val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): EvalValue {\n const prefix = calcPad(val, len, pad);\n\n return {\n type: STRING,\n value: prefix + valToString(val)\n };\n}\n\nfunction padEnd(val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): EvalValue {\n const suffix = calcPad(val, len, pad);\n\n return {\n type: STRING,\n value: valToString(val) + suffix\n };\n}\n\nexport function registerStrings(): void {\n registerFunc('len', [STRING], len);\n registerFunc('contains', [STRING, STRING], contains);\n registerFunc('substring', [STRING, INTEGER, INTEGER], substring);\n registerFunc('replaceAll', [STRING, STRING, STRING], replaceAll);\n registerFunc('index', [STRING, STRING], index);\n registerFunc('lastIndex', [STRING, STRING], lastIndex);\n registerFunc('trim', [STRING], trim);\n registerFunc('trimLeft', [STRING], trimLeft);\n registerFunc('trimRight', [STRING], trimRight);\n registerFunc('toUpperCase', [STRING], toUpperCase);\n registerFunc('toLowerCase', [STRING], toLowerCase);\n registerFunc('padStart', [STRING, INTEGER, STRING], padStart);\n registerFunc('padStart', [INTEGER, INTEGER, STRING], padStart);\n registerFunc('padEnd', [STRING, INTEGER, STRING], padEnd);\n registerFunc('padEnd', [INTEGER, INTEGER, STRING], padEnd);\n}\n","import type { EvalValue, IntegerValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_INT, MAX_NUMBER, MIN_INT, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\n\nfunction div<T extends IntegerValue | NumberValue>(arg0: T, arg1: T): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n let res = arg0.value / arg1.value;\n if (arg0.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nfunction mod<T extends IntegerValue | NumberValue>(arg0: T, arg1: T): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n let res = arg0.value % arg1.value;\n if (arg0.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nfunction mul<T extends IntegerValue | NumberValue>(...args: T[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args[0].type,\n value: res\n };\n}\n\nfunction sub<T extends IntegerValue | NumberValue>(...args: T[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args.length ? args[0].type : INTEGER,\n value: res\n };\n}\n\nfunction sum<T extends IntegerValue | NumberValue>(...args: T[]): EvalValue {\n let res = 0;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args.length ? args[0].type : INTEGER,\n value: res\n };\n}\n\nfunction abs(arg: IntegerValue | NumberValue): EvalValue {\n const res = Math.abs(arg.value);\n\n if (arg.type === INTEGER) {\n checkIntegerOverflow(res);\n }\n\n return {\n type: arg.type,\n value: res\n };\n}\n\nfunction max<T extends IntegerValue | NumberValue>(...args: T[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n return {\n type: args[0].type,\n value: Math.max(...args.map(arg => arg.value))\n };\n}\n\nfunction min<T extends IntegerValue | NumberValue>(...args: T[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n return {\n type: args[0].type,\n value: Math.min(...args.map(arg => arg.value))\n };\n}\n\nfunction maxNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MAX_NUMBER\n };\n}\n\nfunction minNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MIN_NUMBER\n };\n}\n\nfunction maxInteger(): EvalValue {\n return {\n type: INTEGER,\n value: MAX_INT\n };\n}\n\nfunction minInteger(): EvalValue {\n return {\n type: INTEGER,\n value: MIN_INT\n };\n}\n\nfunction round(arg: NumberValue): EvalValue {\n const sign = Math.sign(arg.value);\n\n\n return {\n type: NUMBER,\n // js treats Math.round(-0.5) as 0, which is different to other platforms\n value: sign * Math.round(Math.abs(arg.value))\n };\n}\n\nfunction floor(arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.floor(arg.value)\n };\n}\n\nfunction ceil(arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.ceil(arg.value)\n };\n}\n\nfunction signum(arg: IntegerValue | NumberValue): EvalValue {\n return {\n type: arg.type,\n value: Math.sign(arg.value)\n };\n}\n\nfunction copySign<T extends IntegerValue | NumberValue>(arg0: T, arg1: T): EvalValue {\n let res: number;\n\n if (arg1.value === 0 && arg0.type === INTEGER) {\n res = arg0.value;\n } else if (arg0.value === 0 && arg0.type === INTEGER) {\n res = 0;\n } else {\n let sign = Math.sign(arg1.value);\n\n if (arg0.type === NUMBER && sign === 0) {\n sign = Object.is(sign, 0) ? 1 : -1;\n }\n\n res = Math.abs(arg0.value) * sign;\n }\n\n if (arg0.type === INTEGER) {\n checkIntegerOverflow(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nexport function registerMath(): void {\n registerFunc('div', [INTEGER, INTEGER], div);\n registerFunc('div', [NUMBER, NUMBER], div);\n\n registerFunc('mod', [INTEGER, INTEGER], mod);\n registerFunc('mod', [NUMBER, NUMBER], mod);\n\n registerFunc('mul', [{\n type: INTEGER,\n isVararg: true\n }], mul);\n registerFunc('mul', [{\n type: NUMBER,\n isVararg: true\n }], mul);\n\n registerFunc('sub', [{\n type: INTEGER,\n isVararg: true\n }], sub);\n registerFunc('sub', [{\n type: NUMBER,\n isVararg: true\n }], sub);\n\n registerFunc('sum', [{\n type: INTEGER,\n isVararg: true\n }], sum);\n registerFunc('sum', [{\n type: NUMBER,\n isVararg: true\n }], sum);\n\n registerFunc('abs', [INTEGER], abs);\n registerFunc('abs', [NUMBER], abs);\n\n registerFunc('max', [{\n type: INTEGER,\n isVararg: true\n }], max);\n registerFunc('max', [{\n type: NUMBER,\n isVararg: true\n }], max);\n\n registerFunc('min', [{\n type: INTEGER,\n isVararg: true\n }], min);\n registerFunc('min', [{\n type: NUMBER,\n isVararg: true\n }], min);\n\n registerFunc('maxNumber', [], maxNumber);\n registerFunc('minNumber', [], minNumber);\n\n registerFunc('maxInteger', [], maxInteger);\n registerFunc('minInteger', [], minInteger);\n\n registerFunc('round', [NUMBER], round);\n registerFunc('floor', [NUMBER], floor);\n registerFunc('ceil', [NUMBER], ceil);\n\n registerFunc('signum', [NUMBER], signum);\n registerFunc('signum', [INTEGER], signum);\n\n registerFunc('copySign', [NUMBER, NUMBER], copySign);\n registerFunc('copySign', [INTEGER, INTEGER], copySign);\n}\n","import type { ColorValue, EvalValue, NumberValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { ParsedColor } from '../../utils/correctColor';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(field: keyof ParsedColor): (color: StringValue | ColorValue) => EvalValue {\n return color => {\n const parsed = safeConvertColor(color.value);\n\n return {\n type: NUMBER,\n value: parsed[field] / 255\n };\n };\n}\n\nfunction colorSetter(field: keyof ParsedColor): (color: StringValue | ColorValue, val: NumberValue) => EvalValue {\n return (color, val) => {\n const parsed = safeConvertColor(color.value);\n\n parsed[field] = val.value * 255;\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n };\n}\n\nconst getColorAlpha = colorGetter('a');\nconst getColorRed = colorGetter('r');\nconst getColorGreen = colorGetter('g');\nconst getColorBlue = colorGetter('b');\n\nconst setColorAlpha = colorSetter('a');\nconst setColorRed = colorSetter('r');\nconst setColorGreen = colorSetter('g');\nconst setColorBlue = colorSetter('b');\n\nfunction rgb(red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n const parsed: ParsedColor = {\n a: 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nfunction argb(alpha: NumberValue, red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n const parsed: ParsedColor = {\n a: alpha.value * 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nexport function registerColors(): void {\n registerFunc('getColorAlpha', [STRING], getColorAlpha);\n registerFunc('getColorAlpha', [COLOR], getColorAlpha);\n registerFunc('getColorRed', [STRING], getColorRed);\n registerFunc('getColorRed', [COLOR], getColorRed);\n registerFunc('getColorGreen', [STRING], getColorGreen);\n registerFunc('getColorGreen', [COLOR], getColorGreen);\n registerFunc('getColorBlue', [STRING], getColorBlue);\n registerFunc('getColorBlue', [COLOR], getColorBlue);\n\n registerFunc('setColorAlpha', [STRING, NUMBER], setColorAlpha);\n registerFunc('setColorAlpha', [COLOR, NUMBER], setColorAlpha);\n registerFunc('setColorRed', [STRING, NUMBER], setColorRed);\n registerFunc('setColorRed', [COLOR, NUMBER], setColorRed);\n registerFunc('setColorGreen', [STRING, NUMBER], setColorGreen);\n registerFunc('setColorGreen', [COLOR, NUMBER], setColorGreen);\n registerFunc('setColorBlue', [STRING, NUMBER], setColorBlue);\n registerFunc('setColorBlue', [COLOR, NUMBER], setColorBlue);\n\n registerFunc('rgb', [NUMBER, NUMBER, NUMBER], rgb);\n registerFunc('argb', [NUMBER, NUMBER, NUMBER, NUMBER], argb);\n}\n","import type { EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\n\nfunction getDuration(milliseconds: IntegerValue, delimiter: number, whole?: number): EvalValue {\n if (milliseconds.value < 0) {\n throw new Error('Expecting non-negative number of milliseconds.');\n }\n\n let val = Math.floor(milliseconds.value / delimiter);\n if (whole) {\n val = val % whole;\n }\n\n return {\n type: INTEGER,\n value: val\n };\n}\n\nconst MS_IN_SECOND = 1000;\nconst SECONDS_IN_MINUTE = 60;\nconst MS_IN_MINUTE = 1000 * 60;\nconst MINUTES_IN_HOUR = 60;\nconst MS_IN_HOUR = 1000 * 60 * 60;\nconst HOURS_IN_DAY = 24;\nconst MS_IN_DAY = 1000 * 60 * 60 * 24;\nconst MS_IN_WEEK = 1000 * 60 * 60 * 24 * 7;\n\nfunction getIntervalSeconds(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_WEEK);\n}\n\nexport function registerInterval(): void {\n registerFunc('getIntervalSeconds', [INTEGER], getIntervalSeconds);\n registerFunc('getIntervalTotalSeconds', [INTEGER], getIntervalTotalSeconds);\n registerFunc('getIntervalMinutes', [INTEGER], getIntervalMinutes);\n registerFunc('getIntervalTotalMinutes', [INTEGER], getIntervalTotalMinutes);\n registerFunc('getIntervalHours', [INTEGER], getIntervalHours);\n registerFunc('getIntervalTotalHours', [INTEGER], getIntervalTotalHours);\n registerFunc('getIntervalTotalDays', [INTEGER], getIntervalTotalDays);\n registerFunc('getIntervalTotalWeeks', [INTEGER], getIntervalTotalWeeks);\n}\n","/* eslint-disable no-else-return */\n\nimport {\n BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n LogicalExpression,\n Node, NumberLiteral, StringLiteral, SumOperator,\n TemplateLiteral,\n UnaryExpression, Variable\n} from './ast';\nimport { findBestMatchedFunc, Func, funcByArgs, funcs } from './funcs/funcs';\nimport { evalError, roundInteger, typeToString, valToInternal, valToPreview, valToString } from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue } from './variable';\nimport { walk } from './walk';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime';\n\nexport interface EvalValueBase {\n type: string;\n value: unknown;\n}\n\nexport interface StringValue extends EvalValueBase {\n type: 'string';\n value: string;\n}\n\nexport interface UrlValue extends EvalValueBase {\n type: 'url';\n value: string;\n}\n\nexport interface ColorValue extends EvalValueBase {\n type: 'color';\n value: string;\n}\n\nexport interface NumberValue extends EvalValueBase {\n type: 'number';\n value: number;\n}\n\nexport interface IntegerValue extends EvalValueBase {\n type: 'integer';\n value: number;\n}\n\nexport interface BooleanValue extends EvalValueBase {\n type: 'boolean';\n value: number;\n}\n\nexport interface DatetimeValue extends EvalValueBase {\n type: 'datetime';\n value: Date;\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n BooleanValue | DatetimeValue;\n\nexport interface EvalError {\n type: 'error';\n value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nregister();\n\nfunction evalStringLiteral(vars: VariablesMap, expr: StringLiteral): EvalValue {\n return {\n type: STRING,\n value: expr.value\n };\n}\n\nfunction evalNumberLiteral(vars: VariablesMap, expr: NumberLiteral): EvalValue {\n return {\n type: NUMBER,\n value: expr.value\n };\n}\n\nfunction evalIntegerLiteral(vars: VariablesMap, expr: IntegerLiteral): EvalValue {\n return {\n type: INTEGER,\n value: expr.value\n };\n}\n\nfunction evalBooleanLiteral(vars: VariablesMap, expr: BooleanLiteral): EvalValue {\n return {\n type: BOOLEAN,\n value: expr.value ? 1 : 0\n };\n}\n\nfunction evalUnary(vars: VariablesMap, expr: UnaryExpression): EvalValue {\n const val = valToInternal(evalAny(vars, expr.argument));\n\n switch (expr.operator) {\n case '!':\n if (val.type === BOOLEAN) {\n return {\n type: BOOLEAN,\n value: val.value ? 0 : 1\n };\n } else {\n evalError(`${expr.operator}${valToPreview(val)}`, 'A Boolean is expected after a unary not.');\n }\n case '+':\n case '-':\n const mul = expr.operator === '+' ? 1 : -1;\n\n if (val.type === INTEGER) {\n return {\n type: INTEGER,\n value: val.value * mul\n };\n } else if (val.type === NUMBER) {\n return {\n type: NUMBER,\n value: val.value * mul\n };\n } else {\n evalError(\n `${expr.operator}${valToPreview(val)}`,\n `A Number is expected after a unary ${expr.operator === '+' ? 'plus' : 'minus'}.`\n );\n }\n }\n}\n\nfunction evalConditional(vars: VariablesMap, expr: ConditionalExpression): EvalValue {\n const test = valToInternal(evalAny(vars, expr.test));\n if (test.type === BOOLEAN) {\n if (test.value) {\n return evalAny(vars, expr.consequent);\n } else {\n return evalAny(vars, expr.alternate);\n }\n } else {\n evalError(\n `${valToPreview(test)} ? ${valToPreview(evalAny(vars, expr.consequent))} : ${valToPreview(evalAny(vars, expr.alternate))}`,\n 'Ternary must be called with a Boolean value as a condition.'\n );\n }\n}\n\nfunction evalTemplateLiteral(vars: VariablesMap, expr: TemplateLiteral): EvalValue {\n let result = '';\n\n if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n return evalAny(vars, expr.expressions[0]);\n }\n\n for (let i = 0; i < expr.expressions.length; ++i) {\n result += expr.quasis[i].value;\n result += valToString(evalAny(vars, expr.expressions[i]));\n }\n result += expr.quasis[expr.quasis.length - 1].value;\n\n return {\n type: STRING,\n value: result\n };\n}\n\nfunction evalLogicalExpression(vars: VariablesMap, expr: LogicalExpression): EvalValue {\n const left = valToInternal(evalAny(vars, expr.left));\n if (left.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ...`,\n `'${expr.operator}' must be called with boolean operands.`\n );\n }\n\n if (expr.operator === '||' && left.value) {\n return left;\n }\n if (expr.operator === '&&' && !left.value) {\n return {\n type: BOOLEAN,\n value: 0\n };\n }\n\n const right = valToInternal(evalAny(vars, expr.right));\n if (right.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${expr.operator}' cannot be applied to different types: Boolean and ${typeToString(right.type)}.`\n );\n }\n\n return {\n type: BOOLEAN,\n value: right.value\n };\n}\n\nfunction evalBinaryEquality<T extends EvalValue>(operator: EqualityOperator, left: T, right: T): EvalValue {\n let res: boolean;\n\n if (left.type === DATETIME && right.type === DATETIME) {\n res = left.value.getTime() === right.value.getTime();\n } else {\n res = left.value === right.value;\n }\n\n if (operator === '!=') {\n res = !res;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinaryCompare<T extends EvalValue>(operator: CompareOperator, left: T, right: T): EvalValue {\n if (left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: boolean;\n const leftVal = left.type === DATETIME ? left.value.getTime() : left.value;\n const rightVal = right.type === DATETIME ? right.value.getTime() : right.value;\n\n if (operator === '>') {\n res = leftVal > rightVal;\n } else if (operator === '>=') {\n res = leftVal >= rightVal;\n } else if (operator === '<') {\n res = leftVal < rightVal;\n } else {\n res = leftVal <= rightVal;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinarySum<T extends EvalValue>(operator: SumOperator, left: T, right: T): EvalValue {\n if (left.type !== STRING && left.type !== NUMBER && left.type !== INTEGER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n if (left.type === STRING) {\n if (operator === '-') {\n evalError(\n `${valToPreview(left)} - ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n return {\n type: STRING,\n value: left.value + right.value\n };\n }\n\n let res = operator === '+' ? left.value + (right.value as number) : left.value - (right.value as number);\n\n // integer\n if (left.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: left.type,\n value: res\n };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(operator: FactorOperator, left: T, right: T): EvalValue {\n if (left.type !== INTEGER && left.type !== NUMBER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: number;\n if (operator === '*') {\n res = left.value * (right.value as number);\n } else if (operator === '/' || operator === '%') {\n if (right.value === 0) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n 'Division by zero is not supported.'\n );\n }\n if (operator === '/') {\n res = left.value / (right.value as number);\n } else {\n res = left.value % (right.value as number);\n }\n } else {\n throw new Error(`Unsupported operation ${operator}`);\n }\n\n if (left.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: left.type,\n value: res\n };\n}\n\nfunction evalBinaryExpression(vars: VariablesMap, expr: BinaryExpression): EvalValue {\n const operator = expr.operator;\n const left = evalAny(vars, expr.left);\n const right = evalAny(vars, expr.right);\n\n if (left.type !== right.type) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to different types: ${typeToString(left.type)} and ${typeToString(right.type)}.`\n );\n }\n\n if (operator === '==' || operator === '!=') {\n return evalBinaryEquality(operator, left, right);\n } else if (operator === '>' || operator === '>=' || operator === '<' || operator === '<=') {\n return evalBinaryCompare(operator, left, right);\n } else if (operator === '+' || operator === '-') {\n return evalBinarySum(operator, left, right);\n } else if (operator === '/' || operator === '*' || operator === '%') {\n return evalBinaryFactor(operator, left, right);\n }\n\n throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction argsToStr(args: EvalValue[]): string {\n return args.map(valToPreview).join(', ');\n}\n\nfunction evalCallExpression(vars: VariablesMap, expr: CallExpression): EvalValue {\n const funcName = expr.callee.name;\n\n let func: Func | undefined;\n\n const args = expr.arguments.map(arg => evalAny(vars, arg));\n const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n\n if (!funcByArgs.has(funcKey)) {\n const findRes = findBestMatchedFunc(funcName, args);\n if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n const prefix = `${funcName}(${argsToStr(args)})`;\n\n if (findRes.type === 'few' && args.length === 0) {\n evalError(prefix, `Non empty argument list is required for function '${funcName}'.`);\n } else if (findRes.type === 'many') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else {\n evalError(prefix, `Unknown function name: ${funcName}.`);\n }\n }\n func = findRes;\n } else {\n func = funcByArgs.get(funcKey);\n }\n\n if (!func) {\n throw new Error('Function not found');\n }\n\n try {\n return func.cb(...args);\n } catch (err: any) {\n const prefix = `${funcName}(${argsToStr(args)})`;\n evalError(prefix, err.message);\n }\n}\n\nfunction evalVariable(vars: VariablesMap, expr: Variable): EvalValue {\n const varName = expr.id.name;\n const variable = vars.get(varName);\n\n if (variable) {\n return variableToValue(variable);\n }\n\n throw new Error(`Variable '${varName}' is missing.`);\n}\n\nconst EVAL_MAP = {\n StringLiteral: evalStringLiteral,\n NumberLiteral: evalNumberLiteral,\n IntegerLiteral: evalIntegerLiteral,\n BooleanLiteral: evalBooleanLiteral,\n UnaryExpression: evalUnary,\n ConditionalExpression: evalConditional,\n TemplateLiteral: evalTemplateLiteral,\n LogicalExpression: evalLogicalExpression,\n BinaryExpression: evalBinaryExpression,\n CallExpression: evalCallExpression,\n Variable: evalVariable\n};\n\nexport function evalAny(vars: VariablesMap, expr: Node): EvalValue {\n if (expr.type in EVAL_MAP) {\n return EVAL_MAP[expr.type](vars, expr as any);\n }\n throw new Error('Unsupported expression');\n}\n\nfunction checkVariables(vars: VariablesMap, expr: Node): void {\n let unknownVariableName = '';\n\n walk(expr, {\n Variable(node) {\n if (!unknownVariableName && !vars.has(node.id.name)) {\n unknownVariableName = node.id.name;\n }\n }\n });\n\n if (unknownVariableName) {\n throw new Error(`Variable '${unknownVariableName}' is missing.`);\n }\n}\n\nexport function evalExpression(vars: VariablesMap, expr: Node): EvalResult {\n try {\n checkVariables(vars, expr);\n return evalAny(vars, expr);\n } catch (err: any) {\n return {\n type: 'error',\n value: err.message\n };\n }\n}\n","import type { DatetimeValue, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER } from '../const';\nimport { valToString } from '../utils';\n\nfunction parseUnixTime(arg: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(arg.value * 1000)\n };\n}\n\nfunction nowLocal(): EvalValue {\n return {\n type: DATETIME,\n value: new Date()\n };\n}\n\nfunction addMillis(datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(datetime.value.getTime() + milliseconds.value)\n };\n}\n\nfunction setYear(datetime: DatetimeValue, year: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n copy.setFullYear(year.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMonth(datetime: DatetimeValue, month: IntegerValue): EvalValue {\n if (month.value < 1 || month.value > 12) {\n throw new Error(`Expecting month in [1..12], instead got ${month.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setMonth(month.value - 1);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction getMaxDate(date: Date): number {\n const copy = new Date(date);\n\n copy.setMonth(copy.getMonth() + 1);\n copy.setDate(0);\n\n return copy.getDate();\n}\n\nfunction setDay(datetime: DatetimeValue, day: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n if (day.value <= 0 && day.value !== -1 || day.value > getMaxDate(copy)) {\n throw new Error(`Unable to set day ${day.value} for date ${valToString(datetime)}.`);\n }\n\n copy.setDate(day.value === -1 ? 0 : day.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setHours(datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n if (hours.value < 0 || hours.value > 23) {\n throw new Error(`Expecting hours in [0..23], instead got ${hours.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setHours(hours.value - copy.getTimezoneOffset() / 60);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMinutes(datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n if (minutes.value < 0 || minutes.value > 59) {\n throw new Error(`Expecting minutes in [0..59], instead got ${minutes.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setMinutes(minutes.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setSeconds(datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n if (seconds.value < 0 || seconds.value > 59) {\n throw new Error(`Expecting seconds in [0..59], instead got ${seconds.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setSeconds(seconds.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMillis(datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n if (millis.value < 0 || millis.value > 999) {\n throw new Error(`Expecting millis in [0..999], instead got ${millis.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setMilliseconds(millis.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nexport function registerDatetime(): void {\n registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n registerFunc('nowLocal', [], nowLocal);\n registerFunc('addMillis', [DATETIME, INTEGER], addMillis);\n registerFunc('setYear', [DATETIME, INTEGER], setYear);\n registerFunc('setMonth', [DATETIME, INTEGER], setMonth);\n registerFunc('setDay', [DATETIME, INTEGER], setDay);\n registerFunc('setHours', [DATETIME, INTEGER], setHours);\n registerFunc('setMinutes', [DATETIME, INTEGER], setMinutes);\n registerFunc('setSeconds', [DATETIME, INTEGER], setSeconds);\n registerFunc('setMillis', [DATETIME, INTEGER], setMillis);\n}\n","export function escapeRegExp(str: string): string {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","import type { Node } from './ast';\nimport type { VariableValue } from './variable';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, VariablesMap } from './eval';\nimport { containsUnsetVariables, dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\n\nclass ExpressionBinding {\n private readonly ast: Node;\n\n constructor(ast: Node) {\n this.ast = ast;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n if (containsUnsetVariables(this.ast, variables)) {\n return undefined;\n }\n\n try {\n const result = evalExpression(variables, this.ast);\n if (result.type === 'error') {\n logError(wrapError(new Error('Expression execution error'), {\n additional: {\n message: result.value\n }\n }));\n return undefined;\n }\n\n const value = result.value;\n if (value instanceof Date) {\n return dateToString(value);\n }\n if (result.type === 'boolean') {\n return Boolean(value);\n }\n if (result.type === 'color') {\n const parsed = parseColor(String(value));\n if (parsed) {\n return stringifyColor(parsed);\n }\n logError(wrapError(new Error('Expression execution error')));\n }\n return value;\n } catch (err) {\n logError(wrapError(new Error('Expression execution error')));\n return undefined;\n }\n }\n}\n\nexport type MaybeMissing<T> = T | (\n T extends (infer U)[] ?\n MaybeMissing<U>[] :\n (\n T extends object ?\n {\n [P in keyof T]: MaybeMissing<T[P]>;\n } :\n T | undefined\n )\n);\n\nfunction hasExpressions(str: string): boolean {\n return str.indexOf('@{') > -1 || str.indexOf('\\\\') > -1;\n}\n\nfunction prepareVarsObj<T>(\n jsonProp: T,\n store: {\n vars: string[];\n hasExpression: boolean;\n },\n logError: LogError\n): unknown {\n if (jsonProp) {\n if (typeof jsonProp === 'string') {\n if (hasExpressions(jsonProp)) {\n store.hasExpression = true;\n\n try {\n const ast = parse(jsonProp, {\n startRule: 'JsonStringContents'\n });\n const propVars = gatherVarsFromAst(ast);\n store.vars.push(...propVars);\n\n return new ExpressionBinding(ast);\n } catch (err) {\n logError(wrapError(new Error('Unable to parse expression'), {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n }\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(item => prepareVarsObj(item, store, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = prepareVarsObj(jsonProp[key], store, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nfunction applyVars(jsonProp: unknown, variables: VariablesMap, logError: LogError): unknown {\n if (jsonProp) {\n if (jsonProp instanceof ExpressionBinding) {\n return jsonProp.apply(variables, logError);\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(it => applyVars(it, variables, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = applyVars(jsonProp[key as keyof typeof jsonProp], variables, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nexport function prepareVars<T>(jsonProp: T, logError: LogError): {\n vars: string[];\n hasExpression: boolean;\n applyVars: (variables: VariablesMap) => MaybeMissing<T>;\n} {\n const store: {\n vars: string[];\n hasExpression: boolean;\n } = {\n vars: [],\n hasExpression: false\n };\n const root = prepareVarsObj(jsonProp, store, logError);\n\n const vars = uniq(store.vars);\n\n return {\n vars,\n hasExpression: store.hasExpression,\n applyVars(variables: VariablesMap) {\n return applyVars(root, variables, logError) as MaybeMissing<T>;\n }\n };\n}\n","export function uniq(list: string[]): string[] {\n return [...new Set(list)];\n}\n","import type { Writable } from 'svelte/types/runtime/store';\nimport { createPagersStore } from './pagers';\n\nexport const storesMap: Record<string, () => Writable<any>> = {\n pagers: createPagersStore\n};\n","import { writable } from 'svelte/store';\n\nexport interface PagerData {\n instId: string;\n size: number;\n currentItem: number;\n scrollToPagerItem(index: number): void;\n}\n\nexport function createPagersStore() {\n return writable(new Map<string, PagerData>());\n}\n","import type { Writable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nconst controllerToStore = new Map<GlobalVariablesController, Writable<string>>();\nconst controllerToVars = new Map<GlobalVariablesController, Map<string, Variable>>();\n\nexport function getControllerStore(controller: GlobalVariablesController): Writable<string> {\n const store = controllerToStore.get(controller) || writable('');\n\n if (!controllerToStore.has(controller)) {\n controllerToStore.set(controller, store);\n }\n\n return store;\n}\n\nexport function getControllerVars(controller: GlobalVariablesController): Map<string, Variable> {\n const map = controllerToVars.get(controller) || new Map();\n\n if (!controllerToVars.has(controller)) {\n controllerToVars.set(controller, map);\n }\n\n return map;\n}\n\nexport class GlobalVariablesController {\n setVariable(variable: Variable): void {\n const name = variable.getName();\n const vars = getControllerVars(this);\n\n if (vars.has(name)) {\n throw new Error('Variable with the same name already exist');\n } else {\n vars.set(name, variable);\n const store = getControllerStore(this);\n store.set(name);\n }\n }\n\n getVariable(variableName: string): Variable | undefined {\n const vars = getControllerVars(this);\n\n return vars.get(variableName);\n }\n}\n\nexport function createGlobalVariablesController() {\n return new GlobalVariablesController();\n}\n","import { Action, DivTimer } from '../../typings/common';\nimport { LogError, wrapError } from './wrapError';\nimport { MaybeMissing } from '../expressions/json';\nimport { VariableType } from '../expressions/variable';\n\ninterface TimerState {\n state: 'stopped' | 'running' | 'paused';\n definition: DivTimer;\n duration?: number;\n tick?: number;\n durationTimeout?: number;\n tickTimeout?: number;\n tickStarted?: number;\n tickPassed?: number;\n durationStarted?: number;\n durationPassed?: number;\n hold?: boolean;\n}\n\nconst AVAIL_ACTIONS_NAMES = ['start', 'stop', 'pause', 'resume', 'cancel', 'reset'] as const;\n\ntype AVAIL_ACTIONS_LIST = typeof AVAIL_ACTIONS_NAMES[number];\n\nconst AVAIL_ACTIONS = new Set<string>(AVAIL_ACTIONS_NAMES);\n\ntype ApplyVarsFunc = <T>(json: T) => MaybeMissing<T>;\n\ntype HasVariableWithTypeFunc = (name: string, type: VariableType) => boolean;\n\ntype SetVariableValueFunc = (name: string, value: unknown) => void;\n\ntype ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean) => Promise<void>;\n\nexport class TimersController {\n private readonly timers: Map<string, TimerState> = new Map();\n private readonly logError: LogError;\n private readonly applyVars: ApplyVarsFunc;\n private readonly hasVariableWithType: HasVariableWithTypeFunc;\n private readonly setVariableValue: SetVariableValueFunc;\n private readonly execAnyActions: ExecAnyActionsFunc;\n private readonly visibilityHandler: () => void;\n private awaitActions: {\n id: string;\n action: AVAIL_ACTIONS_LIST;\n }[] = [];\n\n constructor(opts: {\n logError: LogError;\n applyVars: ApplyVarsFunc;\n hasVariableWithType: HasVariableWithTypeFunc;\n setVariableValue: SetVariableValueFunc;\n execAnyActions: ExecAnyActionsFunc;\n }) {\n this.logError = opts.logError;\n this.applyVars = opts.applyVars;\n this.hasVariableWithType = opts.hasVariableWithType;\n this.setVariableValue = opts.setVariableValue;\n this.execAnyActions = opts.execAnyActions;\n\n this.visibilityHandler = () => {\n if (document.visibilityState === 'visible') {\n this.awaitActions.forEach(({ id, action }) => {\n this.execTimerAction(id, action);\n });\n this.awaitActions = [];\n this.unholdAll();\n } else {\n this.holdAll();\n }\n };\n\n document.addEventListener('visibilitychange', this.visibilityHandler);\n }\n\n destroy(): void {\n document.removeEventListener('visibilitychange', this.visibilityHandler);\n\n for (const [_id, timer] of this.timers) {\n this.stopTimerTimeouts(timer);\n }\n }\n\n createTimer(timer: DivTimer) {\n if (!timer?.id) {\n this.logError(wrapError(new Error('Missing timer id')));\n return;\n }\n if (!(timer.duration || timer.tick_interval && (timer.value_variable || timer.tick_actions))) {\n this.logError(wrapError(new Error('Misconfigured timer'), {\n additional: {\n id: timer.id\n }\n }));\n return;\n }\n\n this.timers.set(timer.id, {\n state: 'stopped',\n definition: timer\n });\n }\n\n execTimerAction(id: string | null, action: string | null) {\n if (!id || !action || !this.timers.has(id) || !AVAIL_ACTIONS.has(action)) {\n this.logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n return;\n }\n const actionTyped = action as AVAIL_ACTIONS_LIST;\n\n if (document.visibilityState !== 'visible') {\n // wait till the page is visible\n this.awaitActions.push({\n id,\n action: actionTyped\n });\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const timer = this.timers.get(id)!;\n this[actionTyped](timer);\n }\n\n private stopTimerTimeouts(timer: TimerState): void {\n if (timer.durationTimeout) {\n clearTimeout(timer.durationTimeout);\n timer.durationTimeout = undefined;\n }\n if (timer.tickTimeout) {\n clearTimeout(timer.tickTimeout);\n timer.tickTimeout = undefined;\n }\n }\n\n private tickOrUnholdAction(timer: TimerState): void {\n const now = performance.now();\n const value = (timer.durationPassed || 0) + now - (timer.durationStarted || 0);\n if (timer.duration && value > timer.duration) {\n return;\n }\n this.updateVariable(timer, value);\n this.callActions(timer, 'tick');\n }\n\n private startOrResume(timer: TimerState): void {\n timer.state = 'running';\n timer.hold = false;\n\n timer.durationStarted = performance.now();\n\n const duration = timer.duration;\n if (duration) {\n timer.durationTimeout = window.setTimeout(() => {\n this.updateVariable(timer, duration);\n this.stop(timer);\n }, Math.max(0, duration - (timer.durationPassed || 0)));\n }\n const tick = timer.tick;\n if (tick) {\n const startTick = () => {\n timer.tickStarted = performance.now();\n timer.tickTimeout = window.setTimeout(() => {\n this.tickOrUnholdAction(timer);\n timer.tickPassed = 0;\n startTick();\n }, Math.max(0, tick - (timer.tickPassed || 0)));\n };\n\n startTick();\n }\n }\n\n private start(timer: TimerState): void {\n if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer is paused')));\n return;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && !this.hasVariableWithType(variableName, 'integer')) {\n this.logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name: variableName\n }\n }));\n return;\n }\n\n if (variableName) {\n this.setVariableValue(variableName, 0);\n }\n\n if (timer.definition.duration) {\n timer.duration = this.applyVars(timer.definition.duration);\n }\n if (timer.definition.tick_interval) {\n timer.tick = this.applyVars(timer.definition.tick_interval);\n }\n // duration < 0 is incorrect\n // tick_interval <= is incorrect\n if (\n timer.duration !== undefined && timer.duration < 0 ||\n timer.tick !== undefined && timer.tick <= 0\n ) {\n this.logError(wrapError(new Error('Incorrect timer properties'), {\n additional: {\n id: timer.definition.id\n }\n }));\n return;\n }\n\n this.startOrResume(timer);\n }\n\n private stop(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n this.callActions(timer, 'end');\n }\n\n private pause(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer has already been paused')));\n return;\n }\n\n timer.state = 'paused';\n\n this.stopTimerTimeouts(timer);\n\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && timer.durationPassed) {\n this.setVariableValue(variableName, Math.round(timer.durationPassed));\n }\n }\n\n private resume(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n }\n\n this.startOrResume(timer);\n }\n\n private cancel(timer: TimerState): void {\n if (timer.state === 'stopped') {\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n }\n\n private reset(timer: TimerState): void {\n this.cancel(timer);\n this.start(timer);\n }\n\n private updateVariable(timer: TimerState, value: number): void {\n const variableName = timer.definition.value_variable;\n if (variableName) {\n this.setVariableValue(variableName, Math.round(value));\n }\n }\n\n private callActions(timer: TimerState, type: 'tick' | 'end'): void {\n const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n if (actions) {\n const actionsWithExpressions = this.applyVars(actions);\n this.execAnyActions(actionsWithExpressions, false);\n }\n }\n\n private holdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running') {\n timer.hold = true;\n this.stopTimerTimeouts(timer);\n }\n }\n }\n\n private unholdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running' && timer.hold) {\n // All timeouts were canceled, but the time is not stopped\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n if (timer.tick) {\n // Run tick actions and update variable instantly after the page is shown, if:\n // Timer has the tick_interval\n // Timer is not done yet (check inside function)\n this.tickOrUnholdAction(timer);\n }\n\n this.startOrResume(timer);\n }\n }\n }\n}\n","<script lang=\"ts\">\n import type { Readable, Writable } from 'svelte/types/runtime/store';\n import { onDestroy, setContext, tick } from 'svelte';\n import { derived, writable } from 'svelte/store';\n\n import css from './Root.module.css';\n\n import type {\n Action,\n VisibilityAction,\n ComponentCallback,\n CustomActionCallback,\n DivBase,\n DivJson,\n ErrorCallback,\n Platform,\n StatCallback,\n TemplateContext,\n Theme,\n Customization\n } from '../../typings/common';\n import type { AppearanceTransition, DivBaseData, TransitionChange } from '../types/base';\n import type { SwitchElements, Overflow } from '../types/switch-elements';\n import type { DivStateData } from '../types/state';\n import type { TintMode } from '../types/image';\n import Unknown from './utilities/Unknown.svelte';\n import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n import { ROOT_CTX, RootCtxValue, Running } from '../context/root';\n import { applyTemplate } from '../utils/applyTemplate';\n import { wrapError, WrappedError } from '../utils/wrapError';\n import { simpleCheckInput } from '../utils/simpleCheckInput';\n import { ACTION_CTX, ActionCtxValue } from '../context/action';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../context/state';\n import { constStore } from '../utils/constStore';\n import {\n MaybeMissing,\n prepareVars\n } from '../expressions/json';\n import { storesMap } from '../stores';\n import { evalExpression } from '../expressions/eval';\n import { parse } from '../expressions/expressions';\n import { gatherVarsFromAst } from '../expressions/utils';\n import { Truthy } from '../utils/truthy';\n import { createVariable, TYPE_TO_CLASS, Variable, VariableType, VariableValue } from '../expressions/variable';\n import {\n getControllerStore,\n getControllerVars,\n GlobalVariablesController\n } from '../expressions/globalVariablesController';\n import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n import { TimersController } from '../utils/timers';\n\n export let id: string;\n export let json: Partial<DivJson> = {};\n export let platform: Platform = 'auto';\n export let theme: Theme = 'system';\n export let globalVariablesController: GlobalVariablesController = new GlobalVariablesController();\n export let mix = '';\n export let customization: Customization = {};\n export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n export let onError: ErrorCallback | undefined = undefined;\n export let onStat: StatCallback | undefined = undefined;\n export let onCustomAction: CustomActionCallback | undefined = undefined;\n export let onComponent: ComponentCallback | undefined = undefined;\n\n let isDesktop = writable(platform === 'desktop');\n if (platform === 'auto' && typeof matchMedia !== 'undefined') {\n const touchQuery = matchMedia('(any-pointer: coarse)');\n isDesktop.set(!touchQuery.matches);\n touchQuery.addListener(() => {\n isDesktop.set(!touchQuery.matches);\n });\n }\n\n let currentTheme: 'light' | 'dark' = 'light';\n let themeQuery: MediaQueryList | null = null;\n $: if (theme === 'light' || theme === 'dark') {\n currentTheme = theme;\n } else if (theme === 'system') {\n if (typeof matchMedia !== 'undefined') {\n if (!themeQuery) {\n themeQuery = matchMedia('(prefers-color-scheme: dark)');\n themeQuery.addListener(themeQueryListener);\n }\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n } else {\n currentTheme = 'light';\n }\n } else {\n logError(wrapError(new Error('Unsupported theme')));\n }\n\n $: if (currentTheme) {\n updateTheme();\n }\n\n function themeQueryListener(): void {\n if (theme !== 'system' || !themeQuery) {\n return;\n }\n\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n }\n\n export function setTheme(newTheme: Theme): void {\n theme = newTheme;\n }\n\n export function getDebugVariables() {\n if (!process.env.DEVTOOL) {\n return;\n }\n\n return variables;\n }\n\n const builtinSet = new Set(builtinProtocols);\n\n let hasError = false;\n\n if (!json) {\n hasError = true;\n logError(wrapError(new Error('\"json\" prop is required')));\n }\n\n if (!id) {\n hasError = true;\n logError(wrapError(new Error('\"id\" prop is required')));\n }\n\n let initialError = simpleCheckInput(json);\n let templateContext: TemplateContext = {};\n const templates = json.templates || {};\n\n if (initialError) {\n hasError = true;\n logError(initialError);\n }\n\n const running: Record<Running, boolean> = {\n stateChange: false\n };\n\n // Will notify about new global variables\n const globalVariablesStore = getControllerStore(globalVariablesController);\n // Global variables only\n const globalVariables = getControllerVars(globalVariablesController);\n // Local variables only\n const localVariables = new Map<string, Variable>();\n // Local and global variables combined, with local in precedence\n const variables = new Map<string, Variable>();\n // Stores for notify unset global variables\n const awaitingGlobalVariables = new Map<string, Writable<any>>();\n let timersController: TimersController | null = null;\n\n /** @deprecated */\n export function setVariable(name: string, value: VariableValue): void {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n const varInstance = variables.get(name);\n if (varInstance) {\n varInstance.setValue(value);\n }\n }\n }\n\n /** @deprecated */\n export function getVariable(name: string): VariableValue | undefined {\n const varInstance = variables.get(name);\n\n return varInstance?.getValue();\n }\n\n function getVariableInstance(name: string, type: VariableType): Variable | undefined {\n const variable = variables.get(name);\n\n if (variable) {\n const foundType = variable.getType();\n\n if (foundType !== type) {\n logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n additional: {\n name,\n foundType\n }\n }));\n return;\n }\n }\n\n return variable;\n }\n\n function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n return customization?.[prop];\n }\n\n function getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>> {\n if (!jsonProp) {\n return constStore(jsonProp);\n }\n\n const prepared = prepareVars(jsonProp, logError);\n if (!prepared.vars.length) {\n if (prepared.hasExpression) {\n return constStore(prepared.applyVars(variables));\n }\n return constStore(jsonProp);\n }\n const stores = prepared.vars.map(name => {\n return variables.get(name) || awaitVariableChanges(name);\n }).filter(Truthy);\n\n return derived(stores, () => prepared.applyVars(variables));\n }\n\n function getJsonWithVars<T>(jsonProp: T): MaybeMissing<T> {\n const prepared = prepareVars(jsonProp, logError);\n\n if (!prepared.vars.length) {\n return jsonProp;\n }\n\n return prepared.applyVars(variables);\n }\n\n function logError(error: WrappedError): void {\n if (onError) {\n onError({\n error\n });\n } else if (error?.level === 'warn') {\n console.warn(error);\n } else {\n console.error(error);\n }\n }\n\n function logStat(type: string, action: Action): void {\n if (onStat) {\n onStat({\n type,\n action\n });\n }\n }\n\n function hasTemplate(templateName: string): boolean {\n return templateName in templates;\n }\n\n function processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n } {\n if (!json) {\n return {\n json,\n templateContext\n };\n }\n\n const usedTypes = new Set([json.type]);\n\n while (json.type in templates) {\n ({\n json,\n templateContext\n } = applyTemplate(json as DivBase, templateContext, templates, logError));\n\n if (usedTypes.has(json.type)) {\n return {\n json,\n templateContext\n };\n }\n usedTypes.add(json.type);\n }\n\n return {\n json,\n templateContext\n };\n }\n\n function registerComponentReal({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'mount',\n node,\n json: json as DivBase,\n origJson,\n templateContext\n });\n }\n }\n function unregisterComponentReal({\n node\n }: {\n node: HTMLElement;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'destroy',\n node\n });\n }\n }\n\n let idCounter = 0;\n function genId(key: string): string {\n if (process.env.IS_PROD) {\n return `${id}-${idCounter++}`;\n }\n return `${id}-${key}-${idCounter++}`;\n }\n\n function genClass(key: string): string {\n return `divkit-${genId(key)}`;\n }\n\n let svgFiltersMap: Record<string, string> = {};\n let svgFilterUsages: Record<string, number> = {};\n\n function addSvgFilter(color: string, mode: TintMode): string {\n const key = `${color}:${mode}`;\n svgFilterUsages[key] = svgFilterUsages[key] || 0;\n ++svgFilterUsages[key];\n\n if (svgFiltersMap[key]) {\n return svgFiltersMap[key];\n }\n\n const filterId = `${genId('root')}-svg-filter`;\n svgFiltersMap = {\n ...svgFiltersMap,\n [key]: filterId\n };\n\n return filterId;\n }\n\n function removeSvgFilter(color: string | undefined, mode: TintMode): void {\n if (!color) {\n return;\n }\n\n const key = `${color}:${mode}`;\n if (!svgFilterUsages[key]) {\n return;\n }\n\n if (--svgFilterUsages[key] === 0) {\n svgFiltersMap = Object.keys(svgFiltersMap).reduce((acc, item) => {\n if (svgFilterUsages[item]) {\n acc[item] = svgFiltersMap[item];\n }\n return acc;\n }, {} as typeof svgFiltersMap);\n }\n }\n\n function setState(stateId: string | null): void {\n if (!stateId) {\n throw new Error('Missing state id');\n }\n let state: StateInterface = stateInterface;\n let parts = stateId.split('/');\n\n parts = ['root', ...parts];\n if (parts.length < 2 || parts.length % 2 !== 0) {\n throw new Error('Incorrect state id format');\n }\n\n for (let i = 0; i < parts.length; i += 2) {\n const divId = parts[i];\n const selectedStateId = parts[i + 1];\n\n let childState = state.getChild(divId);\n if (childState) {\n childState.setState(selectedStateId);\n state = childState;\n } else {\n return;\n }\n }\n }\n\n function setCurrentItem(id: string | null, item: string | null): void {\n if (!id || !item) {\n throw new Error('Missing data for \"set-current-item\" action');\n }\n\n if (isNaN(Number(item))) {\n throw new Error('Incorrect item for \"set-current-item\" action');\n }\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setCurrentItem(Number(item));\n }\n }\n\n function setPreviousItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-previous-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-previous-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setPreviousItem(overflow as Overflow);\n }\n }\n\n function setNextItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-next-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-next-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setNextItem(overflow as Overflow);\n }\n }\n\n export function execAction(action: MaybeMissing<Action | VisibilityAction>): void {\n const actionUrl = action.url ? String(action.url) : '';\n\n if (actionUrl) {\n try {\n const url = actionUrl.replace(/div-action:\\/\\//, '');\n const parts = /([^?]+)\\?(.+)/.exec(url);\n if (!parts) {\n return;\n }\n const params = new URLSearchParams(parts[2]);\n\n switch (parts[1]) {\n case 'set_state':\n setState(params.get('state_id'));\n break;\n case 'set_current_item':\n setCurrentItem(params.get('id'), params.get('item'));\n break;\n case 'set_previous_item':\n setPreviousItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_next_item':\n setNextItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_variable':\n const name = params.get('name');\n const value = params.get('value');\n\n if (name && value !== null) {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.set(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Incorrect set_variable_action'), {\n additional: {\n url\n }\n }));\n }\n break;\n case 'timer':\n const action = params.get('action');\n const id = params.get('id');\n\n if (timersController) {\n timersController.execTimerAction(id, action);\n } else {\n logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n }\n break;\n default:\n logError(wrapError(new Error('Unknown type of action'), {\n additional: {\n url: actionUrl\n }\n }));\n }\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n url: actionUrl\n }\n }));\n }\n }\n }\n\n async function execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void> {\n if (!actions) {\n return;\n }\n\n for (let i = 0; i < actions.length; ++i) {\n let action = actions[i];\n\n const actionUrl = action.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema) {\n if (isBuiltinSchema(schema, builtinSet)) {\n if (processUrls) {\n if (action.target === '_blank') {\n const win = window.open('', '_blank');\n if (win) {\n win.opener = null;\n win.location = actionUrl;\n }\n } else {\n location.href = actionUrl;\n }\n }\n } else if (schema === 'div-action') {\n execAction(action);\n await tick();\n } else if (action.log_id) {\n execCustomAction(action as Action & { url: string });\n await tick();\n }\n }\n }\n }\n actions.forEach(action => {\n if (action.log_id) {\n logStat('click', action as Action);\n }\n });\n }\n\n function execCustomAction(action: (Action | VisibilityAction) & { url: string }): void {\n onCustomAction?.(action);\n }\n\n function isRunning(type: Running): boolean {\n return running[type];\n }\n\n function setRunning(type: Running, val: boolean): void {\n running[type] = val;\n }\n\n const instancesMap: Map<string, unknown> = new Map();\n function registerInstance<T>(id: string, block: T) {\n if (instancesMap.has(id)) {\n logError(wrapError(new Error('Duplicate instance id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n instancesMap.set(id, block);\n }\n function unregisterInstance(id: string) {\n instancesMap.delete(id);\n }\n\n function getInstance<T>(id: string): T | undefined {\n if (!instancesMap.has(id)) {\n logError(wrapError(new Error('Missing instance with id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n return instancesMap.get(id) as T;\n }\n\n const stores = new Map<string, Writable<any>>();\n\n function setStore(id: string) {\n if (stores.has(id)) {\n return;\n }\n\n stores.set(id, storesMap[id]());\n }\n\n function getStore<T>(id: string): Writable<T> {\n if (!stores.has(id)) {\n setStore(id);\n }\n\n return stores.get(id) as Writable<T>;\n }\n\n function filterDefinedVars(vars: Set<string>): Set<string> {\n for (const varName of vars) {\n if (variables.has(varName)) {\n vars.delete(varName);\n }\n }\n\n return vars;\n }\n\n function awaitVariableChanges(variableName: string): Readable<any> {\n const store = awaitingGlobalVariables.get(variableName) || writable(undefined);\n\n if (!awaitingGlobalVariables.has(variableName)) {\n awaitingGlobalVariables.set(variableName, store);\n }\n\n return store;\n }\n\n function waitForVars(vars: string[]): Promise<void> {\n const remaining = new Set(vars);\n\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const unsubscribe = globalVariablesStore.subscribe(() => {\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n unsubscribe();\n resolve();\n }\n });\n });\n }\n\n function updateTheme(): void {\n if (!palette) {\n return;\n }\n\n const list = palette[currentTheme];\n list.forEach(item => {\n const varInstance = variables.get(item.name);\n\n if (varInstance) {\n varInstance.setValue(item.color);\n }\n });\n }\n\n function getBuiltinProtocols(): Set<string> {\n return builtinSet;\n }\n\n setContext<RootCtxValue>(ROOT_CTX, {\n logError,\n logStat,\n hasTemplate,\n processTemplate,\n genId,\n genClass,\n execAction,\n execAnyActions,\n execCustomAction,\n isRunning,\n setRunning,\n registerInstance,\n unregisterInstance,\n addSvgFilter,\n removeSvgFilter,\n getDerivedFromVars,\n getJsonWithVars,\n getStore,\n getVariable: getVariableInstance,\n getCustomization,\n getBuiltinProtocols,\n isDesktop,\n registerComponent: process.env.DEVTOOL ? registerComponentReal : undefined,\n unregisterComponent: process.env.DEVTOOL ? unregisterComponentReal : undefined\n });\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return false;\n }\n });\n\n const stateInterface: StateInterface = {\n setState(_stateId: string): void {\n throw new Error('Not implemented');\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n\n return undefined;\n }\n };\n\n let childStateMap: Map<string, StateInterface> | null = null;\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement,\n _direction: 'in' | 'out'\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionIn(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionOut(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionChange(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: TransitionChange,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n hasTransitionChange(_id?: string): boolean {\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerChild(_id: string) {\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unregisterChild(_id: string) {\n }\n });\n\n function hasVariableWithType(name: string, type: VariableType): boolean {\n const instance = variables.get(name);\n\n return instance?.getType() === type;\n }\n\n function setVariableValue(name: string, value: unknown): void {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.setValue(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n }\n\n const startVariables = json?.card?.variables;\n if (Array.isArray(startVariables)) {\n startVariables.forEach(variable => {\n if (variable && variable.type in TYPE_TO_CLASS && variable.name) {\n if (localVariables.has(variable.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: variable.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(variable.name, variable.type, variable.value);\n\n localVariables.set(variable.name, varInstance);\n variables.set(variable.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: variable.name\n }\n }));\n }\n }\n });\n }\n\n const palette = json.palette;\n if (palette) {\n const list = palette[currentTheme];\n list.forEach(item => {\n if (localVariables.has(item.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: item.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(item.name, 'color', item.color);\n\n localVariables.set(item.name, varInstance);\n variables.set(item.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: item.name\n }\n }));\n }\n });\n }\n\n for (const [varName, variable] of globalVariables) {\n if (!variables.has(varName)) {\n variables.set(varName, variable);\n }\n }\n\n globalVariablesStore.subscribe(newVarName => {\n if (newVarName && !variables.has(newVarName)) {\n const varInstance = globalVariables.get(newVarName) as Variable;\n variables.set(newVarName, varInstance);\n\n const awaitingStore = awaitingGlobalVariables.get(newVarName);\n\n if (awaitingStore) {\n let counter = 0;\n varInstance.subscribe(() => {\n awaitingStore.set(++counter);\n });\n }\n }\n });\n\n const variableTriggers = json?.card?.variable_triggers;\n if (Array.isArray(variableTriggers)) {\n variableTriggers.forEach(trigger => {\n let prevConditionResult = false;\n\n if (typeof trigger.condition !== 'string') {\n logError(wrapError(new Error('variable_trigger has a condition that is not a string'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n const mode = trigger.mode || 'on_condition';\n\n if (mode !== 'on_variable' && mode !== 'on_condition') {\n logError(wrapError(new Error('variable_trigger has an unsupported mode'), {\n additional: {\n mode\n }\n }));\n return;\n }\n\n try {\n const ast = parse(trigger.condition, {\n startRule: 'JsonStringContents'\n });\n const exprVars = gatherVarsFromAst(ast);\n if (!exprVars.length) {\n logError(wrapError(new Error('variable_trigger must have variables in the condition'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n waitForVars(exprVars).then(() => {\n const stores = exprVars.map(name => variables.get(name)).filter(Truthy);\n\n derived(stores, () => {\n return evalExpression(variables, ast);\n }).subscribe(conditionResult => {\n if (conditionResult.type === 'error') {\n logError(wrapError(new Error('variable_trigger condition execution error'), {\n additional: {\n message: conditionResult.value\n }\n }));\n return;\n }\n\n if (\n // if condition is truthy\n conditionResult.value &&\n // and trigger mode matches\n (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n ) {\n trigger.actions.forEach(action => {\n const resultAction = getJsonWithVars(action);\n if (resultAction.log_id) {\n execAction(resultAction as Action);\n }\n });\n }\n\n prevConditionResult = Boolean(conditionResult.value);\n });\n });\n } catch (err) {\n logError(wrapError(new Error('Unable to parse variable_trigger'), {\n additional: {\n condition: trigger.condition\n }\n }));\n }\n });\n }\n\n const timers = json?.card?.timers;\n if (timers) {\n const controller = timersController = new TimersController({\n logError,\n applyVars: getJsonWithVars,\n hasVariableWithType,\n setVariableValue,\n execAnyActions\n });\n timers.forEach(timer => controller.createTimer(timer));\n }\n\n const states = json?.card?.states;\n const rootStateDiv: DivStateData | undefined = (states && !hasError) ? {\n type: 'state',\n id: 'root',\n width: {\n type: 'match_parent',\n },\n height: {\n type: 'match_parent',\n },\n states: states.map(state => ({\n state_id: state.state_id.toString(),\n div: state.div\n }))\n } : undefined;\n\n /**\n * Fix for the :active pseudo-class on iOS\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n function emptyTouchstartHandler() {}\n\n onDestroy(() => {\n if (timersController) {\n timersController.destroy();\n }\n });\n</script>\n\n{#if !hasError && rootStateDiv}\n <div\n class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n on:touchstart={emptyTouchstartHandler}\n >\n <RootSvgFilters {svgFiltersMap} />\n <Unknown div={rootStateDiv} {templateContext} />\n </div>\n{/if}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, WrappedError } from './wrapError';\nimport { TYPE_MAP } from '../components/typeMap';\n\n/**\n * Simple check for json card\n * @param json\n * @returns Error string or null if everything fine\n */\nexport function simpleCheckInput(json?: Partial<DivJson>): WrappedError | null {\n if (!json) {\n return wrapError(new Error('Missing object'));\n }\n\n const card = json.card;\n const templates = json.templates || {};\n\n if (!card) {\n return wrapError(new Error('Missing card'));\n }\n\n if (!card.states || !card.states.length) {\n return wrapError(new Error('Missing states'));\n }\n\n for (const templateName in templates) {\n if (templates.hasOwnProperty(templateName)) {\n if (templateName in TYPE_MAP) {\n return wrapError(new Error('Template name collision'), {\n additional: {\n templateName\n }\n });\n }\n }\n }\n\n for (let i = 0; i < card.states.length; ++i) {\n if (!card.states[i].div) {\n return wrapError(new Error('Missing state div'), {\n additional: {\n stateId: card.states[i].state_id\n }\n });\n }\n if (typeof card.states[i].state_id !== 'number') {\n return wrapError(new Error('Missing state_id'), {\n additional: {\n index: i\n }\n });\n }\n }\n\n return null;\n}\n","import Root from './components/Root.svelte';\nimport type { Platform, Theme } from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\n\nexport function render(opts: {\n target: HTMLElement;\n json: unknown;\n id: string;\n hydrate?: boolean;\n globalVariablesController?: GlobalVariablesController;\n mix?: string;\n customization?: unknown;\n builtinProtocols?: unknown;\n onStat?: unknown;\n onCustomAction?: unknown;\n onError?: unknown;\n onComponent?: unknown;\n platform?: Platform;\n theme?: Theme;\n}) {\n return new Root({\n target: opts.target,\n props: {\n id: opts.id,\n json: opts.json,\n globalVariablesController: opts.globalVariablesController,\n mix: opts.mix,\n customization: opts.customization,\n builtinProtocols: opts.builtinProtocols,\n onStat: opts.onStat,\n onCustomAction: opts.onCustomAction,\n onError: opts.onError,\n onComponent: opts.onComponent,\n platform: opts.platform,\n theme: opts.theme\n },\n hydrate: opts.hydrate\n });\n}\n\nexport {\n createGlobalVariablesController\n} from './expressions/globalVariablesController';\n\nexport {\n createVariable\n} from './expressions/variable';\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","noop","identity","x","tar","src","k","run","fn","blank_object","create","run_all","fns","forEach","is_function","thing","src_url_equal_anchor","src_url_equal","element_src","url","document","createElement","href","not_equal","a","b","is_empty","keys","length","subscribe","store","callbacks","unsub","unsubscribe","component_subscribe","component","callback","$$","on_destroy","push","create_slot","ctx","$$scope","slot_ctx","get_slot_context","slice","get_slot_changes","dirty","lets","undefined","merged","len","Math","max","i","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","p","get_all_dirty_from_scope","action_destroyer","action_result","destroy","is_client","window","now","performance","Date","raf","cb","requestAnimationFrame","tasks","Set","run_tasks","task","c","delete","f","size","is_hydrating","append","target","node","appendChild","get_root_for_style","root","getRootNode","ownerDocument","host","append_empty_stylesheet","style_element","style","head","append_stylesheet","sheet","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","d","name","svg_element","createElementNS","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_attributes","attributes","descriptors","getOwnPropertyDescriptors","__proto__","cssText","set","set_data","text","wholeText","set_style","important","removeProperty","setProperty","managed_styles","Map","current_component","active","delete_rule","previous","animation","split","next","filter","anim","indexOf","deleted","join","info","stylesheet","cssRules","deleteRule","rules","clear","set_current_component","get_current_component","Error","onMount","on_mount","onDestroy","setContext","context","getContext","bubble","type","this","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","schedule_update","then","flush","tick","add_render_callback","seen_callbacks","promise","flushidx","saved_component","update","pop","has","add","fragment","before_update","after_update","dispatch","direction","kind","dispatchEvent","detail","bubbles","cancelable","e","createEvent","initCustomEvent","custom_event","outroing","outros","group_outros","r","check_outros","transition_in","block","local","transition_out","null_transition","duration","create_in_transition","params","animation_name","config","running","uid","cleanup","go","delay","easing","css","ease","step","keyframes","t","rule","str","hash","charCodeAt","doc","create_style_information","insertRule","create_rule","start_time","end_time","abort","fulfill","loop","started","start","invalidate","end","globals","globalThis","global","outro_and_destroy_block","lookup","get_spread_update","levels","updates","to_null_out","accounted_for","n","SvelteElement","create_component","mount_component","customElement","m","new_on_destroy","map","destroy_component","init","instance","create_fragment","props","append_styles","parent_component","bound","on_disconnect","skip_bound","ready","ret","rest","fill","make_dirty","hydrate","nodes","element","Array","from","childNodes","l","intro","HTMLElement","constructor","super","attachShadow","mode","connectedCallback","slotted","attributeChangedCallback","_oldValue","newValue","disconnectedCallback","$destroy","$on","index","splice","$set","$$props","$$set","SvelteComponent","subscriber_queue","writable","stop","subscribers","new_value","run_queue","subscriber","derived","stores","initial_value","single","isArray","stores_array","auto","inited","values","pending","sync","result","unsubscribers","ROOT_CTX","Symbol","wrapError","error","wrapped","level","additional","makeStyle","styles","res","String","pxToEm","casted","Number","isNaN","ceil","pxToEmWithUnits","padLeft","val","count","correctColor","color","alpha","defaultColor","toLowerCase","charAt","parsedColor","parseColor","stringifyColorToCss","g","it","round","toString","toFixed","colorMatch","match","_","redPart","greenPart","bluePart","alphaPart","parseInt","htmlFilter","str2","replace","Truthy","Boolean","getBackground","bgs","position","bg","opts","pos","image","solid","colors","angle","gradient","image_url","imageSize","scale","imagePos","sizeVal","radius","RELATIVE_SIZE_MAP","centerX","radialCenterToCss","center_x","centerY","center_y","radial","reverse","reduce","acc","item","nearest_corner","farthest_corner","nearest_side","farthest_side","center","hpos","vpos","content_alignment_horizontal","content_alignment_vertical","getUrlSchema","exec","isBuiltinSchema","schema","builtinSchemas","list","genClassName","mods","STATE_CTX","edgeInsertsToCss","edgeInsets","top","right","bottom","left","isNumber","num","isNonNegativeNumber","correctEdgeInserts","defaultVal","correctNonNegativeNumber","isDeepEqual","is","keysA","keysB","assignIfDifferent","newVal","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","items","borderRadius","cornersRadius","defaultRadius","fontSize","doNothing","ACTION_CTX","getTouchCoords","firstEvent","touches","clientX","pageX","y","clientY","pageY","class","role","tabindex","actions","doubleTapActions","longTapActions","cls","attrs","use","customAction","isNativeActionAnimation","rootCtx","actionCtx","hasAction","startTs","startCoords","isChanged","logError","hasJSAction","getBuiltinProtocols","button","preventDefault","some","action","execAnyActions","coords","abs","ctrlKey","metaKey","altKey","shiftKey","isPositiveNumber","getCssFilter","filters","background","stl","insets","opacity","classList","hasNativeAnimation","_a","json","origJson","templateContext","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","HORIZONTAL_ALIGN_TO_GENERAL","VERTICAL_ALIGN_TO_GENERAL","baseline","stateCtx","currentNode","width","widthMin","widthMax","height","heightMin","heightMax","backgroundStyle","hasSeparateBg","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","jsonTransitionTriggers","fakeElement","transition_triggers","hasStateChangeTrigger","id","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","actionAnimationList","actionAnimationTransition","parseActionAnimation","startValue","start_value","endValue","end_value","start_delay","transformOrigin","transform","isVisibilityInited","visibility","pivotXNum","pivotYNum","jsonBorder","getDerivedFromVars","border","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","$jsonBorder","has_shadow","shadow","_b","offset","_d","_e","blur","_f","stroke","corners_radius","correctBorderRadiusObject","corner_radius","corner","jsonPaddings","paddings","correctEdgeInsertsObject","$jsonPaddings","padding","side","aVal","bVal","sumEdgeInsets","jsonMargins","margins","$jsonMargins","jsonWidth","jsonAlignmentHorizontal","alignment_horizontal","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","overlapParent","parentHorizontalWrapContent","parentContainerOrientation","parentContainerWrap","parentLayoutOrientation","weight","constrained","min_size","max_size","align","$jsonAlignmentHorizontal","parentHAlign","jsonHeight","jsonAlignmentVertical","alignment_vertical","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","$jsonHeight","parentVerticalWrapContent","$jsonAlignmentVertical","parentVAlign","parentOverlapMod","parentOverlapAbsoluteMod","gridArea","rowSpan","colSpan","jsonAlpha","$jsonAlpha","jsonAccessibility","accessibility","$jsonAccessibility","description","jsonBackground","$jsonBackground","isRunning","transition_change","hasTransitionChange","jsonAction","jsonActions","jsonDoubleTapActions","doubletap_actions","jsonLongTapActions","longtap_actions","newActions","$jsonActions","$jsonAction","newDoubleTapActions","$jsonDoubleTapActions","newLongTapActions","$jsonLongTapActions","jsonActionAnimation","action_animation","$jsonActionAnimation","jsonVisibility","prevVisibility","nextVisibility","correctVisibility","$jsonVisibility","transition","runVisibilityTransition","catch","onVisibilityChange","scrollSnap","jsonTransform","$jsonTransform","rotation","pivotX","pivot_x","pivotXCSSValue","pivotY","pivot_y","pivotYCSSValue","flexBasis","registerChildWithTransitionIn","registerChildWithTransitionOut","registerChildWithTransitionChange","visibilityActions","visibilityStatus","visible","finished","thresholds","visibility_percentage","IntersectionObserver","entries","entry","status","nowVisible","intersectionRatio","timer","setTimeout","limit","log_limit","Infinity","actionUrl","execAction","log_id","execCustomAction","logStat","visibility_duration","clearTimeout","threshold","observe","visibilityAction","getJsonWithVars","visibility_actions","visibility_action","registerChild","dev","unregisterChild","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","rootFontSize","textStyles","singleline","decoration","lineHeight","letterSpacing","newDecoration","underline","strike","font_size","line_height","letter_spacing","font_weight","text_color","topOffset","top_offset","correctAlignmentHorizontal","orientation","correctAlignmentVertical","correctTintMode","tintMode","svgFilterId","wrapperStyle","hasError","customLineHeight","maxHeight","lineClamp","multiline","halign","valign","rootTextColor","selectable","renderList","usedTintColors","removeSvgFilter","jsonText","$jsonText","jsonRanges","ranges","jsonImages","images","jsonRootTextStyles","jsonTextSize","$jsonTextSize","jsonLineHeight","newLineHeight","$jsonLineHeight","jsonMaxLines","max_lines","$jsonMaxLines","newMaxHeight","newLineClamp","newMultiline","lines","$jsonRanges","$jsonImages","jsonHAlign","text_alignment_horizontal","$jsonHAlign","jsonVAlign","text_alignment_vertical","$jsonVAlign","isAllTextSameColor","jsonTextColor","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","jsonTruncate","truncate","$jsonTruncate","jsonTextGradient","text_gradient","newGradient","$jsonTextGradient","jsonSelectable","correctBooleanInt","$jsonSelectable","textRanges","textImages","newRenderList","content","prevIndex","activeRanges","range","isStart","arrayIndex","sort","assign","$jsonRootTextStyles","substring","textStyles2","imageWidth","imageHeight","tintColor","tint_color","tint_mode","addSvgFilter","updateRenderList","innerMods","correctDrawableStyle","drawable","availShapes","defaultValue","shape","includes","item_width","item_height","calcCircleSize","old","borderColor","borderWidth","bgColor","background_color","boxShadow","calcDrawableStyle","setAdditionalPadding","separator","crossAxis","show_at_start","show_at_end","calcItemsGap","lineSeparator","vals","show_between","hasGapSupport","flex","display","flexDirection","gap","body","scrollHeight","appendSeparator","separators","separatorStyle","box0","box1","containingBox","appendSeparators","boxes","min","lastBox","throttledUpdated","timeout","prevRes","runTs","awaits","apply","arguments","simpleThrottle","parentElement","parentBbox","getBoundingClientRect","children","contains","outerCss","rows","row","firstChild","shift","bbox","first","rowBoxes","elem","computed","getComputedStyle","parseFloat","marginTop","marginRight","marginBottom","marginLeft","getMarginBox","rowBox","mounted","mutationObserver","resizeObserver","mutationObserverCallback","records","record","disconnect","MutationObserver","childList","characterData","subtree","ResizeObserver","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","aspect","hasItemsError","contentVAlign","contentHAlign","childLayoutParams","jsonItems","childJson","childContext","processTemplate","jsonOrientation","correctContainerOrientation","$jsonOrientation","jsonContentVAlign","$jsonContentVAlign","jsonContentHAlign","$jsonContentHAlign","jsonLayoutMode","layout_mode","wrap","$jsonLayoutMode","jsonSeparator","$jsonSeparator","_c","jsonLineSeparator","line_separator","$jsonLineSeparator","calcAdditionalPaddings","jsonAspect","newRatio","$jsonAspect","ratio","newChildLayoutParams","correctGeneralOrientation","jsonDelimiterStyle","delimiter_style","$jsonDelimiterStyle","hasContent","STATE_ERROR","FALLBACK_IMAGE","state","placeholderColor","backgroundImage","aspectPaddingBottom","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","jsonImageUrl","jsonGifUrl","gif_url","imageUrl","$jsonImageUrl","$jsonGifUrl","isWidthContent","isHeightContent","jsonPreview","preview","$jsonPreview","startsWith","jsonPlaceholderColor","placeholder_color","updatePlaceholderColor","$jsonPlaceholderColor","jsonScale","$jsonScale","jsonPosition","correctImagePosition","$jsonPosition","jsonA11y","alt","$jsonA11y","jsonTintColor","jsonTintMode","$jsonTintColor","newTintColor","newTintMode","$jsonTintMode","jsonAppearanceAnimation","appearance_animation","$jsonAppearanceAnimation","jsonFilters","newFilter","newClipPath","$jsonFilters","loaded","isSpannedWeight","formatWeight","gridCalcTemplates","weights","minSizes","multiply","minSize","totalWeight","template","every","minTrackSize","childStore","resultItems","columnCount","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","rowCount","hasLayoutError","jsonColumnCount","column_count","$jsonColumnCount","row_span","columnSpan","column_span","used","childInfo","$childStore","widthWeight","heightWeight","j","joinTemplateSizes","sizes","temp","counter","debounce","args","scroller","itemsGridElem","galleryItemsWrappers","hasScrollLeft","hasScrollRight","leftClass","getCustomization","rightClass","isDesktop","gridGap","crossGridGap","crossSpacing","columns","itemSpacing","templateSizes","scrollerStyle","defaultItem","updateArrowsVisibility","scrollLeft","scrollWidth","containerWidth","offsetWidth","updateArrowsVisibilityDebounced","scroll","behavior","getItems","maxLen","scrollToGalleryItem","galleryElements","isHorizontal","elementOffset","scrollDirection","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","findIndex","el","checkIsFullyIntersecting","visibleElementsMap","checkIsIntersecting","firstVisibleElement","registerInstance","setCurrentItem","setPreviousItem","overflow","currentElementIndex","previousItem","setNextItem","isEdgeScroll","scrollTop","offsetHeight","nextItem","unregisterInstance","shouldCheckArrows","$isDesktop","itemsGrid","column","rebuildItemsGrid","jsonCrossContentAlignment","cross_content_alignment","correctAlignment","$jsonCrossContentAlignment","jsonItemSpacing","item_spacing","$jsonItemSpacing","jsonCrossSpacing","cross_spacing","$jsonCrossSpacing","gridTemplate","itemSize","jsonScrollMode","scroll_mode","newScrollerStyle","$jsonScrollMode","jsonRestrictParentScroll","restrict_parent_scroll","gridStyle","columnStyle","jsonDefaultItem","default_item","$jsonDefaultItem","rowIndex","child_ctx","title","selected","actionable","title_click_action","div","animated","instId","genId","tabsElem","panelsWrapper","swiperElem","jsonSelectedTab","selected_tab","tabActiveFontWeight","tabInactiveFontWeight","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","separatorBackground","separatorMargins","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","setSelected","focus","initTabsSwipe","changeTab","selectedTab","querySelector","moveSelected","newSelected","selectItem","_event","updateTransform","updateShowedPanels","activePanel","getElementById","updateWrapperHeight","hideNonVisiblePanels","currentTransform","clientWidth","around","isShowed","hidePanelsTimeout","clientHeight","swipeStartTime","startTransform","moveCoords","isSwipeStarted","isSwipeCanceled","newLayoutParams","jsonTabStyle","tab_title_style","tabStyle","$jsonTabStyle","adjustedPaddings","correctBorderRadius","active_font_weight","inactive_font_weight","active_text_color","inactive_text_color","active_background_color","inactive_background_color","has_separator","jsonSeparatorColor","separator_color","jsonSeparatorPaddings","separator_paddings","$jsonSeparatorColor","$jsonSeparatorPaddings","jsonSwipeEnabled","switch_tabs_by_content_swipe_enabled","isSwipeEnabled","$jsonSwipeEnabled","which","restrictClosest","closest","panelsWrapperWidth","cubicInOut","pow","cubicIn","cubicOut","interpolateEasing","table","floor","t2","spring","EASING","linear","ease_in","ease_out","ease_in_out","calcMaxDuration","transitions","inOutTransition","elementBbox","rootBbox","maxDuration","startAlpha","tMs","parts","relative","oriented","eased","edge","distance","travel","translate","offsetX","offsetY","anyScale","activeScale","lerp","changeBoundsTransition","beforeBbox","afterBbox","flattenTransition","offsetLeft","offsetTop","old_blocks","get_key","dynamic","create_each_block","get_context","old_indexes","new_blocks","new_lookup","deltas","will_move","did_move","new_block","old_block","new_key","old_key","getTransitionChange","transitionOrSet","animationRoot","transitionChangeBoxes","childrenIds","childStateMap","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","getItemAnimation","child","transitionsList","resolvePromise","stateId","div_id","selectedId","setRunning","wasIds","transitionsOutToRun","newState","find","state_id","selectedState","transitionsInToRun","inOutList","concat","changeList","getChild","itemWithMaxDuration","jsonDefaultStateId","default_state_id","onOutro","states","initDefaultState","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","onScrollDebounced","pagerElements","wrapperRect","scrollToPagerItem","nextPagerItem","pagerItems","gridAuto","neighbourPageWidth","neighbour_page_width","pageWidth","_g","page_width","pagerId","newPagersMap","$pagers","pagerDataUpdate","selected_actions","runSelectedActions","pagers","getStore","AVAIL_SHAPES","indicatorItemsWrapper","pagerData","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","onIndicatorItemClick","moveFocus","activeItem","jsonShape","jsonActiveItemColor","active_item_color","jsonInactiveItemColor","inactive_item_color","jsonActiveItemSize","active_item_size","jsonActiveShape","active_shape","jsonInactiveShape","inactive_shape","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","jsonSpaceBetweenCenters","space_between_centers","jsonItemsPlacement","items_placement","$jsonItemsPlacement","$jsonSpaceBetweenCenters","max_visible_items","pagersMap","pager_id","currentItemOffsetLeft","onPagerDataUpdate","correctSliderTextStyle","textStyle","convertedColor","textColor","clamp","MIN_INT","MAX_NUMBER","MAX_VALUE","MIN_NUMBER","MIN_VALUE","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","DATETIME","Variable","convertValue","getName","fromString","setValue","converted","getValue","TYPE_TO_CLASS","string","getType","number","isFinite","integer","boolean","createVariable","fillTicks","to","minValue","maxValue","inside","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","tracksInner","switchedTracks","firstVariable","thumb_value_variable","secondVariable","thumb_secondary_value_variable","valueVariable","getVariable","value2Variable","markActiveTicks","markInactiveTicks","$valueVariable","value2","$value2Variable","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveStyle","markInactiveStyle","textSecondaryStyle","secondaryDescription","onInputChange","isTicksWarning","checkTicks","ticksCount","activeTickWidth","inactiveTickWidth","checkTicksDebounced","jsonMinValue","min_value","jsonMaxValue","max_value","$jsonMinValue","$jsonMaxValue","newVal2","jsonThumbStyle","thumb_style","$jsonThumbStyle","jsonThumbSecondaryStyle","thumb_secondary_style","$jsonThumbSecondaryStyle","jsonTrackInactiveStyle","track_inactive_style","$jsonTrackInactiveStyle","jsonTrackActiveStyle","track_active_style","$jsonTrackActiveStyle","jsonMarkActiveStyle","tick_mark_active_style","newStyle","$jsonMarkActiveStyle","jsonMarkInactiveStyle","tick_mark_inactive_style","$jsonMarkInactiveStyle","jsonTextStyle","thumb_text_style","$jsonTextStyle","jsonSecondaryTextStyle","thumb_secondary_text_style","$jsonSecondaryTextStyle","jsonSecondaryAccessibility","secondary_value_accessibility","$jsonSecondaryAccessibility","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","trackActivePart","trackActiveOffset","changedTouches","rangeBbox","part","final","endsWith","input","holder","isPressed","verticalOverflow","variable","text_variable","jsonHintText","hint_text","jsonHintColor","hint_color","hintColor","jsonFontSize","jsonFontWeight","jsonLetterSpacing","jsonHighlightColor","highlight_color","highlightColor","jsonKeyboardType","keyboard_type","KEYBOARD_MAP","email","phone","single_line_text","multi_line_text","uri","keyboardType","inputType","jsonVisibleMaxLines","max_visible_lines","jsonSelectAll","select_all_on_focus","checkVerticalOverflow","placeholder","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","isMultiline","$jsonVisibleMaxLines","select","TYPE_MAP","container","Image","gif","grid","gallery","tabs","pager","indicator","slider","hasTemplate","svgFiltersMap","applyTemplate","templates","newContext","newJson","copyTemplated","base","extender","simpleKeys","templateKeys","voidUnsubscribe","constStore","buildBinaryExpression","tail","operator","buildLogicalExpression","buildString","quasis","expressions","convertToInt32","escapeChar","char","peg$SyntaxError","message","expected","found","location","self","setPrototypeOf","peg$padEnd","targetLength","padString","repeat","peg$parse","peg$result","peg$FAILED","peg$source","grammarSource","peg$startRuleFunctions","peg$parsestart","JsonStringContents","s0","s1","s2","peg$currPos","peg$parseJsonStringChar","peg$savedPos","peg$f1","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c12","peg$c14","peg$c15","peg$c27","peg$c28","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r5","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$e5","peg$classExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$otherExpectation","peg$e26","peg$e27","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$e39","peg$e40","peg$e41","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","inverted","peg$computePosDetails","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","source","peg$fail","peg$parse_","peg$parseExpression","s3","s5","substr","test","peg$f5","peg$f6","peg$f9","s7","s9","peg$parseOr","consequent","alternate","s4","s6","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseSum","peg$parseFactor","peg$parseUnary","peg$parseNumber","peg$parseInteger","argument","peg$parseIdentifier","peg$parseArguments","callee","peg$parseStringChar","peg$parseStringContents","peg$parseString","peg$parseBoolean","peg$parsePrimaryExpression","peg$parseCall","peg$f27","peg$f28","peg$f31","s8","peg$parseReservedWord","buildMessage","peg$buildStructuredError","parent","C","peg$subclass","format","sources","s","loc","filler","hatLen","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","escapedParts","classEscape","any","other","hex","ch","toUpperCase","describeExpectation","descriptions","describeExpected","describeFound","funcs","funcByArgs","registerFunc","desc","arr","funcKey","matchFuncArgs","func","minArgs","maxArgs","lastArg","isVararg","funcArg","walk","ast","visitors","valToInternal","dateToString","date","toISOString","valToString","stringifyColor","safeConvertColor","valToPreview","typeToString","int32Array","Int32Array","roundInteger","checkIntegerOverflow","gatherVarsFromAst","evalError","msg","arg","toNumber","calcPad","pad","padStart","prefix","padEnd","suffix","arg0","arg1","mod","mul","sub","sum","signum","sign","copySign","colorGetter","field","parsed","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","getDuration","milliseconds","delimiter","whole","argsToStr","encodeURIComponent","_err","decodeURIComponent","datetime","getTime","year","copy","setFullYear","month","setMonth","day","getMonth","setDate","getDate","getMaxDate","hours","setHours","getTimezoneOffset","minutes","setMinutes","seconds","setSeconds","millis","setMilliseconds","wholeStr","partStr","what","replacer","RegExp","escapeRegExp","lastIndexOf","trim","red","green","blue","EVAL_MAP","StringLiteral","vars","expr","NumberLiteral","IntegerLiteral","BooleanLiteral","UnaryExpression","evalAny","ConditionalExpression","TemplateLiteral","LogicalExpression","BinaryExpression","evalBinaryEquality","leftVal","rightVal","evalBinaryCompare","evalBinarySum","evalBinaryFactor","CallExpression","funcName","findRes","firstError","findBestMatchedFunc","argsType","err","varName","variableToValue","evalExpression","unknownVariableName","checkVariables","ExpressionBinding","variables","containsUnsetVariables","prepareVarsObj","jsonProp","hasExpression","parse","propVars","expression","applyVars","prepareVars","storesMap","controllerToStore","controllerToVars","getControllerStore","controller","getControllerVars","GlobalVariablesController","setVariable","variableName","createGlobalVariablesController","AVAIL_ACTIONS","TimersController","hasVariableWithType","setVariableValue","visibilityHandler","visibilityState","awaitActions","execTimerAction","unholdAll","holdAll","_id","timers","stopTimerTimeouts","createTimer","tick_interval","value_variable","tick_actions","actionTyped","durationTimeout","tickTimeout","tickOrUnholdAction","durationPassed","durationStarted","updateVariable","callActions","startOrResume","hold","startTick","tickStarted","tickPassed","pause","resume","cancel","reset","actionsWithExpressions","emptyTouchstartHandler","passive","platform","theme","globalVariablesController","mix","customization","builtinProtocols","onError","onStat","onCustomAction","onComponent","matchMedia","touchQuery","matches","addListener","currentTheme","themeQuery","themeQueryListener","builtinSet","initialError","card","templateName","simpleCheckInput","stateChange","globalVariablesStore","globalVariables","localVariables","awaitingGlobalVariables","timersController","prepared","console","warn","idCounter","svgFilterUsages","URLSearchParams","stateInterface","divId","selectedStateId","childState","setState","getInstance","variableInstance","processUrls","win","open","opener","instancesMap","filterDefinedVars","usedTypes","genClass","filterId","awaitVariableChanges","setStore","foundType","registerComponent","unregisterComponent","_stateId","_json","_templateContext","_transitions","_node","_direction","startVariables","varInstance","palette","newVarName","awaitingStore","variableTriggers","variable_triggers","trigger","prevConditionResult","condition","exprVars","remaining","waitForVars","conditionResult","resultAction","rootStateDiv","newTheme","render","Root"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"client.mjs","mappings":"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","sources":["webpack://@divkitframework/divkit/webpack/bootstrap","webpack://@divkitframework/divkit/webpack/runtime/define property getters","webpack://@divkitframework/divkit/webpack/runtime/hasOwnProperty shorthand","webpack://@divkitframework/divkit/./node_modules/svelte/internal/index.mjs","webpack://@divkitframework/divkit/./node_modules/svelte/store/index.mjs","webpack://@divkitframework/divkit/./src/components/Root.module.css","webpack://@divkitframework/divkit/./src/context/root.ts","webpack://@divkitframework/divkit/./src/utils/wrapError.ts","webpack://@divkitframework/divkit/./src/components/text/Text.module.css","webpack://@divkitframework/divkit/./src/components/utilities/Outer.module.css","webpack://@divkitframework/divkit/./src/utils/makeStyle.ts","webpack://@divkitframework/divkit/./src/utils/pxToEm.ts","webpack://@divkitframework/divkit/./src/utils/padLeft.ts","webpack://@divkitframework/divkit/./src/utils/correctColor.ts","webpack://@divkitframework/divkit/./src/utils/htmlFilter.ts","webpack://@divkitframework/divkit/./src/utils/truthy.ts","webpack://@divkitframework/divkit/./src/utils/background.ts","webpack://@divkitframework/divkit/./src/utils/url.ts","webpack://@divkitframework/divkit/./src/utils/genClassName.ts","webpack://@divkitframework/divkit/./src/use/devtool.ts","webpack://@divkitframework/divkit/./src/context/state.ts","webpack://@divkitframework/divkit/./src/utils/edgeInsertsToCss.ts","webpack://@divkitframework/divkit/./src/utils/isNumber.ts","webpack://@divkitframework/divkit/./src/utils/isNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInserts.ts","webpack://@divkitframework/divkit/./src/utils/correctNonNegativeNumber.ts","webpack://@divkitframework/divkit/./src/utils/isDeepEqual.ts","webpack://@divkitframework/divkit/./src/utils/assignIfDifferent.ts","webpack://@divkitframework/divkit/./src/utils/correctCSSInterpolator.ts","webpack://@divkitframework/divkit/./src/utils/correctNumber.ts","webpack://@divkitframework/divkit/./src/utils/flattenAnimation.ts","webpack://@divkitframework/divkit/./src/utils/correctEdgeInsertsObject.ts","webpack://@divkitframework/divkit/./src/utils/borderRadius.ts","webpack://@divkitframework/divkit/./src/utils/doNothing.ts","webpack://@divkitframework/divkit/./src/context/action.ts","webpack://@divkitframework/divkit/./src/utils/getTouchCoords.ts","webpack://@divkitframework/divkit/./src/components/utilities/Actionable.svelte","webpack://@divkitframework/divkit/./src/utils/isPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/filters.ts","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.module.css","webpack://@divkitframework/divkit/./src/components/utilities/OuterBackground.svelte","webpack://@divkitframework/divkit/./src/components/utilities/Outer.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadiusObject.ts","webpack://@divkitframework/divkit/./src/utils/sumEdgeInsets.ts","webpack://@divkitframework/divkit/./src/utils/correctAlpha.ts","webpack://@divkitframework/divkit/./src/utils/correctVisibility.ts","webpack://@divkitframework/divkit/./src/use/visibilityAction.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.module.css","webpack://@divkitframework/divkit/./src/utils/correctPositiveNumber.ts","webpack://@divkitframework/divkit/./src/utils/fontWeightToCss.ts","webpack://@divkitframework/divkit/./src/utils/correctFontWeight.ts","webpack://@divkitframework/divkit/./src/components/text/TextRange.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignmentHorizontal.ts","webpack://@divkitframework/divkit/./src/utils/correctAlignmentVertical.ts","webpack://@divkitframework/divkit/./src/utils/correctTintMode.ts","webpack://@divkitframework/divkit/./src/components/text/Text.svelte","webpack://@divkitframework/divkit/./src/utils/propToString.ts","webpack://@divkitframework/divkit/./src/utils/correctBooleanInt.ts","webpack://@divkitframework/divkit/./src/components/container/Container.module.css","webpack://@divkitframework/divkit/./src/utils/correctDrawableStyles.ts","webpack://@divkitframework/divkit/./src/utils/container.ts","webpack://@divkitframework/divkit/./src/utils/hasGapSupport.ts","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparators.svelte","webpack://@divkitframework/divkit/./src/components/container/ContainerSeparator.module.css","webpack://@divkitframework/divkit/./src/utils/simpleThrottle.ts","webpack://@divkitframework/divkit/./src/utils/getMarginBox.ts","webpack://@divkitframework/divkit/./src/components/container/Container.svelte","webpack://@divkitframework/divkit/./src/utils/correctContainerOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.module.css","webpack://@divkitframework/divkit/./src/utils/correctGeneralOrientation.ts","webpack://@divkitframework/divkit/./src/components/separator/Separator.svelte","webpack://@divkitframework/divkit/./src/components/image/Image.module.css","webpack://@divkitframework/divkit/./src/components/image/Image.svelte","webpack://@divkitframework/divkit/./src/utils/correctImagePosition.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.module.css","webpack://@divkitframework/divkit/./src/utils/gridCalcTemplates.ts","webpack://@divkitframework/divkit/./src/components/grid/Grid.svelte","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.module.css","webpack://@divkitframework/divkit/./src/utils/joinTemplateSizes.ts","webpack://@divkitframework/divkit/./src/utils/debounce.ts","webpack://@divkitframework/divkit/./src/components/gallery/Gallery.svelte","webpack://@divkitframework/divkit/./src/utils/correctAlignment.ts","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.module.css","webpack://@divkitframework/divkit/./src/components/tabs/Tabs.svelte","webpack://@divkitframework/divkit/./src/utils/correctBorderRadius.ts","webpack://@divkitframework/divkit/./src/utils/keyboard/codes.ts","webpack://@divkitframework/divkit/./node_modules/svelte/easing/index.mjs","webpack://@divkitframework/divkit/./src/utils/easings/interpolateEasing.ts","webpack://@divkitframework/divkit/./src/utils/easings/ease.ts","webpack://@divkitframework/divkit/./src/utils/easings/spring.ts","webpack://@divkitframework/divkit/./src/utils/inOutTransition.ts","webpack://@divkitframework/divkit/./src/utils/lerp.ts","webpack://@divkitframework/divkit/./src/utils/changeBoundsTransition.ts","webpack://@divkitframework/divkit/./src/utils/flattenTransition.ts","webpack://@divkitframework/divkit/./src/components/state/State.module.css","webpack://@divkitframework/divkit/./src/components/state/State.svelte","webpack://@divkitframework/divkit/./src/components/pager/Pager.module.css","webpack://@divkitframework/divkit/./src/components/pager/Pager.svelte","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.module.css","webpack://@divkitframework/divkit/./src/components/indicator/Indicator.svelte","webpack://@divkitframework/divkit/./src/components/slider/Slider.module.css","webpack://@divkitframework/divkit/./src/utils/correctSliderTextStyle.ts","webpack://@divkitframework/divkit/./src/utils/clamp.ts","webpack://@divkitframework/divkit/./src/expressions/const.ts","webpack://@divkitframework/divkit/./src/expressions/variable.ts","webpack://@divkitframework/divkit/./src/components/slider/Slider.svelte","webpack://@divkitframework/divkit/./src/components/input/Input.module.css","webpack://@divkitframework/divkit/./src/components/input/Input.svelte","webpack://@divkitframework/divkit/./src/components/typeMap.ts","webpack://@divkitframework/divkit/./src/components/utilities/Unknown.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.svelte","webpack://@divkitframework/divkit/./src/components/utilities/RootSvgFilters.module.css","webpack://@divkitframework/divkit/./src/utils/applyTemplate.ts","webpack://@divkitframework/divkit/./src/utils/constStore.ts","webpack://@divkitframework/divkit/./src/expressions/expressions.js","webpack://@divkitframework/divkit/./src/expressions/funcs/funcs.ts","webpack://@divkitframework/divkit/./src/expressions/walk.ts","webpack://@divkitframework/divkit/./src/expressions/utils.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/std.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/datetime.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/strings.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/math.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/colors.ts","webpack://@divkitframework/divkit/./src/expressions/funcs/interval.ts","webpack://@divkitframework/divkit/./src/expressions/eval.ts","webpack://@divkitframework/divkit/./src/utils/escapeRegExp.ts","webpack://@divkitframework/divkit/./src/expressions/json.ts","webpack://@divkitframework/divkit/./src/utils/uniq.ts","webpack://@divkitframework/divkit/./src/stores/index.ts","webpack://@divkitframework/divkit/./src/stores/pagers.ts","webpack://@divkitframework/divkit/./src/expressions/globalVariablesController.ts","webpack://@divkitframework/divkit/./src/utils/timers.ts","webpack://@divkitframework/divkit/./src/components/Root.svelte","webpack://@divkitframework/divkit/./src/utils/simpleCheckInput.ts","webpack://@divkitframework/divkit/./src/client.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n let children = target.childNodes;\n // If target is <head>, there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value === null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n select.selectedIndex = -1; // no option should be selected\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n else\n this.e = element(target.nodeName);\n this.t = target;\n this.c(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nclass HtmlTagHydration extends HtmlTag {\n constructor(claimed_nodes, is_svg = false) {\n super(is_svg);\n this.e = this.n = null;\n this.l = claimed_nodes;\n }\n c(html) {\n if (this.l) {\n this.n = this.l;\n }\n else {\n super.c(html);\n }\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert_hydration(this.t, this.n[i], anchor);\n }\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\nconst managed_styles = new Map();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach(info => {\n const { stylesheet } = info;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n info.rules = {};\n });\n managed_styles.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, { cancelable = false } = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail, { cancelable });\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction getAllContexts() {\n return get_current_component().$$.context;\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n // @ts-ignore\n callbacks.slice().forEach(fn => fn.call(this, event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\nlet flushidx = 0; // Do *not* move this inside the flush() function\nfunction flush() {\n const saved_component = current_component;\n do {\n // first, call beforeUpdate functions\n // and update components\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n else if (callback) {\n callback();\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n started = true;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = (program.b - t);\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const { resolved } = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst void_element_names = /^(?:area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/;\nfunction is_void(name) {\n return void_element_names.test(name) || name.toLowerCase() === '!doctype';\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, attrs_to_add) {\n const attributes = Object.assign({}, ...args);\n if (attrs_to_add) {\n const classes_to_add = attrs_to_add.classes;\n const styles_to_add = attrs_to_add.styles;\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n if (styles_to_add) {\n if (attributes.style == null) {\n attributes.style = style_object_to_string(styles_to_add);\n }\n else {\n attributes.style = style_object_to_string(merge_ssr_styles(attributes.style, styles_to_add));\n }\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${value}\"`;\n }\n });\n return str;\n}\nfunction merge_ssr_styles(style_attribute, style_directive) {\n const style_object = {};\n for (const individual_style of style_attribute.split(';')) {\n const colon_index = individual_style.indexOf(':');\n const name = individual_style.slice(0, colon_index).trim();\n const value = individual_style.slice(colon_index + 1).trim();\n if (!name)\n continue;\n style_object[name] = value;\n }\n for (const name in style_directive) {\n const value = style_directive[name];\n if (value) {\n style_object[name] = value;\n }\n else {\n delete style_object[name];\n }\n }\n return style_object;\n}\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n/**\n * Note: this method is performance sensitive and has been optimized\n * https://github.com/sveltejs/svelte/pull/5701\n */\nfunction escape(value, is_attr = false) {\n const str = String(value);\n const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n pattern.lastIndex = 0;\n let escaped = '';\n let last = 0;\n while (pattern.test(str)) {\n const i = pattern.lastIndex - 1;\n const ch = str[i];\n escaped += str.substring(last, i) + (ch === '&' ? '&' : (ch === '\"' ? '"' : '<'));\n last = i + 1;\n }\n return escaped + str.substring(last);\n}\nfunction escape_attribute_value(value) {\n // keep booleans, null, and undefined for the sake of `spread`\n const should_escape = typeof value === 'string' || (value && typeof value === 'object');\n return should_escape ? escape(value, true) : value;\n}\nfunction escape_object(obj) {\n const result = {};\n for (const key in obj) {\n result[key] = escape_attribute_value(obj[key]);\n }\n return result;\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(context || (parent_component ? parent_component.$$.context : [])),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n const assignment = (boolean && value === true) ? '' : `=\"${escape(value, true)}\"`;\n return ` ${name}${assignment}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\nfunction style_object_to_string(style_object) {\n return Object.keys(style_object)\n .filter(key => style_object[key])\n .map(key => `${key}: ${style_object[key]};`)\n .join(' ');\n}\nfunction add_styles(style_object) {\n const styles = style_object_to_string(style_object);\n return styles ? ` style=\"${styles}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles && append_styles($$.root);\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n start_hydrating();\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n end_hydrating();\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.49.0' }, detail), { bubbles: true }));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction append_hydration_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append_hydration(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction insert_hydration_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert_hydration(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nfunction validate_dynamic_element(tag) {\n const is_string = typeof tag === 'string';\n if (tag && !is_string) {\n throw new Error('<svelte:element> expects \"this\" attribute to be a string.');\n }\n}\nfunction validate_void_dynamic_element(tag) {\n if (tag && is_void(tag)) {\n throw new Error(`<svelte:element this=\"${tag}\"> is self-closing and cannot have content.`);\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * <script lang=\"ts\">\n * \timport { MyComponent } from \"component-library\";\n * </script>\n * <MyComponent foo={'bar'} />\n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to separate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, HtmlTagHydration, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_styles, add_transform, afterUpdate, append, append_dev, append_empty_stylesheet, append_hydration, append_hydration_dev, append_styles, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_html_tag, claim_space, claim_svg_element, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, end_hydrating, escape, escape_attribute_value, escape_object, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getAllContexts, getContext, get_all_dirty_from_scope, get_binding_group_value, get_current_component, get_custom_elements_slots, get_root_for_style, get_slot_changes, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, insert_hydration, insert_hydration_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, is_void, listen, listen_dev, loop, loop_guard, merge_ssr_styles, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, src_url_equal, start_hydrating, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, trusted, update_await_block_branch, update_keyed_each, update_slot, update_slot_base, validate_component, validate_dynamic_element, validate_each_argument, validate_each_keys, validate_slots, validate_store, validate_void_dynamic_element, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"divkit-b023c\",\"root__clickable\":\"divkit-bd259\",\"root__clickable-no-transition\":\"divkit-d9099\",\"root__unselectable\":\"divkit-c016b\",\"root_platform_desktop\":\"divkit-ee112\",\"root__only-desktop\":\"divkit-fef1e\",\"root_restrict-scroll\":\"divkit-aa145\",\"root_disabled-context-menu\":\"divkit-f0cba\"};","import type { Readable, Writable } from 'svelte/types/runtime/store';\nimport type { WrappedError } from '../utils/wrapError';\nimport type { Action, DivBase, TemplateContext } from '../../typings/common';\nimport type { VisibilityAction } from '../types/visibilityAction';\nimport type { DivBaseData } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable, VariableType } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface RootCtxValue {\n logError(error: WrappedError): void;\n logStat(type: string, action: MaybeMissing<Action | VisibilityAction>): void;\n hasTemplate(templateName: string): boolean;\n processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n };\n genId(key: string): string;\n genClass(key: string): string;\n execAction(action: MaybeMissing<Action | VisibilityAction>): void;\n execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void>;\n execCustomAction(action: (Action | VisibilityAction) & { url: string }): void;\n isRunning(type: Running): boolean;\n setRunning(type: Running, val: boolean): void;\n registerInstance<T>(id: string, block: T): void;\n unregisterInstance(id: string): void;\n addSvgFilter(color: string, mode: TintMode): string;\n removeSvgFilter(color: string | undefined, mode: TintMode): void;\n getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>>;\n getJsonWithVars<T>(jsonProp: T): MaybeMissing<T>;\n getStore<T>(id: string): Writable<T>;\n getVariable(varName: string, type: VariableType): Variable | undefined;\n getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n getBuiltinProtocols(): Set<string>;\n isDesktop: Readable<boolean>;\n\n // Devtool\n registerComponent?({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void;\n unregisterComponent?({\n node\n }: {\n node: HTMLElement;\n }): void;\n}\n","export interface WrappedError extends Error {\n level: 'error' | 'warn';\n additional?: Record<string, unknown>;\n}\n\nexport type LogError = (error: WrappedError) => void;\n\nexport function wrapError(error: Error, params: {\n level?: 'error' | 'warn';\n additional?: Record<string, unknown>;\n} = {}): WrappedError {\n const wrapped = error as WrappedError;\n\n wrapped.level = params.level || 'error';\n\n if (params.additional) {\n wrapped.additional = params.additional;\n }\n\n return wrapped;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"divkit-d9b0e\",\"text_halign_left\":\"divkit-a4cb7\",\"text_halign_center\":\"divkit-e1659\",\"text_halign_right\":\"divkit-ea280\",\"text_valign_top\":\"divkit-d8ce0\",\"text_valign_center\":\"divkit-ef58e\",\"text_valign_bottom\":\"divkit-fe8ed\",\"text_valign_baseline\":\"divkit-e0c6c\",\"text__inner\":\"divkit-b8528\",\"text_singleline\":\"divkit-ef11c\",\"text_truncate_none\":\"divkit-c6ea1\",\"text_multiline\":\"divkit-ee8e3\",\"text__inner_gradient\":\"divkit-cb8e0\",\"text__image\":\"divkit-bf6e2\",\"text__image_hidden\":\"divkit-f1002\"};","// extracted by mini-css-extract-plugin\nexport default {\"outer\":\"divkit-d65a7\",\"outer_hide-on-transition-in\":\"divkit-a6d12\",\"outer_halign-self_start\":\"divkit-cc452\",\"outer_halign-self_center\":\"divkit-b8331\",\"outer_halign-self_end\":\"divkit-c573c\",\"outer_halign-self_stretch\":\"divkit-dcc74\",\"outer_valign-self_start\":\"divkit-e8077\",\"outer_valign-self_center\":\"divkit-d40a7\",\"outer_valign-self_end\":\"divkit-e9f84\",\"outer_valign-self_stretch\":\"divkit-b7aa3\",\"outer_parent-flex_vertical\":\"divkit-c143f\",\"outer_parent-flex_horizontal\":\"divkit-ef302\",\"outer_valign-self_baseline\":\"divkit-e72b5\",\"outer_width_content\":\"divkit-b8f4d\",\"outer_height_content\":\"divkit-faa66\",\"outer_width-constrained\":\"divkit-d3211\",\"outer_parent-grid\":\"divkit-ff439\",\"outer_height-constrained\":\"divkit-a5256\",\"outer_parent-overlap\":\"divkit-dab2d\",\"outer_parent-overlap-absolute\":\"divkit-d43fb\",\"outer_scroll-snap_center\":\"divkit-d9e38\",\"outer_scroll-snap_start\":\"divkit-efd1e\",\"outer__border\":\"divkit-d4056\",\"outer_visibility_invisible\":\"divkit-f018b\",\"outer_visibility_gone\":\"divkit-e784b\",\"outer_has-action-animation\":\"divkit-f4980\"};","/**\n * Merges rules from object into css string\n * @param styles\n * @returns\n */\nexport function makeStyle(styles?: Record<string, string | number | undefined>): string | undefined {\n if (!styles) {\n return undefined;\n }\n\n let res = '';\n for (const key in styles) {\n if (styles.hasOwnProperty(key)) {\n if (!styles[key] && styles[key] !== 0) {\n continue;\n }\n if (res) {\n res += ';';\n }\n res += key + ':' + String(styles[key]);\n }\n }\n return res || undefined;\n}\n","/**\n * Converts px to em with rounding\n * @param value\n * @returns\n */\nexport function pxToEm(value: number): string {\n if (typeof value !== 'number' && typeof value !== 'string' || !value) {\n return '0';\n }\n\n const casted = Number(value);\n\n if (isNaN(casted)) {\n return '0';\n }\n\n return (Math.ceil(casted * 1000) / 10000) + 'em';\n}\n\nexport function pxToEmWithUnits(value: number): string {\n let res = pxToEm(value);\n\n if (res === '0') {\n res += 'em';\n }\n\n return res;\n}\n","export function padLeft(val: string, count: number): string {\n while (val.length < count) {\n val = '0' + val;\n }\n return val;\n}\n","import { padLeft } from './padLeft';\n\n/**\n * Converts color from app format (ARGB) to css format (RGBA)\n * @param color Color with format #RGB, #ARGB, #RRGGBB, #AARRGGBB\n * @param alpha Color additional opacity\n * @param defaultColor Default color value, used if input color is incorrect\n * @returns Color with opacity if it has correct format, or defaultColor elsewhere\n */\nexport function correctColor(color: string | undefined, alpha = 1, defaultColor = 'transparent'): string {\n color = (color || '').toLowerCase();\n\n if (color.charAt(0) !== '#') {\n return defaultColor;\n }\n\n const parsedColor = parseColor(color);\n if (parsedColor) {\n parsedColor.a *= alpha;\n return stringifyColorToCss(parsedColor);\n }\n\n return defaultColor;\n}\n\nexport interface ParsedColor {\n a: number;\n r: number;\n g: number;\n b: number;\n}\n\nfunction stringifyColorToCss(color: ParsedColor): string {\n if (color.a === 255) {\n return `#${[color.r, color.g, color.b].map(it => {\n return padLeft(Math.round(it).toString(16), 2);\n }).join('')}`;\n }\n\n return `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(2)})`;\n}\n\nexport function parseColor(color: string): ParsedColor | null {\n const colorMatch = (\n // #AARRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #ARGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])$/i) ||\n // #RRGGBB\n color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) ||\n // #RGB\n color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)\n );\n\n if (colorMatch) {\n // with alpha part in color\n if (colorMatch.length === 5) {\n const [_, a, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n const alphaPart = a.length === 2 ? a : a + a;\n\n return {\n a: parseInt(alphaPart, 16),\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n const [_, r, g, b] = colorMatch;\n const redPart = r.length === 2 ? r : r + r;\n const greenPart = g.length === 2 ? g : g + g;\n const bluePart = b.length === 2 ? b : b + b;\n\n return {\n a: 255,\n r: parseInt(redPart, 16),\n g: parseInt(greenPart, 16),\n b: parseInt(bluePart, 16)\n };\n }\n\n return null;\n}\n","/**\n * Escapes html\n * @param str\n * @returns\n */\nexport function htmlFilter(str: string): string {\n let str2 = String(str);\n\n if (str2.indexOf('&') > -1) {\n str2 = str2.replace(/&/g, '&');\n }\n if (str2.indexOf('<') > -1) {\n str2 = str2.replace(/</g, '<');\n }\n if (str2.indexOf('>') > -1) {\n str2 = str2.replace(/>/g, '>');\n }\n if (str2.indexOf('\"') > -1) {\n str2 = str2.replace(/\"/g, '"');\n }\n\n return str2;\n}\n","export const Truthy = Boolean as unknown as <T>(x: T | null | 0 | '' | false | undefined) => x is T;\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport type {\n Background,\n GradientBackground,\n ImageBackground,\n SolidBackground,\n RadialBackground,\n RadialGradientCenter\n} from '../types/background';\nimport type { ImageScale } from '../types/imageScale';\nimport type { MaybeMissing } from '../expressions/json';\nimport { correctColor } from './correctColor';\nimport { htmlFilter } from './htmlFilter';\nimport { Truthy } from './truthy';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getBackground(bgs: MaybeMissing<Background>[]): {\n color?: string;\n image?: string;\n size?: string;\n position?: string;\n} {\n if (bgs.length === 1 && bgs[0].type === 'solid') {\n return solidUnique({\n bg: bgs[0]\n });\n }\n\n const res = bgs\n .map(bg => {\n if (bg.type === 'solid') {\n return solid({\n bg\n });\n } else if (bg.type === 'gradient') {\n return gradient({\n bg\n });\n } else if (bg.type === 'image') {\n return image({\n bg\n });\n } else if (bg.type === 'radial_gradient') {\n return radial({\n bg\n });\n }\n })\n .filter(Truthy)\n .reverse()\n .reduce(function(acc, item) {\n acc.image.push(item.image);\n acc.size.push(item.size || 'auto');\n acc.position.push(item.pos || '50% 50%');\n\n return acc;\n }, {\n image: [] as string[],\n size: [] as string[],\n position: [] as string[]\n });\n\n return {\n image: res.image.join(','),\n size: res.size.join(','),\n position: res.position.join(',')\n };\n}\n\nfunction solid(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n size: undefined,\n pos: undefined,\n image: `linear-gradient(to bottom,${color},${color})`\n };\n}\n\nfunction solidUnique(opts: {\n bg: MaybeMissing<SolidBackground>;\n}): {\n color: string;\n size: string;\n position: string;\n} {\n const color = correctColor(opts.bg.color || 'transparent');\n\n return {\n color,\n size: 'auto',\n position: '50% 50%'\n };\n}\n\nfunction gradient(opts: {\n bg: MaybeMissing<GradientBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'linear-gradient(' +\n (90 - Number(opts.bg.angle || 0) + 'deg') +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nconst RELATIVE_SIZE_MAP = {\n nearest_corner: 'closest-corner',\n farthest_corner: 'farthest-corner',\n nearest_side: 'closest-side',\n farthest_side: 'farthest-side'\n};\n\nfunction radialCenterToCss(center: MaybeMissing<RadialGradientCenter> | undefined): string {\n if (center && typeof center === 'object' && 'type' in center && center.value !== undefined) {\n if (center.type === 'fixed') {\n return pxToEmWithUnits(center.value);\n } else if (center.type === 'relative') {\n return `${Number(center.value) * 100}%`;\n }\n }\n\n return '50%';\n}\n\nfunction radial(opts: {\n bg: MaybeMissing<RadialBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n if (!Array.isArray(opts.bg?.colors)) {\n return;\n }\n\n const colors = opts.bg.colors.filter(Truthy) as string[];\n if (!colors.length) {\n return;\n }\n\n const sizeVal = opts.bg.radius;\n let size;\n if (sizeVal && typeof sizeVal === 'object' && 'type' in sizeVal && sizeVal.value !== undefined) {\n if (sizeVal.type === 'fixed') {\n size = pxToEmWithUnits(sizeVal.value);\n } else if (sizeVal.type === 'relative') {\n size = RELATIVE_SIZE_MAP[sizeVal.value];\n }\n }\n\n const centerX = radialCenterToCss(opts.bg.center_x);\n const centerY = radialCenterToCss(opts.bg.center_y);\n\n return {\n size: undefined,\n pos: undefined,\n image:\n 'radial-gradient(' +\n `circle ${size || 'farthest-corner'} at ${centerX} ${centerY}` +\n ',' +\n colors\n .map(color => correctColor(color))\n .join(',') +\n ')'\n };\n}\n\nfunction image(opts: {\n bg: MaybeMissing<ImageBackground>;\n}): {\n size: string | undefined;\n pos: string | undefined;\n image: string;\n} | undefined {\n const image = opts.bg?.image_url;\n\n if (!image) {\n return;\n }\n\n return {\n size: imageSize(opts.bg.scale),\n pos: imagePos(opts.bg),\n image: 'url(\"' + htmlFilter(image) + '\")'\n };\n}\n\nexport function imageSize(scale?: ImageScale): string | undefined {\n if (scale === 'fill' || !scale) {\n return 'cover';\n } else if (scale === 'fit') {\n return 'contain';\n }\n}\n\nexport function imagePos(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}): string {\n let hpos: string;\n let vpos: string;\n\n if (obj.content_alignment_horizontal === 'left') {\n hpos = '0%';\n } else if (obj.content_alignment_horizontal === 'right') {\n hpos = '100%';\n } else {\n hpos = '50%';\n }\n\n if (obj.content_alignment_vertical === 'top') {\n vpos = '0%';\n } else if (obj.content_alignment_vertical === 'bottom') {\n vpos = '100%';\n } else {\n vpos = '50%';\n }\n\n return hpos + ' ' + vpos;\n}\n","export function getUrlSchema(url: string): string {\n const match = /^([^/]+):\\/\\//.exec(url);\n\n return match && match[1] || '';\n}\n\nexport function isBuiltinSchema(schema: string, builtinSchemas: Set<string>): boolean {\n return builtinSchemas.has(schema);\n}\n","import type { Mods } from '../types/general';\n\nfunction push(list: string[], val: string | undefined): void {\n if (val) {\n list.push(val);\n }\n}\n\nexport function genClassName(\n component: string,\n css: Record<string, string>,\n mods: Mods\n): string {\n const res: string[] = [];\n\n push(res, css[component]);\n\n for (const key in mods) {\n if (mods.hasOwnProperty(key)) {\n const val = mods[key];\n if (val) {\n const cssKey = `${component}_${key}` + (typeof val === 'string' ? `_${val}` : '');\n\n push(res, css[cssKey]);\n }\n }\n }\n\n return res.join(' ');\n}\n","import type { RootCtxValue } from '../context/root';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport interface DevtoolResult {\n destroy(): void;\n}\n\nfunction devtoolReal(node: HTMLElement, {\n json,\n origJson,\n templateContext,\n rootCtx\n}: {\n json: Partial<DivBaseData>;\n origJson?: DivBase | undefined;\n templateContext: TemplateContext;\n rootCtx: RootCtxValue;\n}): DevtoolResult {\n rootCtx.registerComponent?.({\n node,\n json,\n origJson,\n templateContext\n });\n\n return {\n destroy() {\n rootCtx.unregisterComponent?.({ node });\n }\n };\n}\n\nexport const devtool = process.env.DEVTOOL ? devtoolReal : undefined;\n","import type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TemplateContext } from '../../typings/common';\nimport type { TransitionChange } from '../types/base';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n getChild(id: string): StateInterface | undefined;\n setState(stateId: string): void;\n}\n\nexport interface StateCtxValue {\n registerInstance(id: string, block: StateInterface): void;\n\n unregisterInstance(id: string): void;\n\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ): Promise<void>;\n\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ): Promise<void>;\n\n hasTransitionChange(id?: string): boolean;\n\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ): Promise<void>;\n\n registerChild(id: string): void;\n unregisterChild(id: string): void;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(edgeInsets: EdgeInsets): string {\n return pxToEm(edgeInsets.top || 0) +\n ' ' +\n pxToEm(edgeInsets.right || 0) +\n ' ' +\n pxToEm(edgeInsets.bottom || 0) +\n ' ' +\n pxToEm(edgeInsets.left || 0);\n}\n","export function isNumber(val: number | undefined): val is number {\n if (typeof val !== 'number' && typeof val !== 'string') {\n return false;\n }\n\n const num = Number(val);\n\n return !isNaN(num);\n}\n","import { isNumber } from './isNumber';\n\nexport function isNonNegativeNumber(val: number | undefined): val is number {\n return isNumber(val) && val >= 0;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(edgeInsets: EdgeInsets | undefined, defaultVal: string): string {\n if (!edgeInsets) {\n return defaultVal;\n }\n\n const list = [\n edgeInsets.top,\n edgeInsets.right,\n edgeInsets.bottom,\n edgeInsets.left\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return edgeInsertsToCss(edgeInsets);\n}\n","export function correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num < 0) {\n return defaultVal;\n }\n return num;\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isDeepEqual<A, B>(a: A, b: B): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return Object.is(a, b);\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i];\n\n if (!hasOwnProperty.call(b, key) || !isDeepEqual(a[key as keyof A], b[key as keyof B])) {\n return false;\n }\n }\n\n return true;\n}\n","import { isDeepEqual } from './isDeepEqual';\n\nexport function assignIfDifferent<A, B>(newVal: A, defaultVal: B): A | B {\n if (isDeepEqual(newVal, defaultVal)) {\n return defaultVal;\n }\n return newVal;\n}\n","import type { Interpolation } from '../types/base';\n\nexport function correctCSSInterpolator(\n interpolator: string | undefined,\n defaultVal: Interpolation\n): Interpolation {\n if (\n interpolator === 'linear' ||\n interpolator === 'ease' ||\n interpolator === 'ease_in_out' ||\n interpolator === 'ease_in' ||\n interpolator === 'ease_out'\n ) {\n return interpolator;\n }\n\n return defaultVal;\n}\n","export function correctNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num)) {\n return defaultVal;\n }\n return num;\n}\n","import { ActionAnimation, AnyAnimation } from '../types/actionable';\n\nexport function flattenAnimation(animation: ActionAnimation): AnyAnimation[] {\n const res: AnyAnimation[] = [];\n\n if (animation.name === 'set') {\n (animation.items || []).forEach(item => {\n res.push(...flattenAnimation(item));\n });\n } else {\n res.push(animation);\n }\n\n return res;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject(\n edgeInsets: EdgeInsets | undefined,\n defaultVal: EdgeInsets | null\n): EdgeInsets | null {\n if (!edgeInsets || typeof edgeInsets !== 'object') {\n return defaultVal;\n }\n\n const list = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const;\n\n for (let i = 0; i < list.length; ++i) {\n if (edgeInsets[list[i]] && !isNonNegativeNumber(edgeInsets[list[i]])) {\n return defaultVal;\n }\n }\n\n return edgeInsets;\n}\n","import type { CornersRadius } from '../types/border';\nimport { pxToEm } from './pxToEm';\n\nexport function borderRadius(cornersRadius: CornersRadius, defaultRadius = 0, fontSize = 10): string {\n return [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ]\n .map(it => pxToEm((it || defaultRadius) / fontSize * 10))\n .join(' ');\n}\n","// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function doNothing(): void {}\n","export const ACTION_CTX = Symbol('action');\n\nexport interface ActionCtxValue {\n hasAction(): boolean;\n}\n","export interface Coords {\n x: number;\n y: number\n}\n\nexport function getTouchCoords(event: TouchEvent): Coords {\n const firstEvent = event.touches[0];\n const x = firstEvent.clientX || firstEvent.pageX;\n const y = firstEvent.clientY || firstEvent.pageY;\n\n return { x, y };\n}\n","<script lang=\"ts\">\n import { getContext, setContext } from 'svelte';\n\n import rootCss from '../Root.module.css';\n\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { doNothing } from '../../utils/doNothing';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { wrapError } from '../../utils/wrapError';\n import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n export let doubleTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let longTapActions: MaybeMissing<Action[]> | undefined = undefined;\n export let cls = '';\n export let style: string | null = null;\n export let attrs: Record<string, string | undefined> | undefined = undefined;\n export let use: ((element: HTMLElement, opts?: any) => void) = doNothing;\n export let customAction: ((event: Event) => boolean) | null = null;\n export let isNativeActionAnimation = true;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return Boolean(actionCtx.hasAction() || actions?.length);\n }\n });\n\n const MIN_SWIPE_PX = 8;\n const MIN_LONG_TAP_DURATION = 400;\n\n let href = '';\n let target: string | undefined = undefined;\n let startTs = -1;\n let startCoords: Coords | null = null;\n let isChanged = false;\n\n if (Array.isArray(actions) && actions?.length) {\n for (let i = 0; i < actions.length; ++i) {\n const url = actions[i].url;\n\n if (url) {\n href = url;\n target = actions[i].target || undefined;\n break;\n }\n }\n }\n\n if (Array.isArray(actions) && actions?.length && actionCtx.hasAction()) {\n href = '';\n rootCtx.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element'), {\n level: 'warn',\n additional: {\n actions\n }\n }));\n }\n\n let hasJSAction = Boolean(customAction);\n if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n href = '';\n hasJSAction = true;\n }\n\n async function onClick(event: MouseEvent): Promise<void> {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n const cancelled = customAction?.(event) === false;\n\n if (cancelled) {\n event.preventDefault();\n } else if (actions) {\n const hasCustomAction = actions.some(action => {\n const url = action?.url;\n if (!url) {\n return false;\n }\n\n const schema = getUrlSchema(url);\n\n return schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols());\n });\n if (hasCustomAction) {\n event.preventDefault();\n }\n rootCtx.execAnyActions(actions);\n }\n }\n\n function onDoubleClick(event: MouseEvent): void {\n if (actionCtx.hasAction()) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n rootCtx.execAnyActions(doubleTapActions, true);\n }\n\n function onTouchStart(event: TouchEvent): void {\n if (event.touches.length > 1) {\n return;\n }\n\n startCoords = getTouchCoords(event);\n isChanged = false;\n startTs = Date.now();\n }\n\n function onTouchMove(event: TouchEvent): void {\n if (!startCoords) {\n return;\n }\n\n const coords = getTouchCoords(event);\n\n if (Math.abs(startCoords.x - coords.x) > MIN_SWIPE_PX || Math.abs(startCoords.y - coords.y) > MIN_SWIPE_PX) {\n isChanged = true;\n }\n }\n\n function onTouchEnd(): void {\n if (!startCoords || startTs < 0) {\n return;\n }\n\n if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n rootCtx.execAnyActions(longTapActions, true);\n }\n\n startCoords = null;\n startTs = -1;\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n return;\n }\n\n if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n rootCtx.execAnyActions(actions);\n event.preventDefault();\n }\n }\n</script>\n\n{#if href}\n <a\n use:use\n {href}\n {target}\n {style}\n class=\"{cls} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n on:click={onClick}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n {...attrs}\n >\n <slot />\n </a>\n{:else}\n <span\n use:use\n class=\"{cls}{hasJSAction ? ` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` : ''} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n {style}\n role={hasJSAction ? 'button' : null}\n tabindex={hasJSAction ? 0 : null}\n on:click={hasJSAction ? onClick : null}\n on:click\n on:dblclick={doubleTapActions?.length ? onDoubleClick : null}\n on:touchstart={longTapActions?.length ? onTouchStart : null}\n on:touchmove={longTapActions?.length ? onTouchMove : null}\n on:touchend={longTapActions?.length ? onTouchEnd : null}\n on:touchcancel={longTapActions?.length ? onTouchEnd : null}\n on:keydown={onKeydown}\n {...attrs}\n >\n <slot />\n </span>\n{/if}\n","import { isNumber } from './isNumber';\n\nexport function isPositiveNumber(val: number | undefined): val is number {\n return isNumber(val) && val > 0;\n}\n","import type { Filter } from '../types/filter';\nimport type { MaybeMissing } from '../expressions/json';\nimport { LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(filters: MaybeMissing<Filter>[], logError: LogError): string {\n return filters.map(filter => {\n if (filter?.type === 'blur') {\n if (isPositiveNumber(filter.radius)) {\n return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n }\n } else {\n logError(wrapError(new Error('Unknown filter'), {\n level: 'warn',\n additional: {\n filter: filter?.type\n }\n }));\n }\n }).filter(Boolean).join(' ');\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"outer-background\":\"divkit-bf253\",\"outer-background_clip\":\"divkit-dcad7\",\"outer-background__item\":\"divkit-b921d\",\"outer-background__item_hidden\":\"divkit-cd613\"};","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './OuterBackground.module.css';\n\n import type { Style } from '../../types/general';\n import type { Background } from '../../types/background';\n import type { MaybeMissing } from '../../expressions/json';\n import { getBackground } from '../../utils/background';\n import { makeStyle } from '../../utils/makeStyle';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { getCssFilter } from '../../utils/filters';\n\n export let background: MaybeMissing<Background[]> = [];\n export let radius = '';\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: styles = background.map(bg => {\n const stl: Style = {};\n const obj: {\n image_url?: string;\n style: Style;\n } = {\n style: stl\n };\n\n if (bg.type === 'nine_patch_image' && bg.insets) {\n stl['border-image'] = `url(\"${bg.image_url}\") ${bg.insets.top || 0} ${bg.insets.right || 0} ${bg.insets.bottom || 0} ${bg.insets.left || 0} fill`;\n stl['border-image-width'] = 'auto';\n } else {\n const res = getBackground([bg]);\n\n if (bg.type === 'solid') {\n stl['background-color'] = res.color;\n }\n if (bg.type === 'gradient') {\n stl['background-image'] = res.image;\n }\n if (bg.type === 'image') {\n stl.opacity = Number(bg.alpha);\n obj.image_url = bg.image_url;\n stl['object-fit'] = res.size;\n stl['object-position'] = res.position;\n\n if (Array.isArray(bg.filters) && bg.filters.length) {\n stl.filter = getCssFilter(bg.filters, rootCtx.logError);\n }\n }\n }\n\n return obj;\n });\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css['outer-background__item_hidden']);\n }\n }\n</script>\n\n<span\n class={css['outer-background'] + (radius ? ' ' + css['outer-background_clip'] : '')}\n style:border-radius={radius}\n>\n {#each styles as item}\n {#if item.image_url}\n <img\n src={item.image_url}\n alt=\"\"\n aria-hidden=\"true\"\n loading=\"lazy\"\n decoding=\"async\"\n class={css['outer-background__item']}\n style={makeStyle(item.style)}\n on:error={onImgError}\n >{:else}<span class={css['outer-background__item']} style={makeStyle(item.style)}></span>\n {/if}\n {/each}\n</span>\n","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import css from './Outer.module.css';\n\n import type { DivBaseData } from '../../types/base';\n import type { Mods, Style } from '../../types/general';\n import type { ActionAnimation, AnyAnimation, DivActionableData } from '../../types/actionable';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Visibility } from '../../types/base';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { CornersRadius } from '../../types/border';\n import type { WrapContentSize } from '../../types/sizes';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { getBackground } from '../../utils/background';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { visibilityAction } from '../../use/visibilityAction';\n import { genClassName } from '../../utils/genClassName';\n import { devtool, DevtoolResult } from '../../use/devtool';\n import { STATE_CTX, StateCtxValue } from '../../context/state';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctAlpha } from '../../utils/correctAlpha';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctColor } from '../../utils/correctColor';\n import { correctVisibility } from '../../utils/correctVisibility';\n import { wrapError } from '../../utils/wrapError';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNumber } from '../../utils/correctNumber';\n import { flattenAnimation } from '../../utils/flattenAnimation';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n import { sumEdgeInsets } from '../../utils/sumEdgeInsets';\n import { correctBorderRadiusObject } from '../../utils/correctBorderRadiusObject';\n import { borderRadius } from '../../utils/borderRadius';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import Actionable from './Actionable.svelte';\n import OuterBackground from './OuterBackground.svelte';\n\n export let json: Partial<DivBaseData & DivActionableData> = {};\n export let origJson: DivBase | undefined = undefined;\n export let templateContext: TemplateContext;\n export let cls = '';\n export let style: Style | undefined = undefined;\n export let layoutParams: LayoutParams = {};\n export let customDescription = false;\n export let customPaddings = false;\n export let customActions = '';\n export let additionalPaddings: EdgeInsets | null = null;\n\n const HORIZONTAL_ALIGN_TO_GENERAL = {\n left: 'start',\n center: 'center',\n right: 'end'\n };\n\n const VERTICAL_ALIGN_TO_GENERAL = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n };\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n\n let currentNode: HTMLElement;\n let attrs: Record<string, string> | undefined;\n\n $: jsonBorder = rootCtx.getDerivedFromVars(json.border);\n let borderStyle: Style = {};\n let borderElemStyle: Style = {};\n let hasBorder = false;\n let strokeWidth = 1;\n let strokeColor = 'transparent';\n let cornerRadius = 0;\n let cornersRadius: CornersRadius = {\n 'top-left': 0,\n 'top-right': 0,\n 'bottom-right': 0,\n 'bottom-left': 0\n };\n let backgroundRadius = '';\n $: {\n let newBorderStyle: Style = {};\n let newBorderElemStyle: Style = {};\n let newHasBorder = false;\n let newBackgroundRadius = '';\n\n if ($jsonBorder) {\n if ($jsonBorder.has_shadow) {\n const shadow = $jsonBorder.shadow;\n if (shadow) {\n newBorderStyle['box-shadow'] =\n pxToEm(shadow.offset?.x?.value || 0) + ' ' +\n pxToEm(shadow.offset?.y?.value || 0) + ' ' +\n pxToEm(shadow.blur ?? 2) + ' ' +\n correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19);\n } else {\n newBorderStyle['box-shadow'] = '0 1px 2px 0 rgba(0,0,0,.18), 0 0 0 1px rgba(0,0,0,.07)';\n }\n }\n if ($jsonBorder.stroke) {\n newHasBorder = true;\n strokeWidth = correctNonNegativeNumber($jsonBorder.stroke.width, strokeWidth);\n strokeColor = correctColor($jsonBorder.stroke.color, 1, strokeColor);\n newBorderElemStyle.border = `${pxToEm(strokeWidth)} solid ${strokeColor}`;\n }\n if ($jsonBorder.corners_radius) {\n cornersRadius = correctBorderRadiusObject($jsonBorder.corners_radius, cornersRadius);\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n } else if ($jsonBorder.corner_radius) {\n cornerRadius = correctNonNegativeNumber($jsonBorder.corner_radius, cornerRadius);\n cornersRadius = {\n 'top-left': cornerRadius,\n 'top-right': cornerRadius,\n 'bottom-right': cornerRadius,\n 'bottom-left': cornerRadius\n };\n newBorderElemStyle['border-radius'] = newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n }\n\n // Clip browser rendering artifacts by border-radius + border-width/2\n if (newHasBorder && strokeWidth && ($jsonBorder.corners_radius || $jsonBorder.corner_radius)) {\n let radius: CornersRadius = { ...cornersRadius };\n\n ([\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ] as const).forEach(corner => {\n radius[corner] = (radius[corner] || 0) + strokeWidth / 2;\n });\n\n newBackgroundRadius = borderRadius(radius);\n }\n }\n borderStyle = assignIfDifferent(newBorderStyle, borderStyle);\n borderElemStyle = assignIfDifferent(newBorderElemStyle, borderElemStyle);\n hasBorder = newHasBorder;\n backgroundRadius = newBackgroundRadius;\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let selfPadding: EdgeInsets | null = null;\n $: {\n selfPadding = correctEdgeInsertsObject(($jsonPaddings && !customPaddings) ? $jsonPaddings : undefined, selfPadding);\n }\n\n $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings));\n\n $: jsonMargins = rootCtx.getDerivedFromVars(json.margins);\n let margin = '';\n $: {\n margin = correctEdgeInserts($jsonMargins, margin);\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonAlignmentHorizontal = rootCtx.getDerivedFromVars(json.alignment_horizontal);\n let widthMods: Mods = {};\n let width: string | undefined;\n let widthMin: string | undefined;\n let widthMax: string | undefined;\n let widthNum = 0;\n let widthFlexGrow = 0;\n let widthFlexShrink = 0;\n let widthFill = false;\n let hasWidthError = false;\n $: {\n let widthType: 'parent' | 'content' | undefined = undefined;\n let newWidth: string | undefined = undefined;\n let newWidthMin: string | undefined = undefined;\n let newWidthMax: string | undefined = undefined;\n let newWidthMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newWidthFill = false;\n let newWidthError = false;\n\n const type = $jsonWidth?.type;\n\n if (type === 'fixed') {\n widthNum = correctNonNegativeNumber($jsonWidth?.value, widthNum);\n newWidth = pxToEm(widthNum);\n } else if (\n type === 'wrap_content' ||\n !layoutParams.overlapParent && (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n widthType = 'content';\n if (\n type === 'wrap_content' && $jsonWidth?.constrained ||\n (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n ) {\n newWidthMods['width-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const width = $jsonWidth as WrapContentSize;\n if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n newWidthMin = pxToEm(width.min_size.value);\n }\n if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n newWidthMax = pxToEm(width.max_size.value);\n }\n }\n\n if (type === 'match_parent' || !type) {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n } else {\n widthType = 'parent';\n if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n newWidthError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'vertical') {\n newWidth = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.left || 0) + ($jsonMargins?.right || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n newFlexGrow = $jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newWidthFill = true;\n }\n }\n }\n\n if (widthType === 'parent') {\n newWidthMods['halign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentHorizontal;\n if (align === 'left' || align === 'center' || align === 'right') {\n newWidthMods['halign-self'] = HORIZONTAL_ALIGN_TO_GENERAL[align];\n } else {\n newWidthMods['halign-self'] = layoutParams.parentHAlign || 'start';\n }\n }\n\n if (widthType) {\n newWidthMods.width = widthType;\n }\n\n width = newWidth;\n widthMin = newWidthMin;\n widthMax = newWidthMax;\n widthFlexGrow = newFlexGrow;\n widthFlexShrink = newFlexShrink;\n widthMods = assignIfDifferent(newWidthMods, widthMods);\n widthFill = newWidthFill;\n hasWidthError = newWidthError;\n }\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: jsonAlignmentVertical = rootCtx.getDerivedFromVars(json.alignment_vertical);\n let heightMods: Mods = {};\n let height: string | undefined;\n let heightMin: string | undefined;\n let heightMax: string | undefined;\n let heightNum = 0;\n let heightFlexGrow = 0;\n let heightFlexShrink = 0;\n let heightFill = false;\n let hasHeightError = false;\n $: {\n let heightType: 'parent' | 'content' | undefined = undefined;\n let newHeight: string | undefined = undefined;\n let newHeightMin: string | undefined = undefined;\n let newHeightMax: string | undefined = undefined;\n let newHeightMods: Mods = {};\n let newFlexGrow = 0;\n let newFlexShrink = 0;\n let newHeightFill = false;\n let newHeightError = false;\n\n const type = $jsonHeight?.type;\n\n if (type === 'fixed') {\n heightNum = correctNonNegativeNumber($jsonHeight?.value, heightNum);\n newHeight = pxToEm(heightNum);\n } else if (type === 'match_parent' && (layoutParams.overlapParent || !layoutParams.parentVerticalWrapContent)) {\n heightType = 'parent';\n if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n newHeightError = true;\n rootCtx.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n level: 'error'\n }));\n }\n if (layoutParams.parentLayoutOrientation === 'horizontal') {\n newHeight = `calc(100% - ${pxToEmWithUnits(($jsonMargins?.top || 0) + ($jsonMargins?.bottom || 0))})`;\n } else if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexGrow = $jsonHeight?.weight || 1;\n if (layoutParams.parentContainerWrap) {\n newHeightFill = true;\n }\n }\n } else {\n heightType = 'content';\n if (\n type === 'wrap_content' && $jsonHeight?.constrained ||\n type === 'match_parent' && layoutParams.parentVerticalWrapContent\n ) {\n newHeightMods['height-constrained'] = true;\n if (layoutParams.parentContainerOrientation === 'vertical') {\n newFlexShrink = 1;\n }\n }\n\n if (type === 'wrap_content') {\n const height = $jsonHeight as WrapContentSize;\n if (height?.min_size && isNonNegativeNumber(height.min_size.value)) {\n newHeightMin = pxToEm(height.min_size.value);\n }\n if (height?.max_size && isNonNegativeNumber(height.max_size.value)) {\n newHeightMax = pxToEm(height.max_size.value);\n }\n }\n\n if (type === 'match_parent') {\n rootCtx.logError(wrapError(new Error('Cannot place child with match_parent size inside wrap_content'), {\n level: 'warn'\n }));\n }\n }\n\n if (heightType === 'parent') {\n newHeightMods['valign-self'] = 'stretch';\n } else {\n const align = $jsonAlignmentVertical;\n if (\n align === 'top' ||\n align === 'center' ||\n align === 'bottom' ||\n align === 'baseline' && layoutParams.parentContainerOrientation === 'horizontal'\n ) {\n newHeightMods['valign-self'] = VERTICAL_ALIGN_TO_GENERAL[align];\n } else {\n newHeightMods['valign-self'] = layoutParams.parentVAlign || 'start';\n }\n }\n\n if (heightType) {\n newHeightMods.height = heightType;\n }\n\n height = newHeight;\n heightMin = newHeightMin;\n heightMax = newHeightMax;\n heightFlexGrow = newFlexGrow;\n heightFlexShrink = newFlexShrink;\n heightMods = assignIfDifferent(newHeightMods, heightMods);\n heightFill = newHeightFill;\n hasHeightError = newHeightError;\n }\n\n $: parentOverlapMod = layoutParams.overlapParent ? true : undefined;\n\n $: parentOverlapAbsoluteMod = layoutParams.overlapParent &&\n (!$jsonWidth || $jsonWidth.type === 'match_parent') &&\n $jsonHeight?.type === 'match_parent';\n\n $: gridArea = layoutParams.gridArea ?\n `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n undefined;\n\n $: jsonAlpha = rootCtx.getDerivedFromVars(json.alpha);\n let alpha = 1;\n let opacity: number | undefined;\n $: {\n alpha = correctAlpha($jsonAlpha, alpha);\n opacity = alpha === 1 ? undefined : alpha;\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n $: {\n attrs = undefined;\n if ($jsonAccessibility && !customDescription && $jsonAccessibility.description) {\n attrs = {};\n attrs['aria-label'] = $jsonAccessibility.description;\n }\n }\n\n $: jsonBackground = rootCtx.getDerivedFromVars(json.background);\n let backgroundStyle: Style;\n let hasSeparateBg: boolean;\n $: {\n backgroundStyle = {};\n hasSeparateBg = false;\n if ($jsonBackground) {\n hasSeparateBg =\n $jsonBackground.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n Boolean(backgroundRadius);\n\n if (!hasSeparateBg) {\n const res = getBackground($jsonBackground);\n backgroundStyle['background-color'] = res.color;\n backgroundStyle['background-image'] = res.image;\n backgroundStyle['background-size'] = res.size;\n backgroundStyle['background-position'] = res.position;\n backgroundStyle['background-repeat'] = 'no-repeat';\n }\n }\n }\n\n const jsonTransitionTriggers = layoutParams.fakeElement ?\n [] :\n (json.transition_triggers || ['state_change', 'visibility_change']);\n const hasStateChangeTrigger = jsonTransitionTriggers.indexOf('state_change') !== -1 && json.id;\n const hasVisibilityChangeTrigger = jsonTransitionTriggers.indexOf('visibility_change') !== -1 && json.id;\n\n let stateChangingInProgress: boolean | undefined;\n let visibilityChangingInProgress: boolean | undefined;\n let transitionChangeInProgress: boolean | undefined;\n $: {\n stateChangingInProgress = undefined;\n if (hasStateChangeTrigger && json.transition_in && rootCtx.isRunning('stateChange')) {\n stateChangingInProgress = true;\n }\n }\n $: {\n transitionChangeInProgress = undefined;\n if (\n hasStateChangeTrigger && json.transition_change &&\n rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(json.id)\n ) {\n transitionChangeInProgress = true;\n }\n }\n\n $: jsonAction = rootCtx.getDerivedFromVars(json.action);\n $: jsonActions = rootCtx.getDerivedFromVars(json.actions);\n $: jsonDoubleTapActions = rootCtx.getDerivedFromVars(json.doubletap_actions);\n $: jsonLongTapActions = rootCtx.getDerivedFromVars(json.longtap_actions);\n let actions: MaybeMissing<Action>[] = [];\n let doubleTapActions: MaybeMissing<Action>[] = [];\n let longTapActions: MaybeMissing<Action>[] = [];\n $: {\n let newActions = $jsonActions || $jsonAction && [$jsonAction] || [];\n let newDoubleTapActions = $jsonDoubleTapActions || [];\n let newLongTapActions = $jsonLongTapActions || [];\n\n if (layoutParams.fakeElement) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n } else {\n if (!Array.isArray(newActions)) {\n newActions = [];\n rootCtx.logError(wrapError(new Error('Actions should be array')));\n }\n if (!Array.isArray(newDoubleTapActions)) {\n newDoubleTapActions = [];\n rootCtx.logError(wrapError(new Error('DoubleTapActions should be array')));\n }\n if (!Array.isArray(newLongTapActions)) {\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error('LongTapActions should be array')));\n }\n }\n\n if ((newActions.length || newDoubleTapActions.length || newLongTapActions.length) && customActions) {\n newActions = [];\n newDoubleTapActions = [];\n newLongTapActions = [];\n rootCtx.logError(wrapError(new Error(`Cannot use action on component \"${customActions}\"`)));\n }\n\n // todo check parent actions with customActions\n actions = newActions;\n doubleTapActions = newDoubleTapActions;\n longTapActions = newLongTapActions;\n }\n\n $: jsonActionAnimation = rootCtx.getDerivedFromVars(json.action_animation);\n let actionAnimationList: AnyAnimation[] = [];\n let actionAnimationTransition = '';\n let animationOpacityStart: number | undefined = undefined;\n let animationOpacityEnd: number | undefined = undefined;\n let animationScaleStart: number | undefined = undefined;\n let animationScaleEnd: number | undefined = undefined;\n $: {\n if ($jsonActionAnimation) {\n actionAnimationList = flattenAnimation($jsonActionAnimation as ActionAnimation);\n actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n }\n }\n\n function hasNativeAnimation(list: AnyAnimation[]) {\n return list.some(it => it.name === 'native');\n }\n\n function parseActionAnimation(animation: MaybeMissing<AnyAnimation>): string {\n const startValue = correctNumber(animation.start_value, 1);\n const endValue = correctNumber(animation.end_value, 1);\n const delay = correctNonNegativeNumber(animation.start_delay, 0);\n const duration = correctNonNegativeNumber(animation.duration, 300);\n const interpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n\n switch (animation.name) {\n case 'fade':\n animationOpacityStart = startValue;\n animationOpacityEnd = endValue;\n return `opacity ${duration}ms ${interpolator} ${delay}ms`;\n case 'scale':\n animationScaleStart = startValue;\n animationScaleEnd = endValue;\n return `transform ${duration}ms ${interpolator} ${delay}ms`;\n case 'native':\n case 'no_animation':\n return '';\n default:\n rootCtx.logError(wrapError(new Error('Unknown action_animation name'), {\n additional: {\n animation: animation.name\n }\n }));\n return '';\n }\n }\n\n let isVisibilityInited = false;\n let visibility: Visibility = 'visible';\n $: jsonVisibility = rootCtx.getDerivedFromVars(json.visibility);\n $: {\n const prevVisibility = visibility;\n const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n if (prevVisibility !== nextVisibility) {\n if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n onVisibilityChange(nextVisibility);\n } else {\n visibility = nextVisibility;\n }\n }\n\n if (!isVisibilityInited) {\n isVisibilityInited = true;\n }\n }\n\n async function onVisibilityChange(nextVisibility: Visibility) {\n visibility = nextVisibility;\n\n const direction = nextVisibility === 'visible' ? 'in' : 'out';\n const transition = direction === 'in' ? json.transition_in : json.transition_out;\n\n if (\n hasVisibilityChangeTrigger &&\n transition\n ) {\n await tick();\n\n if (direction === 'in') {\n visibilityChangingInProgress = true;\n }\n stateCtx.runVisibilityTransition(\n {\n ...json,\n visibility: 'visible'\n } as DivBaseData,\n templateContext,\n transition,\n currentNode,\n direction\n ).then(() => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n }).catch(e => {\n if (direction === 'in') {\n visibilityChangingInProgress = false;\n }\n throw e;\n });\n }\n }\n\n $: mods = {\n ...widthMods,\n ...heightMods,\n 'parent-overlap': parentOverlapMod,\n 'parent-overlap-absolute': parentOverlapAbsoluteMod,\n 'scroll-snap': layoutParams.scrollSnap,\n 'hide-on-transition-in': stateChangingInProgress ||\n visibilityChangingInProgress ||\n transitionChangeInProgress,\n visibility,\n 'has-action-animation': Boolean(actionAnimationTransition),\n 'parent-flex': layoutParams.parentContainerOrientation || undefined,\n 'parent-grid': Boolean(layoutParams.gridArea) || undefined\n };\n\n $: jsonTransform = rootCtx.getDerivedFromVars(json.transform);\n let pivotXNum = 0;\n let pivotYNum = 0;\n let transformOrigin: string | undefined;\n let transform: string | undefined;\n $: {\n if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n const pivotX = $jsonTransform.pivot_x || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotXNum = correctNumber(pivotX.value, pivotXNum);\n const pivotXCSSValue = pivotX.type === 'pivot-fixed' ? pxToEm(pivotXNum) : `${pivotXNum}%`;\n const pivotY = $jsonTransform.pivot_y || {\n type: 'pivot-percentage',\n value: 50\n };\n pivotYNum = correctNumber(pivotY.value, pivotYNum);\n const pivotYCSSValue = pivotY.type === 'pivot-fixed' ? pxToEm(pivotYNum) : `${pivotYNum}%`;\n transformOrigin = `${pivotXCSSValue} ${pivotYCSSValue}`;\n transform = `rotate(${$jsonTransform.rotation}deg)`;\n }\n }\n\n // eslint-disable-next-line no-nested-ternary\n $: flexBasis = (widthFill || heightFill) ?\n '100%' :\n ((widthFlexGrow || heightFlexGrow) ? 0 : undefined);\n\n $: stl = {\n ...style,\n ...backgroundStyle,\n ...borderStyle,\n width,\n 'min-width': widthMin,\n 'max-width': widthMax,\n height,\n 'min-height': heightMin,\n // input max-height\n 'max-height': heightMax || style?.['max-height'],\n 'grid-area': gridArea,\n padding,\n margin,\n opacity,\n transition: actionAnimationTransition,\n 'transform-origin': transformOrigin,\n transform,\n 'flex-grow': widthFlexGrow || heightFlexGrow || undefined,\n 'flex-shrink': (widthFlexShrink || heightFlexShrink) ? 1 : undefined,\n 'flex-basis': flexBasis,\n '--divkit-animation-opacity-start': animationOpacityStart,\n '--divkit-animation-opacity-end': animationOpacityEnd,\n '--divkit-animation-scale-start': animationScaleStart,\n '--divkit-animation-scale-end': animationScaleEnd\n };\n\n function useAction(node: HTMLElement) {\n currentNode = node;\n if (hasStateChangeTrigger && json.transition_in) {\n stateCtx.registerChildWithTransitionIn(\n json as DivBaseData,\n templateContext,\n json.transition_in,\n node\n ).then(() => {\n stateChangingInProgress = false;\n }).catch(e => {\n stateChangingInProgress = false;\n throw e;\n });\n }\n if (hasStateChangeTrigger && json.transition_out) {\n stateCtx.registerChildWithTransitionOut(\n json as DivBaseData,\n templateContext,\n json.transition_out,\n node\n );\n }\n if (hasStateChangeTrigger && json.transition_change) {\n stateCtx.registerChildWithTransitionChange(\n json as DivBaseData,\n templateContext,\n json.transition_change,\n node\n ).then(() => {\n transitionChangeInProgress = false;\n }).catch(e => {\n transitionChangeInProgress = false;\n throw e;\n });\n }\n\n const visibilityActions = layoutParams.fakeElement ?\n [] :\n (\n json.visibility_actions ||\n json.visibility_action && [json.visibility_action]\n );\n\n if (Array.isArray(visibilityActions) && visibilityActions.length) {\n visibilityAction(node, {\n visibilityActions,\n rootCtx\n });\n }\n\n const id = json.id;\n if (id) {\n stateCtx.registerChild(id);\n }\n\n let dev: DevtoolResult | null = null;\n\n if (devtool && !layoutParams.fakeElement) {\n dev = devtool(node, {\n json,\n origJson,\n rootCtx,\n templateContext\n });\n }\n\n return {\n destroy() {\n if (id) {\n stateCtx.unregisterChild(id);\n }\n if (dev) {\n dev.destroy();\n }\n }\n };\n }\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n <Actionable\n use={useAction}\n cls=\"{cls} {genClassName('outer', css, mods)}\"\n style={makeStyle(stl)}\n {actions}\n {doubleTapActions}\n {longTapActions}\n {attrs}\n isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n >\n {#if hasSeparateBg}<OuterBackground background={$jsonBackground} radius={backgroundRadius} />{/if}<slot />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n </Actionable>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadiusObject(\n cornersRadius: CornersRadius,\n defaultVal: CornersRadius\n): CornersRadius {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return cornersRadius;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\n\nexport function sumEdgeInsets(a: EdgeInsets | null, b: EdgeInsets | null): EdgeInsets {\n if (!a && !b) {\n return {};\n }\n\n if (!b) {\n return a as EdgeInsets;\n }\n\n if (!a) {\n return b;\n }\n\n const res: EdgeInsets = {};\n\n ([\n 'top',\n 'right',\n 'bottom',\n 'left'\n ] as const).forEach(side => {\n const aVal = a[side];\n if (aVal) {\n res[side] = aVal;\n }\n const bVal = b[side];\n if (bVal) {\n res[side] = (res[side] || 0) + bVal;\n }\n });\n\n return res;\n}\n","import { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctAlpha(val: number | undefined, defaultVal: number): number {\n if (!isNonNegativeNumber(val) || val === undefined || val > 1) {\n return defaultVal;\n }\n return Number(val);\n}\n","import { Visibility } from '../types/base';\n\nexport function correctVisibility(visibility: string | undefined, defaultVal: Visibility): Visibility {\n if (\n visibility === 'visible' ||\n visibility === 'invisible' ||\n visibility === 'gone'\n ) {\n return visibility;\n }\n\n return defaultVal;\n}\n","import type { VisibilityAction } from '../types/visibilityAction';\nimport type { MaybeMissing } from '../expressions/json';\nimport { RootCtxValue } from '../context/root';\nimport { getUrlSchema, isBuiltinSchema } from '../utils/url';\n\nexport function visibilityAction(node: HTMLElement, {\n visibilityActions,\n rootCtx\n}: {\n visibilityActions: VisibilityAction[];\n rootCtx: RootCtxValue;\n}) {\n const visibilityStatus: {\n index: number;\n action: VisibilityAction;\n visible: boolean;\n count: number;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n }[] = visibilityActions.map((it, index) => ({\n index,\n action: it,\n visible: false,\n count: 0,\n finished: false\n }));\n\n const calcedList = visibilityActions.map(it => rootCtx.getJsonWithVars({\n visibility_percentage: it.visibility_percentage,\n visibility_duration: it.visibility_duration,\n log_limit: it.log_limit\n }));\n\n const thresholds = [...new Set([...visibilityActions.map((it, index) =>\n (calcedList[index].visibility_percentage || 50) / 100\n )])];\n\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n visibilityStatus.forEach(status => {\n const nowVisible = entry.intersectionRatio >= (status.action.visibility_percentage || 50) / 100;\n\n if (!status.visible && nowVisible) {\n if (!status.finished) {\n status.timer = setTimeout(() => {\n ++status.count;\n\n const calcedParams = calcedList[status.index];\n const limit = calcedParams.log_limit === 0 ? Infinity : (calcedParams.log_limit || 1);\n if (++status.count >= limit) {\n status.finished = true;\n }\n\n const calcedAction = rootCtx.getJsonWithVars(status.action);\n const actionUrl = calcedAction.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema && !isBuiltinSchema(schema, rootCtx.getBuiltinProtocols())) {\n if (schema === 'div-action') {\n rootCtx.execAction(calcedAction);\n } else if (calcedAction.log_id) {\n rootCtx.execCustomAction(calcedAction as VisibilityAction & { url: string });\n }\n }\n }\n\n rootCtx.logStat('visible', calcedAction);\n }, calcedList[status.index].visibility_duration || 800);\n }\n } else if (!nowVisible) {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n }\n status.visible = nowVisible;\n });\n });\n }, {\n threshold: thresholds\n });\n\n observer.observe(node);\n\n return {\n destroy() {\n observer.disconnect();\n\n visibilityStatus.forEach(status => {\n if (status.timer) {\n clearTimeout(status.timer);\n }\n });\n }\n };\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"text-range\":\"divkit-faf07\",\"text-range_singleline\":\"divkit-ccb64\",\"text-range__top-offset\":\"divkit-d9237\",\"text-range_decoration_both\":\"divkit-d7e07\",\"text-range_decoration_underline\":\"divkit-f3dde\",\"text-range_decoration_strike\":\"divkit-d27b7\",\"text-range_decoration_none\":\"divkit-c6b0f\"};","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n const num = Number(val);\n if (isNaN(num) || num <= 0) {\n return defaultVal;\n }\n return num;\n}\n","import type { FontWeight } from '../types/text';\n\nexport function fontWeightToCss(fontWeight?: FontWeight | undefined): number | undefined {\n if (\n fontWeight === 'light' ||\n fontWeight === 'medium' ||\n fontWeight === 'bold' ||\n fontWeight === 'regular'\n ) {\n if (fontWeight === 'medium') {\n return 500;\n } else if (fontWeight === 'bold') {\n return 700;\n } else if (fontWeight === 'light') {\n return 300;\n }\n\n return 400;\n }\n}\n","import type { FontWeight } from '../types/text';\nimport { fontWeightToCss } from './fontWeightToCss';\n\nexport function correctFontWeight(\n fontWeight: FontWeight | undefined,\n defaultVal: number | undefined\n): number | undefined {\n return fontWeightToCss(fontWeight) || defaultVal;\n}\n","<script lang=\"ts\">\n import css from './TextRange.module.css';\n\n import type { TextRange } from '../../types/text';\n import type { Action } from '../../../typings/common';\n import type { MaybeMissing } from '../../expressions/json';\n import Actionable from '../utilities/Actionable.svelte';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { correctColor } from '../../utils/correctColor';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { getBackground } from '../../utils/background';\n\n export let text: string;\n export let rootFontSize: number;\n export let textStyles: Partial<TextRange> = {};\n export let singleline = false;\n export let actions: MaybeMissing<Action[]> | undefined = undefined;\n\n let decoration = 'none';\n $: {\n let newDecoration = 'none';\n\n if (textStyles.underline || textStyles.strike) {\n if (textStyles.underline === 'single' && textStyles.strike === 'single') {\n newDecoration = 'both';\n } else if (textStyles.underline === 'single') {\n newDecoration = 'underline';\n } else if (textStyles.strike === 'single') {\n newDecoration = 'strike';\n }\n }\n\n decoration = newDecoration;\n }\n\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n }\n\n let lineHeight = 1.25;\n $: {\n if (isPositiveNumber(textStyles.line_height)) {\n lineHeight = Number(textStyles.line_height) / fontSize;\n }\n }\n\n let letterSpacing = '';\n $: {\n if (isNonNegativeNumber(textStyles.letter_spacing)) {\n letterSpacing = pxToEm(textStyles.letter_spacing);\n }\n }\n\n let fontWeight: number | undefined = undefined;\n $: {\n fontWeight = correctFontWeight(textStyles.font_weight, fontWeight);\n }\n\n let color = '';\n $: {\n color = correctColor(textStyles.text_color, 1, color);\n }\n\n $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n $: bg = textStyles.background ? getBackground([textStyles.background]) : null;\n\n let border: {\n color: string;\n width: number;\n } | null = null;\n $: if (textStyles.border?.stroke && correctColor(textStyles.border.stroke.color) !== 'transparent' && isPositiveNumber(textStyles.border.stroke.width)) {\n border = {\n color: textStyles.border.stroke.color,\n width: textStyles.border.stroke.width\n };\n } else {\n border = null;\n }\n\n $: borderRadius = correctPositiveNumber(textStyles.border?.corner_radius, 0);\n\n $: mods = {\n singleline,\n decoration\n };\n\n $: style = {\n 'font-size': pxToEm((fontSize * 10) / rootFontSize),\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n 'font-weight': fontWeight,\n color,\n background: bg?.color || undefined,\n /**\n * box-shadow instead of border because:\n * 1) Doesn't take space as border does\n * 2) There should not be a border-radius on line breaks, but there should be a border\n */\n 'box-shadow': border ? `inset 0 0 0 ${pxToEm(border.width)} ${border.color}` : undefined,\n 'border-radius': borderRadius ? pxToEm(borderRadius) : undefined\n };\n</script>\n\n{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n cls={genClassName('text-range', css, mods)}\n {actions}\n style={makeStyle(style)}\n>\n {text}\n</Actionable>\n","import type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n orientation: string | undefined,\n defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n if (\n orientation === 'left' ||\n orientation === 'center' ||\n orientation === 'right'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { AlignmentVertical } from '../types/alignment';\n\nexport function correctAlignmentVertical(\n orientation: string | undefined,\n defaultVal: AlignmentVertical\n): AlignmentVertical {\n if (\n orientation === 'top' ||\n orientation === 'center' ||\n orientation === 'bottom' ||\n orientation === 'baseline'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","import type { TintMode } from '../types/image';\n\nexport function correctTintMode(tintMode: TintMode | undefined, defaultVal: TintMode): TintMode {\n if (\n tintMode === 'source_in' ||\n tintMode === 'source_atop' ||\n tintMode === 'darken' ||\n tintMode === 'lighten' ||\n tintMode === 'multiply' ||\n tintMode === 'screen'\n ) {\n return tintMode;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Text.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivTextData, TextImage, TextRange, TextStyles } from '../../types/text';\n import type { Style } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Action, DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { TintMode } from '../../types/image';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import TextRangeView from './TextRange.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { getBackground } from '../../utils/background';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctColor } from '../../utils/correctColor';\n import { correctBooleanInt } from '../../utils/correctBooleanInt';\n import { propToString } from '../../utils/propToString';\n import { correctTintMode } from '../../utils/correctTintMode';\n\n export let json: Partial<DivTextData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasError = false;\n $: jsonText = rootCtx.getDerivedFromVars(json.text);\n let text = '';\n $: {\n text = propToString($jsonText, text);\n if (!text) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text\" prop for div \"text\"')));\n } else {\n hasError = false;\n }\n }\n $: jsonRanges = rootCtx.getDerivedFromVars(json.ranges);\n $: jsonImages = rootCtx.getDerivedFromVars(json.images);\n\n $: jsonRootTextStyles = rootCtx.getDerivedFromVars({\n font_size: json.font_size,\n letter_spacing: json.letter_spacing,\n font_weight: json.font_weight,\n text_color: json.text_color,\n underline: json.underline,\n strike: json.strike,\n line_height: json.line_height\n });\n\n $: jsonTextSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n }\n\n $: jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight = 1.25;\n let customLineHeight = false;\n $: {\n const newLineHeight = $jsonLineHeight;\n if (isPositiveNumber(newLineHeight)) {\n lineHeight = Number(newLineHeight) / fontSize;\n customLineHeight = true;\n } else {\n customLineHeight = false;\n }\n }\n\n $: jsonMaxLines = rootCtx.getDerivedFromVars(json.max_lines);\n $: singleline = $jsonMaxLines === 1;\n let maxHeight = '';\n let lineClamp: string | number = '';\n let multiline = false;\n $: {\n let newMaxHeight = '';\n let newLineClamp: string | number = '';\n let newMultiline = false;\n\n if ($jsonMaxLines && $jsonMaxLines > 1) {\n let lines = Number($jsonMaxLines);\n\n newMaxHeight = lines * lineHeight + 'em';\n\n // multiline overflow enabled only if there is no images and ranges\n if (!$jsonRanges && !$jsonImages) {\n newLineClamp = lines;\n newMultiline = true;\n }\n }\n\n maxHeight = newMaxHeight;\n lineClamp = newLineClamp;\n multiline = newMultiline;\n }\n\n let halign: AlignmentHorizontal = 'left';\n $: jsonHAlign = rootCtx.getDerivedFromVars(json.text_alignment_horizontal);\n $: {\n halign = correctAlignmentHorizontal($jsonHAlign, halign);\n }\n\n let valign: AlignmentVertical = 'top';\n $: jsonVAlign = rootCtx.getDerivedFromVars(json.text_alignment_vertical);\n $: {\n valign = correctAlignmentVertical($jsonVAlign, valign);\n }\n\n $: isAllTextSameColor =\n !$jsonRanges ||\n (\n text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n $jsonRanges[0].start === 0 && typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n );\n\n $: jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n\n $: isOnlyOneColorDefined = Boolean($jsonTextColor) !==\n Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\n let rootTextColor = '';\n $: {\n let newRootTextColor = '';\n\n if ($jsonMaxLines && isAllTextSameColor && isOnlyOneColorDefined) {\n // Recolor the ellipsis only if the entire text have the same color\n newRootTextColor = correctColor(\n ($jsonTextColor || ($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color)) as string,\n 1,\n rootTextColor\n );\n }\n\n rootTextColor = newRootTextColor;\n }\n\n $: jsonTruncate = rootCtx.getDerivedFromVars(json.truncate);\n $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n $: jsonTextGradient = rootCtx.getDerivedFromVars(json.text_gradient);\n let gradient = '';\n $: {\n let newGradient = '';\n\n if ($jsonTextGradient) {\n const bg = getBackground([$jsonTextGradient]);\n if (bg.image) {\n newGradient = bg.image;\n }\n }\n\n gradient = newGradient;\n }\n\n $: jsonSelectable = rootCtx.getDerivedFromVars(json.selectable);\n let selectable = false;\n $: {\n selectable = correctBooleanInt($jsonSelectable, selectable);\n }\n\n let renderList: ({\n text: string;\n textStyles: TextStyles;\n actions?: MaybeMissing<Action[]>;\n } | {\n image: {\n url: string;\n width: string;\n height: string;\n wrapperStyle: Style;\n svgFilterId: string;\n };\n })[] = [];\n let usedTintColors: [string, TintMode][] = [];\n\n function updateRenderList(\n text: string,\n textRanges: MaybeMissing<TextRange[]> | undefined,\n textImages: MaybeMissing<TextImage[]> | undefined\n ) {\n let newRenderList: typeof renderList = [];\n\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n usedTintColors = [];\n\n if (!(Array.isArray(textRanges) && textRanges.length || Array.isArray(textImages) && textImages.length && text)) {\n renderList = [];\n return;\n }\n\n const content = text;\n let ranges = textRanges || [\n {\n start: 0,\n end: content.length\n }\n ];\n let images = textImages || [];\n let prevIndex = 0;\n let activeRanges: TextStyles[] = [];\n let list: ({\n index: number;\n range: MaybeMissing<TextRange> & {\n start: number;\n end: number;\n };\n type: 'rangeStart' | 'rangeEnd';\n isStart?: boolean;\n } | {\n index: number;\n type: 'image';\n arrayIndex: number;\n image: MaybeMissing<TextImage> & {\n start: number;\n url: string;\n };\n })[] = [];\n\n ranges.forEach(range => {\n if (range.start !== undefined && range.end !== undefined) {\n list.push({\n index: range.start,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeStart',\n isStart: true\n });\n list.push({\n index: range.end,\n range: range as typeof range & {\n start: number;\n end: number;\n },\n type: 'rangeEnd'\n });\n }\n });\n images.forEach((image, index) => {\n if (image.start !== undefined && image.url && image.start <= content.length) {\n list.push({\n index: image.start,\n image: image as typeof image & {\n start: number;\n url: string;\n },\n type: 'image',\n arrayIndex: index\n });\n }\n });\n list.sort((a, b) => {\n if (a.index === b.index) {\n if (a.type !== b.type) {\n if (a.type === 'image') {\n return -1;\n } else if (b.type === 'image') {\n return 1;\n }\n\n return a.type < b.type ? -1 : 1;\n } else if (a.type === 'image' && b.type === 'image') {\n return b.arrayIndex - a.arrayIndex;\n } else if (a.type === 'rangeStart' && b.type === 'rangeStart') {\n return a.range.end - b.range.end;\n } else if (a.type === 'rangeStart') {\n return 1;\n } else if (b.type === 'rangeStart') {\n return -1;\n }\n if (a.type !== 'image' && b.type !== 'image') {\n return a.range.start - b.range.start;\n }\n return 0;\n }\n\n return a.index - b.index;\n });\n list.forEach(item => {\n let range = item.type === 'image' ? null : item.range;\n let index = item.index;\n\n if (index > prevIndex) {\n let textStyles = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n newRenderList.push({\n text: content.substring(prevIndex, index),\n textStyles,\n actions: item.type === 'rangeEnd' && item.range?.actions || undefined\n });\n }\n\n if (item.type === 'rangeStart' && range) {\n activeRanges.push(range);\n } else if (item.type === 'rangeEnd') {\n activeRanges = activeRanges.filter(range => range !== item.range);\n } else if (item.type === 'image') {\n let textStyles2 = Object.assign({ ...$jsonRootTextStyles }, ...activeRanges as any[]) as TextStyles;\n let imageWidth = pxToEm(\n (((item.image.width && item.image.width.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n let imageHeight = pxToEm(\n (((item.image.height && item.image.height.value) || 20) * 10) / (textStyles2.font_size || 12)\n );\n const wrapperStyle: Style = {\n 'font-size': pxToEm(((Number(textStyles2.font_size) || 12) * 10) / fontSize)\n };\n\n let svgFilterId = '';\n const tintColor = item.image.tint_color;\n const tintMode = correctTintMode(item.image.tint_mode, 'source_in');\n if (tintColor) {\n const color = correctColor(item.image.tint_color);\n svgFilterId = rootCtx.addSvgFilter(color, tintMode);\n usedTintColors.push([color, tintMode]);\n }\n\n newRenderList.push({\n image: {\n url: item.image.url,\n width: imageWidth,\n height: imageHeight,\n wrapperStyle,\n svgFilterId\n }\n });\n }\n\n prevIndex = index;\n });\n\n if (prevIndex < content.length) {\n newRenderList.push({\n text: content.substring(prevIndex),\n textStyles: { ...$jsonRootTextStyles } as TextStyles\n });\n }\n\n renderList = newRenderList;\n }\n\n $: updateRenderList(text, $jsonRanges, $jsonImages);\n\n $: mods = {\n singleline,\n multiline,\n halign,\n valign,\n truncate\n };\n\n $: innerMods = {\n gradient: Boolean(gradient)\n };\n\n $: style = {\n 'font-size': pxToEm(fontSize),\n 'line-height': lineHeight,\n 'max-height': maxHeight,\n '-webkit-line-clamp': lineClamp,\n color: rootTextColor,\n 'background-image': gradient\n };\n\n function onImgError(event: Event): void {\n if (event.target && 'classList' in event.target) {\n (event.target as HTMLElement).classList.add(css.text__image_hidden);\n }\n }\n\n onDestroy(() => {\n usedTintColors.forEach(([color, mode]) => {\n rootCtx.removeSvgFilter(color, mode);\n });\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls=\"{genClassName('text', css, mods)} {selectable ? '' : rootCss.root__unselectable}\"\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={genClassName('text__inner', css, innerMods)} style={makeStyle(style)}>\n {#if renderList.length}\n {#each renderList as item, index}\n {#if 'text' in item}\n {#if item.text}\n <TextRangeView\n text={item.text}\n rootFontSize={fontSize}\n textStyles={item.textStyles}\n {singleline}\n actions={item.actions}\n />\n {/if}\n {:else if item.image}\n <span style={makeStyle(item.image.wrapperStyle)}><img\n class={css.text__image}\n src={item.image.url}\n loading=\"lazy\"\n decoding=\"async\"\n aria-hidden=\"true\"\n alt=\"\"\n style={makeStyle({\n width: item.image.width,\n height: item.image.height,\n // Normalizes line-height for the containing text line\n 'margin-top': customLineHeight ? `-${item.image.height}` : undefined,\n 'margin-bottom': customLineHeight ? `-${item.image.height}` : undefined,\n filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n })}\n on:error={onImgError}\n ></span>\n {/if}\n {/each}\n {:else}\n <TextRangeView\n {text}\n rootFontSize={fontSize}\n textStyles={$jsonRootTextStyles}\n {singleline}\n />\n {/if}\n </span>\n </Outer>\n{/if}\n","import { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined, defaultVal: string): string {\n const valToString = String(val ?? '');\n\n return valToString || defaultVal;\n}\n","export function correctBooleanInt(val: number | boolean | undefined, defaultVal: boolean): boolean {\n if (val === 1 || val === 0 || val === false || val === true) {\n return Boolean(val);\n }\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"divkit-d37d6\",\"container_wrap\":\"divkit-c8551\",\"container_orientation_vertical\":\"divkit-ddc33\",\"container_valign_top\":\"divkit-a331a\",\"container_valign_center\":\"divkit-aae61\",\"container_valign_bottom\":\"divkit-c2226\",\"container_orientation_horizontal\":\"divkit-fe458\",\"container_halign_left\":\"divkit-a3091\",\"container_halign_center\":\"divkit-bac9d\",\"container_halign_right\":\"divkit-f4230\",\"container_orientation_overlap\":\"divkit-a644d\"};","import type { Drawable } from '../types/drawable';\nimport type { Style } from '../types/general';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Circle, RoundedRectangle } from '../types/shape';\nimport type { Stroke } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\nexport interface DrawableStyle extends Style {\n width: number;\n height: number;\n borderRadius: number;\n background: string;\n boxShadow?: string;\n}\n\ninterface DrawableSize {\n width: number;\n height: number;\n radius: number;\n}\n\nfunction calcRoundedRectangleSize(shape: MaybeMissing<RoundedRectangle>): DrawableSize {\n return {\n width: Number(shape.item_width?.value || 10),\n height: Number(shape.item_height?.value || 10),\n radius: Number(shape.corner_radius?.value ?? 5)\n };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n const size = Number(shape.radius?.value || 10) * 2;\n\n return {\n width: size,\n height: size,\n radius: size\n };\n}\n\nfunction calcDrawableStyle(\n size: DrawableSize,\n shape: MaybeMissing<RoundedRectangle | Circle>,\n old?: {\n stroke?: MaybeMissing<Stroke>;\n color?: string;\n }\n): DrawableStyle {\n const stl: Partial<DrawableStyle> = {};\n\n const stroke = shape.stroke || old?.stroke;\n const borderColor = stroke?.color ? correctColor(stroke.color) : '';\n const borderWidth = stroke?.width ? Number(stroke.width ?? 1) : '';\n\n stl.width = size.width;\n stl.height = size.height;\n stl.borderRadius = size.radius;\n\n const bgColor = shape.background_color || old?.color;\n stl.background = correctColor(bgColor);\n\n if (borderColor && borderWidth) {\n stl.boxShadow = `inset 0 0 0 ${pxToEm(borderWidth)} ${borderColor}`;\n }\n\n return stl as DrawableStyle;\n}\n\nexport function correctDrawableStyle<D = DrawableStyle>(\n drawable: MaybeMissing<Drawable> | undefined,\n availShapes: string[],\n defaultValue: D\n): D {\n if (\n !drawable || !drawable.shape ||\n !drawable.shape.type || !availShapes.includes(drawable.shape.type) ||\n drawable.type !== 'shape_drawable'\n ) {\n return defaultValue;\n }\n let size: DrawableSize;\n if (drawable.shape.type === 'rounded_rectangle') {\n size = calcRoundedRectangleSize(drawable.shape);\n } else if (drawable.shape.type === 'circle') {\n size = calcCircleSize(drawable.shape);\n } else {\n return defaultValue;\n }\n\n return calcDrawableStyle(size, drawable.shape, {\n color: drawable.color,\n stroke: drawable.stroke\n }) as unknown as D;\n}\n","import type { BooleanInt } from '../../typings/common';\nimport type { DrawableStyle } from './correctDrawableStyles';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport type { ContainerOrientation } from '../types/container';\nimport { pxToEm } from './pxToEm';\n\nexport interface SeparatorStyle {\n show_at_start?: BooleanInt;\n show_at_end?: BooleanInt;\n show_between?: BooleanInt;\n style: DrawableStyle;\n}\n\nfunction setAdditionalPadding(\n insets: EdgeInsets,\n separator: SeparatorStyle | null,\n crossAxis: boolean\n): void {\n if (separator?.show_at_start) {\n if (crossAxis) {\n insets.top = separator.style.height;\n } else {\n insets.left = separator.style.width;\n }\n }\n\n if (separator?.show_at_end) {\n if (crossAxis) {\n insets.bottom = separator.style.height;\n } else {\n insets.right = separator.style.width;\n }\n }\n}\n\nexport function calcAdditionalPaddings(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n) {\n const res: EdgeInsets = {};\n\n setAdditionalPadding(res, separator, orientation === 'vertical');\n setAdditionalPadding(res, lineSeparator, orientation === 'horizontal');\n\n return res;\n}\n\nexport function calcItemsGap(\n orientation: ContainerOrientation,\n separator: SeparatorStyle | null,\n lineSeparator: SeparatorStyle | null\n): string {\n let vals: number[];\n\n if (orientation === 'horizontal') {\n vals = [\n lineSeparator?.show_between ? lineSeparator.style.height : 0,\n separator?.show_between ? separator.style.width : 0\n ];\n } else {\n vals = [\n separator?.show_between ? separator.style.height : 0,\n lineSeparator?.show_between ? lineSeparator.style.width : 0\n ];\n }\n\n return vals.map(pxToEm).join(' ');\n}\n","let res: boolean;\n\n/**\n * Based on the Chris Smith work in Modernizr\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/flexgap.js\n * MIT License\n */\nexport function hasGapSupport(): boolean {\n if (res !== undefined) {\n return res;\n }\n\n const flex = document.createElement('div');\n flex.style.position = 'absolute';\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.gap = '1px';\n\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n\n document.body.appendChild(flex);\n res = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return res;\n}\n","<script lang=\"ts\">\n import { onDestroy, onMount } from 'svelte';\n\n import css from './ContainerSeparator.module.css';\n import outerCss from '../utilities/Outer.module.css';\n\n import type { ContainerOrientation } from '../../types/container';\n import type { SeparatorStyle } from '../../utils/container';\n import type { DrawableStyle } from '../../utils/correctDrawableStyles';\n import { simpleThrottle } from '../../utils/simpleThrottle';\n import { Box, getMarginBox } from '../../utils/getMarginBox';\n\n export let orientation: ContainerOrientation;\n export let separator: SeparatorStyle | null;\n export let lineSeparator: SeparatorStyle | null;\n\n const THROTTLE_TIMEOUT = 10;\n const throttledUpdated = simpleThrottle(updateSeparators, THROTTLE_TIMEOUT);\n\n interface SeparatorItem {\n left: number;\n top: number;\n width: number;\n height: number;\n style: DrawableStyle;\n }\n let separators: SeparatorItem[] = [];\n let node: HTMLElement;\n $: parentElement = node?.parentElement || null;\n let mounted = false;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n $: if (mounted && parentElement || mutationObserver || resizeObserver) {\n if (mutationObserver) {\n mutationObserver.disconnect();\n mutationObserver = null;\n }\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n if (mounted && parentElement) {\n if (typeof MutationObserver !== 'undefined') {\n mutationObserver = new MutationObserver(mutationObserverCallback);\n mutationObserver.observe(parentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(throttledUpdated);\n resizeObserver.observe(parentElement);\n }\n }\n }\n\n $: if (mounted && parentElement) {\n throttledUpdated();\n }\n\n function mutationObserverCallback(records: MutationRecord[]): void {\n if (records.some(record => {\n const classList = (record.target as HTMLElement)?.classList;\n\n return !classList?.contains(css['container-separator__shape']) &&\n !classList?.contains(css['container-separator']);\n })) {\n throttledUpdated();\n }\n }\n\n // eslint-disable-next-line max-params\n function appendSeparator(\n separators: SeparatorItem[],\n separatorStyle: DrawableStyle,\n box0: Box,\n box1: Box,\n containingBox: Box,\n crossAxis: boolean\n ) {\n if (crossAxis) {\n separators.push({\n top: box0.bottom,\n left: containingBox.left,\n width: containingBox.right - containingBox.left,\n height: box1.top - box0.bottom,\n style: separatorStyle\n });\n } else {\n separators.push({\n top: containingBox.top,\n left: box0.right,\n width: box1.left - box0.right,\n height: containingBox.bottom - containingBox.top,\n style: separatorStyle\n });\n }\n }\n\n function appendSeparators(\n separators: SeparatorItem[],\n separator: SeparatorStyle,\n boxes: Box[],\n crossAxis: boolean\n ): void {\n const containingBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n\n if (separator?.show_at_start) {\n appendSeparator(\n separators,\n separator.style,\n // only right and bottom is used\n {\n top: 0,\n right: boxes[0].left - separator.style.width,\n bottom: boxes[0].top - separator.style.height,\n left: 0\n },\n boxes[0],\n containingBox,\n crossAxis\n );\n }\n if (separator?.show_between) {\n for (let i = 0; i < boxes.length - 1; ++i) {\n appendSeparator(\n separators,\n separator.style,\n boxes[i],\n boxes[i + 1],\n containingBox,\n crossAxis\n );\n }\n }\n if (separator?.show_at_end) {\n const lastBox = boxes[boxes.length - 1];\n\n appendSeparator(\n separators,\n separator.style,\n lastBox,\n // only top and left is used\n {\n top: lastBox.bottom + separator.style.height,\n right: 0,\n bottom: 0,\n left: lastBox.right + separator.style.width\n },\n containingBox,\n crossAxis\n );\n }\n }\n\n function updateSeparators(): void {\n if (!parentElement) {\n return;\n }\n\n const parentBbox = parentElement.getBoundingClientRect();\n\n separators = [];\n\n let children = [...parentElement.children]\n .filter(it => it !== node && !it.classList.contains(outerCss.outer__border)) as HTMLElement[];\n let rows: HTMLElement[][] = [];\n\n while (children.length) {\n const row: HTMLElement[] = [];\n const firstChild = children.shift() as HTMLElement;\n row.push(firstChild);\n\n let bbox = firstChild.getBoundingClientRect();\n let right = bbox.right;\n let bottom = bbox.bottom;\n\n while (children.length) {\n let first = children[0];\n let bbox = first.getBoundingClientRect();\n\n if (orientation === 'vertical') {\n if (bbox.top < bottom) {\n break;\n }\n } else if (bbox.left < right) {\n break;\n }\n\n right = Math.max(right, bbox.right);\n bottom = Math.max(bottom, bbox.bottom);\n row.push(first);\n children.shift();\n }\n\n rows.push(row);\n }\n\n const rowBoxes: Box[] = [];\n rows.forEach(row => {\n const boxes = row.map(it => getMarginBox(it));\n\n if (separator) {\n appendSeparators(separators, separator as SeparatorStyle, boxes, orientation === 'vertical');\n }\n\n const rowBox = {\n top: Math.min(...boxes.map(it => it.top)),\n right: Math.max(...boxes.map(it => it.right)),\n bottom: Math.max(...boxes.map(it => it.bottom)),\n left: Math.min(...boxes.map(it => it.left))\n };\n rowBoxes.push(rowBox);\n });\n if (lineSeparator) {\n appendSeparators(separators, lineSeparator, rowBoxes, orientation === 'horizontal');\n }\n\n separators.forEach(separator => {\n separator.top -= parentBbox.top;\n separator.left -= parentBbox.left;\n });\n }\n\n onMount(() => {\n mounted = true;\n });\n\n onDestroy(() => {\n mounted = false;\n });\n</script>\n\n<svelte:window on:resize={throttledUpdated} />\n\n<div bind:this={node} class={css['container-separator']}>\n {#each separators as item}\n <div\n class={css['container-separator__item']}\n style:left=\"{item.left}px\"\n style:top=\"{item.top}px\"\n style:width=\"{item.width}px\"\n style:height=\"{item.height}px\"\n >\n <div\n class={css['container-separator__shape']}\n style:width=\"{item.style.width}px\"\n style:height=\"{item.style.height}px\"\n style:border-radius=\"{item.style.borderRadius}px\"\n style:background=\"{item.style.background}\"\n style:box-shadow=\"{item.style.boxShadow}\"\n ></div>\n </div>\n {/each}\n</div>\n","// extracted by mini-css-extract-plugin\nexport default {\"container-separator\":\"divkit-a7719\",\"container-separator__item\":\"divkit-c770e\",\"container-separator__shape\":\"divkit-f6e9a\"};","export function simpleThrottle<F extends(...args: any[]) => any>(fn: F, timeout: number): F {\n let runTs = 0;\n let prevRes: unknown;\n let awaits = false;\n\n return function(this: any) {\n const now = Date.now();\n\n if (!runTs || Math.abs(now - runTs) > timeout) {\n runTs = now;\n\n // eslint-disable-next-line prefer-rest-params\n return (prevRes = fn.apply(this, arguments as unknown as any[]));\n }\n\n if (!awaits) {\n awaits = true;\n setTimeout(() => {\n awaits = false;\n // eslint-disable-next-line prefer-rest-params\n prevRes = fn.apply(this, arguments as unknown as any[]);\n }, timeout);\n }\n\n return prevRes;\n } as unknown as F;\n}\n","export interface Box {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport function getMarginBox(elem: HTMLElement): Box {\n const bbox = elem.getBoundingClientRect();\n const computed = getComputedStyle(elem);\n\n return {\n top: bbox.top - parseFloat(computed.marginTop),\n right: bbox.right + parseFloat(computed.marginRight),\n bottom: bbox.bottom + parseFloat(computed.marginBottom),\n left: bbox.left - parseFloat(computed.marginLeft)\n };\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Container.module.css';\n\n import type { ContainerOrientation, DivContainerData } from '../../types/container';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { SeparatorStyle } from '../../utils/container';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { calcAdditionalPaddings, calcItemsGap } from '../../utils/container';\n import { hasGapSupport } from '../../utils/hasGapSupport';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import ContainerSeparators from './ContainerSeparators.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Outer from '../utilities/Outer.svelte';\n\n export let json: Partial<DivContainerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const HALIGN_MAP = {\n left: 'start',\n center: 'center',\n right: 'end'\n } as const;\n\n const VALIGN_MAP = {\n top: 'start',\n center: 'center',\n bottom: 'end',\n baseline: 'baseline'\n } as const;\n\n const AVAIL_SEPARATOR_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"container\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let orientation: ContainerOrientation = 'vertical';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctContainerOrientation($jsonOrientation, orientation);\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: wrap = $jsonLayoutMode === 'wrap';\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.separator);\n let separator: SeparatorStyle | null = null;\n $: {\n if ($jsonSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n separator?.style || null\n );\n\n if (style) {\n separator = {\n show_at_start: Boolean($jsonSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonSeparator.show_at_end ?? false),\n show_between: Boolean($jsonSeparator.show_between ?? true),\n style\n };\n } else {\n separator = null;\n }\n } else {\n separator = null;\n }\n }\n\n $: jsonLineSeparator = rootCtx.getDerivedFromVars(json.line_separator);\n let lineSeparator: SeparatorStyle | null = null;\n $: {\n if ($jsonLineSeparator?.style && orientation !== 'overlap' && hasGapSupport()) {\n const style = correctDrawableStyle<DrawableStyle | null>(\n $jsonLineSeparator.style,\n AVAIL_SEPARATOR_SHAPES,\n lineSeparator?.style || null\n );\n\n if (style) {\n lineSeparator = {\n show_at_start: Boolean($jsonLineSeparator.show_at_start ?? false),\n show_at_end: Boolean($jsonLineSeparator.show_at_end ?? false),\n show_between: Boolean($jsonLineSeparator.show_between ?? true),\n style\n };\n } else {\n lineSeparator = null;\n }\n } else {\n lineSeparator = null;\n }\n }\n\n $: additionalPaddings = (separator || lineSeparator) ?\n calcAdditionalPaddings(orientation, separator, lineSeparator) :\n null;\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspect: number | undefined = undefined;\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspect = newRatio;\n } else {\n aspect = undefined;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n\n let childLayoutParams: LayoutParams = {};\n $: {\n let newChildLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n if (orientation === 'overlap') {\n newChildLayoutParams.overlapParent = true;\n }\n if (orientation !== 'horizontal') {\n newChildLayoutParams.parentHAlign = HALIGN_MAP[contentHAlign];\n if (\n !$jsonHeight ||\n $jsonHeight.type === 'wrap_content' ||\n $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n ) {\n newChildLayoutParams.parentVerticalWrapContent = true;\n }\n }\n if (orientation !== 'vertical') {\n newChildLayoutParams.parentVAlign = VALIGN_MAP[contentVAlign];\n if (\n $jsonWidth?.type === 'wrap_content' ||\n $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n ) {\n newChildLayoutParams.parentHorizontalWrapContent = true;\n }\n }\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentContainerOrientation = 'horizontal';\n }\n if (orientation === 'vertical') {\n newChildLayoutParams.parentContainerOrientation = 'vertical';\n }\n if (wrap) {\n newChildLayoutParams.parentContainerWrap = true;\n }\n\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: mods = {\n orientation,\n valign: contentVAlign,\n halign: contentHAlign,\n wrap\n };\n\n $: style = {\n gap: (separator || lineSeparator) ?\n calcItemsGap(orientation, separator, lineSeparator) :\n undefined,\n 'aspect-ratio': aspect\n };\n</script>\n\n{#if !hasItemsError}\n <Outer\n cls={genClassName('container', css, mods)}\n {style}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n {additionalPaddings}\n >\n {#each items as item}\n <Unknown layoutParams={childLayoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n\n {#if separator || lineSeparator}\n <ContainerSeparators\n {separator}\n {lineSeparator}\n {orientation}\n />\n {/if}\n </Outer>\n{/if}\n","import type { ContainerOrientation } from '../types/container';\n\nexport function correctContainerOrientation(\n orientation: string | undefined,\n defaultVal: ContainerOrientation\n): ContainerOrientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal' ||\n orientation === 'overlap'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"separator\":\"divkit-a30bb\",\"separator_orientation_horizontal\":\"divkit-f529e\",\"separator_orientation_vertical\":\"divkit-e9e27\",\"separator__inner\":\"divkit-db7d8\"};","import type { Orientation } from '../types/orientation';\n\nexport function correctGeneralOrientation(\n orientation: string | undefined,\n defaultVal: Orientation\n): Orientation {\n if (\n orientation === 'vertical' ||\n orientation === 'horizontal'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n\n import css from './Separator.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivSeparatorData } from '../../types/separator';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { Orientation } from '../../types/orientation';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { pxToEm } from '../../utils/pxToEm';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivSeparatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonDelimiterStyle = rootCtx.getDerivedFromVars(json.delimiter_style);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonDelimiterStyle?.orientation, orientation);\n }\n\n // Avoid transparent separator creation\n $: hasContent = !(\n $jsonDelimiterStyle?.color &&\n (\n $jsonDelimiterStyle.color === 'transparent' ||\n (\n $jsonDelimiterStyle.color.length === 9 &&\n $jsonDelimiterStyle.color.indexOf('#00') === 0\n )\n )\n );\n\n // let background = correctColor('#14000000');\n let background = 'rgba(0,0,0,0.08)';\n $: {\n background = correctColor($jsonDelimiterStyle?.color, 1, background);\n }\n\n $: width = orientation === 'horizontal' ? '100%' : pxToEm(1);\n $: height = orientation === 'horizontal' ? pxToEm(1) : '100%';\n\n $: style = {\n background,\n width,\n height\n };\n\n $: mods = {\n orientation\n };\n</script>\n\n<Outer\n cls={genClassName('separator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n {#if hasContent}\n <span class={css.separator__inner} style={makeStyle(style)}></span>\n {/if}\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"divkit-a448f\",\"image_is-width-content\":\"divkit-fe14a\",\"image_is-height-content\":\"divkit-f4d92\",\"image__image\":\"divkit-ce046\",\"image_error\":\"divkit-f10d9\",\"image__aspect-wrapper\":\"divkit-dc808\",\"image_aspect\":\"divkit-ae784\",\"image_loaded\":\"divkit-cf4e0\",\"divkit-image-appearance\":\"divkit-e555f\",\"image_before-appearance\":\"divkit-ffe8a\"};","<script lang=\"ts\">\n import { getContext, onDestroy } from 'svelte';\n\n import css from './Image.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivImageData, TintMode } from '../../types/image';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import Outer from '../utilities/Outer.svelte';\n import { makeStyle } from '../../utils/makeStyle';\n import { genClassName } from '../../utils/genClassName';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { htmlFilter } from '../../utils/htmlFilter';\n import { imageSize } from '../../utils/background';\n import { correctImagePosition } from '../../utils/correctImagePosition';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctColor } from '../../utils/correctColor';\n import { correctCSSInterpolator } from '../../utils/correctCSSInterpolator';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctTintMode } from '../../utils/correctTintMode';\n import { getCssFilter } from '../../utils/filters';\n\n export let json: Partial<DivImageData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n // const DEFAULT_PLACEHOLDER_COLOR = correctColor('#14000000');\n const DEFAULT_PLACEHOLDER_COLOR = 'rgba(0,0,0,0.08)';\n\n const STATE_LOADING = 0;\n const STATE_LOADED = 1;\n const STATE_ERROR = 2;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonImageUrl = rootCtx.getDerivedFromVars(json.image_url);\n\n $: jsonGifUrl = rootCtx.getDerivedFromVars(json.gif_url);\n $: imageUrl = $jsonImageUrl || $jsonGifUrl;\n\n let state = STATE_LOADING;\n let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n function updateImageUrl(_url: string | undefined): void {\n state = STATE_LOADING;\n }\n $: updateImageUrl(imageUrl);\n\n let hasError = false;\n $: {\n if (!imageUrl) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"image_url\" for \"image\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n $: jsonPreview = rootCtx.getDerivedFromVars(json.preview);\n let backgroundImage = '';\n $: {\n const preview = $jsonPreview;\n\n if ((state === STATE_LOADING || state === STATE_ERROR) && preview) {\n if (preview.startsWith('data:')) {\n backgroundImage = `url(\"${htmlFilter(preview)}\")`;\n } else {\n backgroundImage = `url(\"data:image/jpg;base64,${htmlFilter(preview)}\")`;\n }\n } else {\n backgroundImage = '';\n }\n }\n\n $: jsonPlaceholderColor = rootCtx.getDerivedFromVars(json.placeholder_color);\n function updatePlaceholderColor(state: number, color: string | undefined): void {\n if (state === STATE_LOADING || state === STATE_ERROR) {\n placeholderColor = correctColor(color, 1, placeholderColor);\n } else {\n placeholderColor = '';\n }\n }\n $: updatePlaceholderColor(state, $jsonPlaceholderColor);\n\n $: jsonScale = rootCtx.getDerivedFromVars(json.scale);\n // Exactly \"none\", \"scale-down\" would not match android\n let scale = 'none';\n $: {\n scale = imageSize($jsonScale) || scale;\n }\n\n $: jsonPosition = rootCtx.getDerivedFromVars({\n content_alignment_horizontal: json.content_alignment_horizontal,\n content_alignment_vertical: json.content_alignment_vertical\n });\n let position = '50% 50%';\n function updatePosition(pos: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n }): void {\n position = correctImagePosition(pos, position);\n }\n $: updatePosition($jsonPosition);\n\n $: jsonA11y = rootCtx.getDerivedFromVars(json.accessibility);\n $: alt = $jsonA11y?.description || '';\n\n $: jsonAspect = rootCtx.getDerivedFromVars(json.aspect);\n let aspectPaddingBottom = '0';\n $: {\n const newRatio = $jsonAspect?.ratio;\n if (newRatio && isPositiveNumber(newRatio)) {\n aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n } else {\n aspectPaddingBottom = '0';\n }\n }\n\n $: jsonTintColor = rootCtx.getDerivedFromVars(json.tint_color);\n let tintColor: string | undefined = undefined;\n $: jsonTintMode = rootCtx.getDerivedFromVars(json.tint_mode);\n let tintMode: TintMode = 'source_in';\n let svgFilterId = '';\n $: {\n const val = $jsonTintColor;\n const newTintColor = val ? correctColor(val) : undefined;\n const newTintMode = correctTintMode($jsonTintMode, tintMode);\n if (newTintColor !== tintColor || newTintMode !== tintMode) {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n svgFilterId = newTintColor ? rootCtx.addSvgFilter(newTintColor, newTintMode) : '';\n tintColor = newTintColor;\n tintMode = newTintMode;\n }\n }\n\n $: jsonAppearanceAnimation = rootCtx.getDerivedFromVars(json.appearance_animation);\n let animationInterpolator = '';\n let animationFadeStart = 0;\n let animationDelay = 0;\n let animationDuration = 0;\n\n $: if ($jsonAppearanceAnimation && $jsonAppearanceAnimation.type === 'fade') {\n const animation = $jsonAppearanceAnimation;\n\n animationInterpolator = correctCSSInterpolator(animation.interpolator, 'ease_in_out').replace(/_/g, '-');\n animationDuration = correctNonNegativeNumber(animation.duration, 300);\n animationDelay = correctNonNegativeNumber(animation.start_delay, 0);\n animationFadeStart = correctNonNegativeNumber(animation.alpha, 0);\n }\n\n $: jsonFilters = rootCtx.getDerivedFromVars(json.filters);\n let filter = '';\n let filterClipPath = '';\n $: {\n let newFilter = '';\n let newClipPath = '';\n if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n newFilter = getCssFilter($jsonFilters, rootCtx.logError);\n }\n if (newFilter) {\n newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n }\n filter = newFilter;\n filterClipPath = newClipPath;\n }\n\n $: mods = {\n aspect: aspectPaddingBottom !== '0',\n 'is-width-content': isWidthContent,\n 'is-height-content': isHeightContent,\n loaded: state === STATE_LOADED,\n 'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING\n };\n\n $: style = {\n // Image preview shows, if loading of original image is failed\n 'background-image': backgroundImage,\n 'background-color': backgroundImage ? undefined : placeholderColor,\n 'background-size': scale,\n 'clip-path': filterClipPath || undefined,\n 'object-fit': scale,\n 'object-position': position,\n filter: [\n state === STATE_LOADED && svgFilterId ? `url(#${svgFilterId})` : '',\n filter\n ].filter(Boolean).join(' '),\n '--divkit-appearance-interpolator': animationInterpolator || undefined,\n '--divkit-appearance-fade-start': animationInterpolator ? animationFadeStart : undefined,\n '--divkit-appearance-delay': animationInterpolator ? `${animationDelay}ms` : undefined,\n '--divkit-appearance-duration': animationInterpolator ? `${animationDuration}ms` : undefined\n };\n\n function onLoad(): void {\n if (state === STATE_LOADING) {\n state = STATE_LOADED;\n }\n }\n\n function onError(): void {\n if (state === STATE_LOADING) {\n state = STATE_ERROR;\n }\n }\n\n onDestroy(() => {\n rootCtx.removeSvgFilter(tintColor, tintMode);\n });\n\n // Recreate image on svg filter change for the Safari\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('image', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customDescription={true}\n >\n {#key svgFilterId}\n {#if mods.aspect}\n <span class={css['image__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n </span>\n {:else}\n <img\n class={css.image__image}\n src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n loading=\"lazy\"\n decoding=\"async\"\n style={makeStyle(style)}\n {alt}\n aria-hidden={alt ? null : 'true'}\n on:load={onLoad}\n on:error={onError}\n >\n {/if}\n {/key}\n </Outer>\n{/if}\n","import type { AlignmentHorizontal, AlignmentVertical } from '../types/alignment';\nimport { imagePos } from './background';\n\nexport function correctImagePosition(obj: {\n content_alignment_horizontal?: AlignmentHorizontal;\n content_alignment_vertical?: AlignmentVertical;\n}, defaultVal: string): string {\n const halign = obj.content_alignment_horizontal;\n const valign = obj.content_alignment_vertical;\n\n if (\n halign && halign !== 'left' && halign !== 'center' && halign !== 'right' ||\n valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n ) {\n return defaultVal;\n }\n\n return imagePos(obj);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"divkit-d9080\",\"grid_halign_left\":\"divkit-f63b3\",\"grid_halign_center\":\"divkit-a14a6\",\"grid_halign_right\":\"divkit-b0717\",\"grid_valign_top\":\"divkit-fbca8\",\"grid_valign_center\":\"divkit-d4310\",\"grid_valign_bottom\":\"divkit-e4205\"};","import { pxToEm } from './pxToEm';\n\n/**\n * Filter weights, that would result in < 1fr\n * @param weight\n */\nfunction isSpannedWeight(weight: number): boolean {\n return weight > 0 && weight < 1;\n}\n\nfunction formatWeight(weight: number): string {\n return String(Math.ceil(weight * 1000) / 1000);\n}\n\nexport function gridCalcTemplates(weights: number[], minSizes: number[], length: number): string {\n // If result weight is lesser than 1, multiply all weights so all of them would exceed 1\n if (weights.some(isSpannedWeight)) {\n const multiply = Math.max(...weights.filter(isSpannedWeight).map(weight => 1 / weight));\n weights = weights.map(weight => weight * multiply);\n }\n\n const allTracksHasWeight = weights.every(Boolean);\n let minSize = 0;\n let totalWeight = 0;\n const template: string[] = [];\n\n if (allTracksHasWeight) {\n totalWeight = weights.reduce((acc, item) => {\n return acc + item;\n }, 0);\n\n for (let i = 0; i < length; ++i) {\n if (!minSizes[i]) {\n continue;\n }\n\n const minTrackSize = (minSizes[i] / weights[i]) * totalWeight;\n\n if (minTrackSize > minSize) {\n minSize = minTrackSize;\n }\n }\n }\n\n for (let i = 0; i < length; ++i) {\n if (minSize) {\n template[i] =\n `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n } else if (weights[i]) {\n template[i] = `${formatWeight(weights[i])}fr`;\n } else {\n template[i] = 'auto';\n }\n }\n\n return template.join(' ');\n}\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Grid.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivGridData } from '../../types/grid';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Size } from '../../types/sizes';\n import type { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n import type { MaybeMissing } from '../../expressions/json';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n\n export let json: Partial<DivGridData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let hasItemsError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"grid\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n\n let columnCount = 1;\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n $: {\n columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n }\n\n $: items = (!hasItemsError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n interface ChildInfo {\n rowSpan: number | undefined;\n columnSpan: number | undefined;\n width: MaybeMissing<Size> | undefined;\n height: MaybeMissing<Size> | undefined;\n }\n let childStore: Readable<ChildInfo[]>;\n $: {\n let children: Readable<ChildInfo>[] = [];\n\n items.forEach(item => {\n children.push(\n rootCtx.getDerivedFromVars({\n rowSpan: item.json.row_span,\n columnSpan: item.json.column_span,\n width: item.json.width,\n height: item.json.height\n })\n );\n });\n\n // Create a new array every time so that it is not equal to the previous one\n childStore = derived(children, val => [...val]);\n }\n\n let resultItems: {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n layoutParams: LayoutParams;\n }[];\n let columnsWeight: number[] = [];\n let rowsWeight: number[] = [];\n let columnsMinWidth: number[] = [];\n let rowsMinHeight: number[] = [];\n let rowCount = 0;\n let hasLayoutError = false;\n $: {\n const used: Record<string, boolean> = {};\n let x = 0;\n let y = 0;\n columnsWeight = [];\n rowsWeight = [];\n columnsMinWidth = [];\n rowsMinHeight = [];\n hasLayoutError = false;\n\n resultItems = items.map((item, index) => {\n const childInfo = $childStore[index];\n const colSpan = Number(childInfo.columnSpan) || 1;\n const rowSpan = Number(childInfo.rowSpan) || 1;\n\n const gridArea = {\n x,\n y,\n colSpan,\n rowSpan\n };\n\n const widthWeight =\n childInfo.width?.type === 'match_parent' ?\n Number(childInfo.width.weight || 1) / colSpan :\n 0;\n const heightWeight =\n childInfo.height?.type === 'match_parent' ?\n Number(childInfo.height.weight || 1) / rowSpan :\n 0;\n const widthMin =\n colSpan === 1 && childInfo.width?.type === 'fixed' && childInfo.width.value ?\n Number(childInfo.width.value) / colSpan :\n 0;\n const heightMin =\n rowSpan === 1 && childInfo.height?.type === 'fixed' && childInfo.height.value ?\n Number(childInfo.height.value) / rowSpan :\n 0;\n\n for (let i = x; i < x + colSpan; ++i) {\n for (let j = y; j < y + rowSpan; ++j) {\n if (used[i + '_' + j]) {\n hasLayoutError = true;\n continue;\n }\n\n used[i + '_' + j] = true;\n\n if (!columnsWeight[i] || columnsWeight[i] < widthWeight) {\n columnsWeight[i] = widthWeight;\n }\n\n if (!rowsWeight[j] || rowsWeight[j] < heightWeight) {\n rowsWeight[j] = heightWeight;\n }\n\n if (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin) {\n columnsMinWidth[i] = widthMin;\n }\n\n if (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin) {\n rowsMinHeight[j] = heightMin;\n }\n }\n }\n\n do {\n ++x;\n\n if (x >= columnCount) {\n x = 0;\n ++y;\n }\n } while (used[x + '_' + y]);\n\n return {\n ...item,\n layoutParams: {\n gridArea,\n fakeElement: layoutParams?.fakeElement || false\n }\n };\n });\n\n if (x !== 0) {\n hasLayoutError = true;\n }\n\n if (hasLayoutError) {\n rootCtx.logError(wrapError(new Error('Mismatching \"grid\" rows/columns')));\n }\n\n rowCount = y;\n }\n\n let contentVAlign: AlignmentVertical = 'top';\n $: jsonContentVAlign = rootCtx.getDerivedFromVars(json.content_alignment_vertical);\n $: {\n contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n }\n\n let contentHAlign: AlignmentHorizontal = 'left';\n $: jsonContentHAlign = rootCtx.getDerivedFromVars(json.content_alignment_horizontal);\n $: {\n contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, contentHAlign);\n }\n\n $: mods = {\n valign: contentVAlign,\n halign: contentHAlign\n };\n\n $: style = {\n 'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnCount),\n 'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowCount)\n };\n\n $: hasError = hasItemsError || hasLayoutError;\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('grid', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {style}\n {layoutParams}\n >\n {#each resultItems as item}\n <Unknown layoutParams={item.layoutParams} div={item.json} templateContext={item.templateContext} origJson={item.origJson} />\n {/each}\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"gallery\":\"divkit-cbb0f\",\"gallery_orientation_horizontal\":\"divkit-c9be7\",\"gallery_orientation_vertical\":\"divkit-a72d5\",\"gallery__scroller\":\"divkit-a4e39\",\"gallery_scroll-snap\":\"divkit-f606e\",\"gallery__items-grid\":\"divkit-eb4a5\",\"gallery__items\":\"divkit-af276\",\"gallery__arrow\":\"divkit-b72d7\",\"gallery__arrow-icon\":\"divkit-d100d\",\"gallery__arrow_left\":\"divkit-a0a5d\",\"gallery__arrow_right\":\"divkit-f0f59\",\"gallery__arrow-icon-path\":\"divkit-b4173\"};","export function joinTemplateSizes(sizes: string[]): string {\n const result: string[] = [];\n let temp = sizes[0];\n let counter = 1;\n\n for (let i = 1; i <= sizes.length; i++) {\n if (sizes[i] !== temp) {\n result.push(counter > 1 ? `repeat(${counter}, ${temp})` : temp);\n temp = sizes[i];\n counter = 1;\n } else {\n counter++;\n }\n }\n\n return result.join(' ');\n}\n","type SimpleFunction = (...args: any[]) => any;\ntype DebouncedFunction<F extends SimpleFunction> = (...args: Parameters<F>) => void;\n\nexport function debounce<F extends SimpleFunction>(fn: F, timeout: number): DebouncedFunction<F> {\n let timer: ReturnType<typeof setTimeout> | null;\n\n return function(this: ThisParameterType<F>, ...args: Parameters<F>) {\n if (timer !== null) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, timeout);\n };\n}\n","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n import { derived, Readable } from 'svelte/store';\n\n import css from './Gallery.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Align, LayoutParams } from '../../types/layoutParams';\n import type { DivGalleryData } from '../../types/gallery';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n import type { Orientation } from '../../types/orientation';\n import type { MaybeMissing } from '../../expressions/json';\n import type { Size } from '../../types/sizes';\n import type { Style } from '../../types/general';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctAlignment } from '../../utils/correctAlignment';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { joinTemplateSizes } from '../../utils/joinTemplateSizes';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivGalleryData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let scroller: HTMLElement;\n let galleryItemsWrappers: HTMLElement[] = [];\n let hasScrollLeft = false;\n let hasScrollRight = false;\n\n let resizeObserver: ResizeObserver | null = null;\n let itemsGridElem: HTMLElement;\n let mounted = false;\n\n const leftClass = rootCtx.getCustomization('galleryLeftClass');\n const rightClass = rootCtx.getCustomization('galleryRightClass');\n\n let hasError = false;\n $: jsonItems = json.items;\n $: {\n if (!jsonItems?.length || !Array.isArray(jsonItems)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"gallery\"')));\n } else {\n hasError = false;\n }\n }\n\n const isDesktop = rootCtx.isDesktop;\n\n interface Item {\n json: DivBaseData;\n templateContext: TemplateContext;\n origJson: DivBaseData;\n }\n\n $: items = (!hasError && jsonItems || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n $: if (shouldCheckArrows) {\n if (typeof ResizeObserver !== 'undefined') {\n // Gallery can contain a dynamic content (e.g. loading images with auto-size)\n resizeObserver = new ResizeObserver(() => {\n updateArrowsVisibilityDebounced();\n });\n resizeObserver.observe(itemsGridElem);\n }\n } else if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n\n $: jsonColumnCount = rootCtx.getDerivedFromVars(json.column_count);\n let columns = 1;\n $: {\n columns = correctPositiveNumber($jsonColumnCount, columns);\n }\n\n function rebuildItemsGrid(items: Item[], columns: number): Item[][] {\n let column = 0;\n let res: Item[][] = [];\n\n for (let i = 0; i < items.length; ++i) {\n if (!res[column]) {\n res[column] = [];\n }\n res[column].push(items[i]);\n if (++column >= columns) {\n column = 0;\n }\n }\n\n return res;\n }\n $: itemsGrid = rebuildItemsGrid(items, columns);\n\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n let orientation: Orientation = 'horizontal';\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let align: Align = 'start';\n $: jsonCrossContentAlignment = rootCtx.getDerivedFromVars(json.cross_content_alignment);\n $: {\n align = correctAlignment($jsonCrossContentAlignment, align);\n }\n\n let gridGap: string | undefined;\n let itemSpacing = 8;\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n gridGap = pxToEm(itemSpacing);\n }\n\n let crossGridGap: string | undefined;\n let crossSpacing;\n $: jsonCrossSpacing = rootCtx.getDerivedFromVars(json.cross_spacing);\n $: {\n crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n crossGridGap = pxToEm(crossSpacing);\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: gridTemplate = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n let templateSizes: string[] = [];\n\n let childStore: Readable<(MaybeMissing<Size> | undefined)[]>;\n $: {\n let children: Readable<MaybeMissing<Size> | undefined>[] = [];\n\n items.forEach(item => {\n const itemSize = orientation === 'horizontal' ? 'width' : 'height';\n children.push(rootCtx.getDerivedFromVars(item.json[itemSize]));\n });\n\n childStore = derived(children, val => val);\n }\n $: {\n templateSizes = [];\n if (columns > 1) {\n // TODO: think about match_parent in this task DIVKIT-307\n templateSizes.push('auto');\n } else {\n $childStore.forEach(childInfo => {\n if ((!childInfo && orientation === 'horizontal') || childInfo?.type === 'match_parent') {\n templateSizes.push('100%');\n } else {\n templateSizes.push('max-content');\n }\n });\n }\n }\n\n let scrollerStyle: Style = {};\n let scrollSnap = false;\n $: jsonScrollMode = rootCtx.getDerivedFromVars(json.scroll_mode);\n let childLayoutParams: LayoutParams = {};\n $: {\n const newScrollerStyle: Style = {};\n let newChildLayoutParams: LayoutParams = {};\n scrollSnap = false;\n\n if (layoutParams?.fakeElement) {\n newChildLayoutParams.fakeElement = true;\n }\n\n if (orientation === 'horizontal') {\n newChildLayoutParams.parentVAlign = align;\n } else {\n newChildLayoutParams.parentHAlign = align;\n }\n\n if ($jsonScrollMode === 'paging') {\n scrollSnap = true;\n newChildLayoutParams.scrollSnap = 'start';\n const scrollPadding = orientation === 'horizontal' ? 'scroll-padding-left' : 'scroll-padding-top';\n newScrollerStyle[scrollPadding] = pxToEm(itemSpacing / 2);\n }\n\n // todo multiple columns\n if (columns === 1) {\n newChildLayoutParams.parentLayoutOrientation = orientation;\n }\n\n scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridStyle = {\n padding,\n 'grid-gap': crossGridGap\n };\n\n $: columnStyle = {\n 'grid-gap': gridGap,\n [gridTemplate]: joinTemplateSizes(templateSizes)\n };\n\n $: mods = {\n orientation,\n 'scroll-snap': scrollSnap\n };\n\n $: jsonDefaultItem = rootCtx.getDerivedFromVars(json.default_item);\n let defaultItem = 0;\n $: {\n defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n }\n\n function updateArrowsVisibility(): void {\n if (!scroller) {\n return;\n }\n\n const scrollLeft = scroller.scrollLeft;\n const scrollWidth = scroller.scrollWidth;\n const containerWidth = scroller.offsetWidth;\n\n hasScrollLeft = scrollLeft > 2;\n hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n }\n\n const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n function scroll(type: 'left' | 'right'): void {\n scroller.scroll({\n left: scroller.scrollLeft + (scroller.offsetWidth * .75) * (type === 'right' ? 1 : -1),\n behavior: 'smooth'\n });\n }\n\n function getItems(): HTMLElement[] {\n let res: HTMLElement[] = [];\n let maxLen = galleryItemsWrappers[0].children.length;\n\n for (let j = 0; j < maxLen; ++j) {\n for (let i = 0; i < columns; ++i) {\n const elem = galleryItemsWrappers[i].children[j] as HTMLElement;\n if (elem) {\n res.push(elem);\n }\n }\n }\n\n return res;\n }\n\n function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n scroller.scroll({\n [scrollDirection]: Math.max(0, galleryElements[index][elementOffset] - itemSpacing / 2),\n behavior\n });\n }\n\n function checkIsIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.right > scroller.left && scroller.right > item.left;\n }\n\n return item.bottom > scroller.top && scroller.bottom > item.top;\n }\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(action: 'prev' | 'next'): number {\n const galleryElements = getItems();\n const scrollerRect = scroller.getBoundingClientRect();\n\n // Try to find the most left fully visible element\n const firstFullyVisibleElement = galleryElements.findIndex(el =>\n checkIsFullyIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n // If there is no fully visible elements, it means that:\n // - only one element is partly visible and its width bigger than gallery width\n // - two elements are partly visible\n const visibleElementsMap = galleryElements.map(el =>\n checkIsIntersecting(scrollerRect, el.getBoundingClientRect())\n );\n const firstVisibleElement = visibleElementsMap.findIndex(Boolean);\n\n if (firstVisibleElement !== -1) {\n // If two elements are partly visible, we should scroll to current element on \"set_item_previous\" action\n const isPreviousEqualCurrent = action === 'prev' && visibleElementsMap.filter(Boolean).length === 2;\n return isPreviousEqualCurrent ? firstVisibleElement + 1 : firstVisibleElement;\n }\n\n return action === 'prev' ? 1 : galleryElements.length - 2;\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n const galleryElements = getItems();\n if (item < 0 || item > galleryElements.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToGalleryItem(galleryElements, item);\n },\n setPreviousItem(overflow: Overflow) {\n const currentElementIndex = calculateCurrentElementIndex('prev');\n const galleryElements = getItems();\n let previousItem = currentElementIndex - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? galleryElements.length - 1 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, previousItem);\n },\n setNextItem(overflow: Overflow) {\n // Go to scroller start, if we reached right/bottom edge of scroller\n const isEdgeScroll = orientation === 'horizontal' ? (\n scroller.scrollLeft + scroller.offsetWidth === scroller.scrollWidth\n ) : (\n scroller.scrollTop + scroller.offsetHeight === scroller.scrollHeight\n );\n const galleryElements = getItems();\n if (isEdgeScroll && overflow === 'ring') {\n scrollToGalleryItem(galleryElements, 0);\n return;\n }\n\n const currentElementIndex = calculateCurrentElementIndex('next');\n let nextItem = currentElementIndex + 1;\n\n if (nextItem > galleryElements.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentElementIndex;\n }\n\n scrollToGalleryItem(galleryElements, nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n if (!hasError) {\n updateArrowsVisibility();\n\n if (defaultItem) {\n const galleryElements = getItems();\n scrollToGalleryItem(galleryElements, defaultItem, 'auto');\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('gallery', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n customActions={'gallery'}\n >\n <div\n class=\"{css.gallery__scroller} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={scroller}\n on:scroll={shouldCheckArrows ? updateArrowsVisibility : null}\n style={makeStyle(scrollerStyle)}\n >\n <div\n bind:this={itemsGridElem}\n class={css['gallery__items-grid']}\n style={makeStyle(gridStyle)}\n >\n {#each itemsGrid as itemsRow, rowIndex}\n <div\n class={css.gallery__items}\n style={makeStyle(columnStyle)}\n bind:this={galleryItemsWrappers[rowIndex]}\n >\n {#each itemsRow as item}\n <Unknown\n layoutParams={childLayoutParams}\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n />\n {/each}\n </div>\n {/each}\n </div>\n </div>\n {#if orientation === 'horizontal'}\n {#if hasScrollLeft && shouldCheckArrows}\n <div class=\"{leftClass || `${css.gallery__arrow} ${css.gallery__arrow_left}`}\" on:click={() => scroll('left')}>\n {#if !leftClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"m10 16 8.3 8 1.03-1-4-6-.7-1 .7-1 4-6-1.03-1z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {#if hasScrollRight && shouldCheckArrows}\n <div class=\"{rightClass || `${css.gallery__arrow} ${css.gallery__arrow_right}`}\" on:click={() => scroll('right')}>\n {#if !rightClass}\n <svg class={css['gallery__arrow-icon']} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path class={css['gallery__arrow-icon-path']} d=\"M22 16l-8.3 8-1.03-1 4-6 .7-1-.7-1-4-6 1.03-1 8.3 8z\"/>\n </svg>\n {/if}\n </div>\n {/if}\n {/if}\n </Outer>\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n orientation: string | undefined,\n defaultVal: Align\n): Align {\n if (\n orientation === 'start' ||\n orientation === 'center' ||\n orientation === 'end'\n ) {\n return orientation;\n }\n\n return defaultVal;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tabs\":\"divkit-e0df5\",\"tabs__list\":\"divkit-ea19b\",\"tabs__item\":\"divkit-c25c7\",\"tabs__item_selected\":\"divkit-d560a\",\"tabs__item_actionable\":\"divkit-dfda0\",\"tabs__panels\":\"divkit-f5dc0\",\"tabs__swiper\":\"divkit-eb42c\",\"tabs__swiper_animated\":\"divkit-b9f18\",\"tabs__swiper_inited\":\"divkit-fa574\",\"tabs__panel\":\"divkit-cc9fb\",\"tabs__panel_visible\":\"divkit-e7306\",\"tabs__separator\":\"divkit-b85bf\"};","<script lang=\"ts\">\n import { getContext, onDestroy, tick } from 'svelte';\n\n import css from './Tabs.module.css';\n import rootCss from '../Root.module.css';\n\n import type { Mods } from '../../types/general';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivTabsData } from '../../types/tabs';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { EdgeInsets } from '../../types/edgeInserts';\n import type { SwitchElements, Overflow } from '../../types/switch-elements';\n import type { TabItem } from '../../types/tabs';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import Actionable from '../utilities/Actionable.svelte';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { makeStyle } from '../../utils/makeStyle';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { correctBorderRadius } from '../../utils/correctBorderRadius';\n import { correctColor } from '../../utils/correctColor';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { assignIfDifferent } from '../../utils/assignIfDifferent';\n import { Coords, getTouchCoords } from '../../utils/getTouchCoords';\n import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n\n export let json: Partial<DivTabsData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('tabs');\n\n let hasError = false;\n $: items = json.items || [];\n $: {\n if (!items?.length || !Array.isArray(items)) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n } else {\n hasError = false;\n }\n }\n\n $: jsonWidth = rootCtx.getDerivedFromVars(json.width);\n $: jsonHeight = rootCtx.getDerivedFromVars(json.height);\n let childLayoutParams: LayoutParams = {};\n $: {\n let newLayoutParams: LayoutParams = {};\n\n if (layoutParams?.fakeElement) {\n newLayoutParams.fakeElement = true;\n }\n if ($jsonWidth?.type === 'wrap_content') {\n newLayoutParams.parentHorizontalWrapContent = true;\n }\n if (!$jsonHeight || $jsonHeight.type === 'wrap_content') {\n newLayoutParams.parentVerticalWrapContent = true;\n }\n\n childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n }\n\n let tabsElem: HTMLElement;\n let panelsWrapper: HTMLElement;\n let swiperElem: HTMLElement;\n let mods: Mods = {};\n const jsonSelectedTab = rootCtx.getJsonWithVars(json.selected_tab);\n let selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n $: {\n if (!hasError && (selected < 0 || selected >= items.length)) {\n rootCtx.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n additional: {\n selected: json.selected_tab,\n length: items.length\n }\n }));\n selected = selected < 0 ? 0 : items.length - 1;\n }\n }\n\n $: jsonTabStyle = rootCtx.getDerivedFromVars(json.tab_title_style);\n $: tabStyle = $jsonTabStyle || {};\n\n let tabFontSize = 12;\n $: {\n tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n }\n\n let tabPaddings = '';\n\n $: {\n if (tabStyle.font_size || tabStyle.paddings) {\n const paddings: EdgeInsets = tabStyle.paddings || {\n top: 6,\n right: 8,\n bottom: 6,\n left: 8\n };\n\n const adjustedPaddings: EdgeInsets = {\n top: (Number(paddings.top) || 0) / tabFontSize * 10,\n right: (Number(paddings.right) || 0) / tabFontSize * 10,\n bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n left: (Number(paddings.left) || 0) / tabFontSize * 10\n };\n\n tabPaddings = correctEdgeInserts(adjustedPaddings, tabPaddings);\n }\n }\n\n let tabLineHeight = '';\n $: {\n const lineHeight = tabStyle.line_height;\n if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n }\n }\n\n let tabLetterSpacing = '';\n $: {\n const letterSpacing = tabStyle.letter_spacing;\n if (letterSpacing !== undefined && isNonNegativeNumber(letterSpacing)) {\n tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n }\n }\n\n let tabBorderRadius = '';\n $: {\n if (tabStyle.corner_radius || tabStyle.corners_radius || tabStyle.font_size) {\n const defaultRadius = tabStyle.corner_radius ?? 1000;\n\n if (tabStyle.corners_radius) {\n tabBorderRadius = correctBorderRadius(tabStyle.corners_radius, defaultRadius, tabFontSize, tabBorderRadius);\n } else if (isNonNegativeNumber(defaultRadius)) {\n tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n }\n }\n }\n\n let tabActiveFontWeight: number | undefined = undefined;\n $: {\n tabActiveFontWeight = correctFontWeight(tabStyle.active_font_weight || tabStyle.font_weight, tabActiveFontWeight);\n }\n\n let tabInactiveFontWeight: number | undefined = undefined;\n $: {\n tabInactiveFontWeight = correctFontWeight(\n tabStyle.inactive_font_weight || tabStyle.font_weight,\n tabInactiveFontWeight\n );\n }\n\n let tabActiveTextColor = '';\n $: {\n tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n }\n\n let tabInactiveTextColor = '';\n $: {\n tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n }\n\n let tabActiveBackground = '';\n $: {\n tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n }\n\n let tabInactiveBackground = '';\n $: {\n tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n }\n\n let tabItemSpacing = 0;\n $: {\n tabItemSpacing = correctNonNegativeNumber(tabStyle.item_spacing, tabItemSpacing);\n }\n\n $: jsonSeparator = rootCtx.getDerivedFromVars(json.has_separator);\n $: jsonSeparatorColor = rootCtx.getDerivedFromVars(json.separator_color);\n $: jsonSeparatorPaddings = rootCtx.getDerivedFromVars(json.separator_paddings);\n let separatorBackground = '';\n let separatorMargins = '';\n $: {\n if ($jsonSeparator) {\n if ($jsonSeparatorColor) {\n separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n }\n if ($jsonSeparatorPaddings) {\n separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, separatorMargins);\n }\n }\n }\n $: separatorStyle = {\n background: separatorBackground,\n margin: separatorMargins\n };\n\n $: jsonSwipeEnabled = rootCtx.getDerivedFromVars(json.switch_tabs_by_content_swipe_enabled);\n $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n true :\n Boolean($jsonSwipeEnabled);\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: jsonTitlePaddings = rootCtx.getDerivedFromVars(json.title_paddings);\n let titlePadding: EdgeInsets | null = null;\n $: {\n titlePadding = correctEdgeInsertsObject($jsonTitlePaddings ? $jsonTitlePaddings : undefined, titlePadding);\n }\n\n let isSwipeInitialized = false;\n let isAnimated = false;\n let previousSelected = selected;\n let showedPanels: boolean[] = [];\n let visiblePanels: boolean[] = [];\n function updateItems(_items: TabItem[]): void {\n if (hasError) {\n return;\n }\n\n showedPanels = items.map((_, i) => i === selected);\n visiblePanels = items.map((_, i) => i === selected);\n }\n $: updateItems(items);\n\n async function setSelected(val: number, focus = false): Promise<void> {\n previousSelected = selected;\n selected = val;\n initTabsSwipe();\n changeTab();\n\n if (focus) {\n await tick();\n\n const selectedTab = tabsElem.querySelector(`.${css.tabs__item_selected}`) as HTMLElement | null;\n if (selectedTab) {\n selectedTab.focus();\n }\n }\n }\n\n function moveSelected(shift: number, focus = false): void {\n const len = items?.length;\n if (!len) {\n return;\n }\n\n let newSelected = selected + shift;\n\n if (newSelected >= len) {\n newSelected = 0;\n } else if (newSelected < 0) {\n newSelected = len - 1;\n }\n\n setSelected(newSelected, focus);\n }\n\n function selectItem(_event: Event, index: number): boolean {\n if (selected !== index) {\n setSelected(index);\n\n return false;\n }\n\n return true;\n }\n\n function changeTab(): void {\n isAnimated = true;\n updateTransform(-selected * 100);\n updateShowedPanels();\n updateWrapperHeight();\n hideNonVisiblePanels();\n currentTransform = -selected * panelsWrapper.clientWidth;\n }\n\n async function updateTransform(transform: number): Promise<void> {\n await tick();\n swiperElem.style.transform = `translate3d(${transform}%,0,0)`;\n }\n\n function updateShowedPanels(around = false): void {\n const start = around ?\n Math.max(0, selected - 1) :\n Math.min(selected, previousSelected);\n const end = around ?\n Math.min(items.length - 1, selected + 1) :\n Math.max(selected, previousSelected);\n\n showedPanels = showedPanels.map((isShowed, index) => isShowed || index >= start && index <= end);\n visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n }\n\n async function updateWrapperHeight(): Promise<void> {\n await tick();\n const activePanel = document.getElementById(`${instId}-panel-${selected}`);\n\n if (activePanel) {\n panelsWrapper.style.height = pxToEm(activePanel.offsetHeight);\n }\n }\n\n let hidePanelsTimeout: number | null = null;\n\n function hideNonVisiblePanels(): void {\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n hidePanelsTimeout = window.setTimeout(() => {\n visiblePanels = items.map((_, i) => i === selected);\n }, 400);\n }\n\n function onTabKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n if (!items) {\n return;\n }\n\n if (event.which === ARROW_LEFT) {\n moveSelected(-1, true);\n } else if (event.which === ARROW_RIGHT) {\n moveSelected(1, true);\n } else if (event.which === HOME) {\n setSelected(0, true);\n } else if (event.which === END) {\n setSelected(items.length - 1, true);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n // todo desktop arrows\n\n function initTabsSwipe(): void {\n if (isSwipeInitialized) {\n return;\n }\n\n isSwipeInitialized = true;\n panelsWrapper.style.height = pxToEm(panelsWrapper.clientHeight);\n swiperElem.style.transform = `translate3d(${-previousSelected * 100}%,0,0)`;\n }\n\n let startCoords: Coords | null = null;\n let moveCoords: Coords | null = null;\n let swipeStartTime: number;\n let isSwipeStarted = false;\n let isSwipeCanceled = false;\n let startTransform: number;\n let currentTransform: number;\n\n function onTouchStart(event: TouchEvent): void {\n const target = event.target as HTMLElement | null;\n const restrictClosest = target?.closest?.(`.${rootCss['root_restrict-scroll']}`);\n\n if (\n items.length < 2 ||\n event.touches.length > 1 ||\n (restrictClosest && restrictClosest !== panelsWrapper)\n ) {\n return;\n }\n\n isSwipeStarted = false;\n isSwipeCanceled = false;\n startCoords = getTouchCoords(event);\n moveCoords = null;\n swipeStartTime = Date.now();\n startTransform = currentTransform || -selected * panelsWrapper.clientWidth;\n isAnimated = false;\n\n if (hidePanelsTimeout) {\n clearTimeout(hidePanelsTimeout);\n }\n }\n\n function onTouchMove(event: TouchEvent): void {\n const coords = getTouchCoords(event);\n if (\n !startCoords ||\n moveCoords && moveCoords.x === coords.x && moveCoords.y === coords.y\n ) {\n return;\n }\n\n moveCoords = coords;\n const panelsWrapperWidth = panelsWrapper.clientWidth;\n if (isSwipeStarted) {\n currentTransform = coords.x - startCoords.x + startTransform;\n\n // Slowing down scroll on edges\n const scrollWidth = panelsWrapperWidth * items.length;\n if (currentTransform > 0) {\n currentTransform = currentTransform * panelsWrapperWidth / (currentTransform + panelsWrapperWidth * 3);\n } else if (-currentTransform + panelsWrapperWidth > scrollWidth) {\n let space = -currentTransform + panelsWrapperWidth - scrollWidth;\n space = space * panelsWrapperWidth / (space + panelsWrapperWidth * 3);\n currentTransform = panelsWrapperWidth - scrollWidth - space;\n }\n\n updateTransform(currentTransform * 100 / panelsWrapperWidth);\n } else if (Math.abs(coords.y - startCoords.y) > 10) {\n // Swipe is not started, so we cancel it because of vertical scroll\n isSwipeCanceled = true;\n } else if (!isSwipeCanceled && Math.abs(coords.x - startCoords.x) > 8) {\n initTabsSwipe();\n isSwipeStarted = true;\n startCoords = coords;\n updateTransform(-selected * 100);\n updateShowedPanels(true);\n }\n\n if (isSwipeStarted && event.cancelable) {\n event.preventDefault();\n }\n }\n\n function onTouchEnd(): void {\n isSwipeCanceled = false;\n startCoords = null;\n let newSelected = selected;\n if (!isSwipeStarted) {\n return;\n }\n isSwipeStarted = false;\n\n // 512px limit for big screens\n const panelsWrapperWidth = Math.min(512, panelsWrapper.clientWidth);\n const swipeDist = Math.abs(startTransform - currentTransform);\n const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n newSelected += (startTransform > currentTransform) ? 1 : -1;\n }\n\n if (newSelected >= items.length) {\n newSelected = items.length - 1;\n } else if (newSelected < 0) {\n newSelected = 0;\n }\n\n if (newSelected === selected) {\n // Scroll back to current tab\n currentTransform = -newSelected * panelsWrapperWidth;\n updateTransform(-newSelected * 100);\n hideNonVisiblePanels();\n } else {\n setSelected(newSelected);\n }\n }\n\n if (json.id && !hasError && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n setSelected(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = selected - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : selected;\n }\n\n setSelected(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = selected + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : selected;\n }\n\n setSelected(nextItem);\n }\n });\n }\n\n onDestroy(() => {\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('tabs', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customActions={'tabs'}\n >\n <div\n bind:this={tabsElem}\n class=\"{css.tabs__list} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n role=\"tablist\"\n style:--divkit-tabs-title-padding={titlePadding ? edgeInsertsToCss(titlePadding) : ''}\n style:--divkit-tabs-font-size={pxToEm(tabFontSize)}\n style:--divkit-tabs-paddings={tabPaddings}\n style:--divkit-tabs-line-height={tabLineHeight}\n style:--divkit-tabs-letter-spacing={tabLetterSpacing}\n style:--divkit-tabs-active-font-weight={tabActiveFontWeight || ''}\n style:--divkit-tabs-inactive-font-weight={tabInactiveFontWeight || ''}\n style:--divkit-tabs-active-text-color={tabActiveTextColor}\n style:--divkit-tabs-inactive-text-color={tabInactiveTextColor}\n style:--divkit-tabs-active-background-color={tabActiveBackground}\n style:--divkit-tabs-inactive-background-color={tabInactiveBackground}\n style:--divkit-tabs-border-radius={tabBorderRadius}\n style:--divkit-tabs-items-spacing={tabItemSpacing ? pxToEmWithUnits(tabItemSpacing) : ''}\n on:keydown={onTabKeydown}\n >\n {#each items as item, index}\n {@const isSelected = index === selected}\n\n <Actionable\n cls={genClassName('tabs__item', css, {\n selected: isSelected,\n actionable: Boolean(item.title_click_action)\n })}\n actions={item.title_click_action && !layoutParams?.fakeElement ? [item.title_click_action] : []}\n attrs={{\n id: `${instId}-tab-${index}`,\n 'aria-controls': `${instId}-panel-${index}`,\n role: 'tab',\n // eslint-disable-next-line no-nested-ternary\n tabindex: isSelected && !layoutParams?.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n 'aria-selected': isSelected ? 'true' : 'false'\n }}\n customAction={layoutParams?.fakeElement ? null : (event => selectItem(event, index))}\n >\n {item.title}\n </Actionable>\n {/each}\n </div>\n {#if $jsonSeparator}\n <div\n class={css.tabs__separator}\n style={makeStyle(separatorStyle)}\n ></div>\n {/if}\n <div\n class=\"{css.tabs__panels} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n bind:this={panelsWrapper}\n >\n <div\n class={genClassName('tabs__swiper', css, {\n inited: isSwipeInitialized,\n animated: isAnimated\n })}\n bind:this={swiperElem}\n on:touchstart={isSwipeEnabled ? onTouchStart : undefined}\n on:touchmove={isSwipeEnabled ? onTouchMove : undefined}\n on:touchend={isSwipeEnabled ? onTouchEnd : undefined}\n on:touchcancel={isSwipeEnabled ? onTouchEnd : undefined}\n >\n {#each items as item, index}\n <div\n class={genClassName('tabs__panel', css, {\n visible: visiblePanels[index]\n })}\n role=\"tabpanel\"\n id=\"{instId}-panel-{index}\"\n aria-labelledby=\"{instId}-tab-{index}\"\n style=\"left: {index * 100}%\"\n >\n {#if showedPanels[index]}\n <Unknown div={item.div} {templateContext} layoutParams={childLayoutParams} />\n {/if}\n </div>\n {/each}\n </div>\n </div>\n </Outer>\n{/if}\n","import type { CornersRadius } from '../types/border';\nimport { borderRadius } from './borderRadius';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctBorderRadius(\n cornersRadius: CornersRadius,\n defaultRadius: number,\n fontSize: number,\n defaultVal: string\n): string {\n const list = [\n cornersRadius['top-left'],\n cornersRadius['top-right'],\n cornersRadius['bottom-right'],\n cornersRadius['bottom-left']\n ];\n\n for (let i = 0; i < list.length; ++i) {\n if (list[i] && !isNonNegativeNumber(list[i])) {\n return defaultVal;\n }\n }\n\n return borderRadius(cornersRadius, defaultRadius, fontSize);\n}\n","export const ARROW_LEFT = 37;\nexport const ARROW_RIGHT = 39;\nexport const HOME = 36;\nexport const END = 35;\n","export { identity as linear } from '../internal/index.mjs';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","export function interpolateEasing(table: number[]) {\n return (t: number) => {\n if (t <= 0) {\n return 0;\n } else if (t >= 1) {\n return 1;\n }\n\n const x = t * table.length;\n const i = Math.floor(x);\n const p0 = table[i];\n const p1 = table[i + 1];\n const t2 = x - i;\n\n return p0 * t2 + p1 * (1 - t2);\n };\n}\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0021, 0.0045, 0.0071, 0.0100, 0.0131, 0.0165, 0.0202,\n 0.0242, 0.0284, 0.0330, 0.0378, 0.0429, 0.0483, 0.0540,\n 0.0601, 0.0664, 0.0731, 0.0800, 0.0872, 0.0948, 0.1026,\n 0.1108, 0.1192, 0.1279, 0.1369, 0.1461, 0.1556, 0.1653,\n 0.1753, 0.1855, 0.1958, 0.2064, 0.2171, 0.2279, 0.2389,\n 0.2500, 0.2612, 0.2725, 0.2839, 0.2952, 0.3067, 0.3181,\n 0.3295, 0.3410, 0.3524, 0.3637, 0.3750, 0.3863, 0.3974,\n 0.4085, 0.4195, 0.4304, 0.4412, 0.4519, 0.4624, 0.4729,\n 0.4832, 0.4934, 0.5034, 0.5133, 0.5231, 0.5327, 0.5422,\n 0.5516, 0.5608, 0.5699, 0.5788, 0.5876, 0.5963, 0.6048,\n 0.6132, 0.6214, 0.6295, 0.6375, 0.6453, 0.6530, 0.6606,\n 0.6680, 0.6754, 0.6825, 0.6896, 0.6965, 0.7034, 0.7101,\n 0.7166, 0.7231, 0.7295, 0.7357, 0.7418, 0.7479, 0.7538,\n 0.7596, 0.7653, 0.7709, 0.7764, 0.7818, 0.7871, 0.7923,\n 0.7974, 0.8024, 0.8073, 0.8122, 0.8169, 0.8216, 0.8261,\n 0.8306, 0.8350, 0.8394, 0.8436, 0.8478, 0.8518, 0.8558,\n 0.8598, 0.8636, 0.8674, 0.8711, 0.8747, 0.8783, 0.8818,\n 0.8852, 0.8886, 0.8919, 0.8951, 0.8983, 0.9014, 0.9044,\n 0.9074, 0.9103, 0.9131, 0.9159, 0.9187, 0.9213, 0.9240,\n 0.9265, 0.9290, 0.9315, 0.9339, 0.9362, 0.9385, 0.9408,\n 0.9430, 0.9451, 0.9472, 0.9492, 0.9512, 0.9532, 0.9551,\n 0.9569, 0.9587, 0.9605, 0.9622, 0.9638, 0.9655, 0.9670,\n 0.9686, 0.9701, 0.9715, 0.9729, 0.9743, 0.9756, 0.9769,\n 0.9782, 0.9794, 0.9805, 0.9817, 0.9828, 0.9838, 0.9848,\n 0.9858, 0.9868, 0.9877, 0.9886, 0.9894, 0.9902, 0.9910,\n 0.9917, 0.9924, 0.9931, 0.9937, 0.9943, 0.9949, 0.9954,\n 0.9959, 0.9964, 0.9969, 0.9973, 0.9977, 0.9980, 0.9983,\n 0.9986, 0.9989, 0.9991, 0.9993, 0.9995, 0.9997, 0.9998,\n 0.9999, 0.9999, 1.0000, 1.0000\n];\n\nexport const ease = interpolateEasing(table);\n","import { interpolateEasing } from './interpolateEasing';\n\nconst table = [\n 0.0005, 0.0020, 0.0045, 0.0078, 0.0119, 0.0168,\n 0.0224, 0.0286, 0.0355, 0.0429, 0.0508, 0.0592, 0.0681,\n 0.0774, 0.0870, 0.0969, 0.1072, 0.1177, 0.1285, 0.1395,\n 0.1507, 0.1621, 0.1736, 0.1853, 0.1970, 0.2089, 0.2208,\n 0.2328, 0.2448, 0.2569, 0.2689, 0.2810, 0.2930, 0.3050,\n 0.3170, 0.3289, 0.3408, 0.3526, 0.3644, 0.3760, 0.3876,\n 0.3991, 0.4105, 0.4218, 0.4330, 0.4440, 0.4550, 0.4658,\n 0.4765, 0.4871, 0.4975, 0.5078, 0.5180, 0.5280, 0.5379,\n 0.5477, 0.5573, 0.5668, 0.5761, 0.5853, 0.5944, 0.6033,\n 0.6120, 0.6206, 0.6291, 0.6374, 0.6456, 0.6537, 0.6616,\n 0.6693, 0.6770, 0.6845, 0.6918, 0.6990, 0.7061, 0.7130,\n 0.7199, 0.7265, 0.7331, 0.7395, 0.7458, 0.7520, 0.7580,\n 0.7640, 0.7698, 0.7755, 0.7810, 0.7865, 0.7918, 0.7971,\n 0.8022, 0.8072, 0.8121, 0.8169, 0.8216, 0.8262, 0.8307,\n 0.8351, 0.8394, 0.8436, 0.8477, 0.8517, 0.8557, 0.8595,\n 0.8633, 0.8669, 0.8705, 0.8740, 0.8775, 0.8808, 0.8841,\n 0.8873, 0.8904, 0.8934, 0.8964, 0.8993, 0.9022, 0.9049,\n 0.9076, 0.9103, 0.9129, 0.9154, 0.9178, 0.9202, 0.9226,\n 0.9249, 0.9271, 0.9293, 0.9314, 0.9335, 0.9355, 0.9375,\n 0.9394, 0.9413, 0.9431, 0.9449, 0.9466, 0.9483, 0.9500,\n 0.9516, 0.9532, 0.9547, 0.9562, 0.9576, 0.9591, 0.9605,\n 0.9618, 0.9631, 0.9644, 0.9657, 0.9669, 0.9681, 0.9692,\n 0.9703, 0.9714, 0.9725, 0.9736, 0.9746, 0.9756, 0.9765,\n 0.9775, 0.9784, 0.9793, 0.9802, 0.9810, 0.9818, 0.9826,\n 0.9834, 0.9842, 0.9849, 0.9856, 0.9863, 0.9870, 0.9877,\n 0.9883, 0.9890, 0.9896, 0.9902, 0.9908, 0.9913, 0.9919,\n 0.9924, 0.9930, 0.9935, 0.9940, 0.9944, 0.9949, 0.9954,\n 0.9958, 0.9963, 0.9967, 0.9971, 0.9975, 0.9979, 0.9983,\n 0.9986, 0.9990, 0.9993, 0.9997, 1.0000\n];\n\nexport const spring = interpolateEasing(table);\n","import { linear, cubicIn, cubicOut, cubicInOut } from 'svelte/easing';\nimport { AnyTransition, Interpolation } from '../types/base';\nimport { ease } from './easings/ease';\nimport { spring } from './easings/spring';\n\nconst EASING: Record<Interpolation, (t: number) => number> = {\n linear,\n ease,\n ease_in: cubicIn,\n ease_out: cubicOut,\n ease_in_out: cubicInOut,\n spring\n};\n\nconst DEFAULT_DURATION = 200;\nconst DEFAULT_DELAY = 0;\nconst DEFAULT_ALPHA = 0;\nconst DEFAULT_SCALE = 0;\n\nexport function calcMaxDuration(transitions: AnyTransition[]): number {\n return Math.max(...transitions.map(\n it =>\n (Number(it.duration) || DEFAULT_DURATION) +\n (Number(it.start_delay) || DEFAULT_DELAY)\n ));\n}\n\nexport interface TransitionProps {\n transitions: AnyTransition[];\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n direction: 'in' | 'out';\n maxDuration: number;\n alpha?: number;\n}\n\nexport function inOutTransition(node: HTMLElement, {\n transitions,\n elementBbox,\n rootBbox,\n direction,\n maxDuration,\n alpha\n}: TransitionProps) {\n const startAlpha = alpha ?? 1;\n\n return {\n duration: maxDuration,\n css: (t: number) => {\n const tMs = t * maxDuration;\n\n const parts: {\n active?: boolean;\n opacity?: number;\n translate?: string;\n scale?: string;\n }[] = transitions.map(it => {\n const delay = Number(it.start_delay) || DEFAULT_DELAY;\n const duration = Number(it.duration) || DEFAULT_DURATION;\n const relative = Math.max(0, Math.min(1, (tMs - delay) / duration));\n const oriented = direction === 'in' ? 1 - relative : relative;\n\n const easing = EASING[it.interpolator || 'ease_in_out'] || cubicInOut;\n const eased = easing(oriented);\n\n if (it.type === 'fade') {\n if (eased >= 1) {\n return {\n active: false,\n opacity: 0\n };\n }\n return {\n active: eased > 0 && eased < 1,\n opacity: (1 - eased) * startAlpha + eased * (it.alpha || DEFAULT_ALPHA)\n };\n } else if (it.type === 'slide') {\n const multiply = (it.edge === 'top' || it.edge === 'left') ? -1 : 1;\n const prop = (it.edge === 'top' || it.edge === 'bottom' || !it.edge) ? 'translateY' : 'translateX';\n let distance = it.distance?.value;\n\n if (distance === undefined) {\n if (it.edge === 'top' || it.edge === 'bottom' || !it.edge) {\n distance = Math.abs(\n rootBbox[it.edge === 'bottom' ? 'bottom' : 'top'] -\n elementBbox[it.edge === 'bottom' ? 'top' : 'bottom']\n );\n } else {\n distance = Math.abs(\n rootBbox[it.edge === 'left' ? 'left' : 'right'] -\n elementBbox[it.edge === 'left' ? 'right' : 'left']\n );\n }\n }\n\n const travel = distance * eased;\n\n return {\n active: eased > 0 && eased < 1,\n translate: `${prop}(${travel * multiply}px)`\n };\n } else if (it.type === 'scale') {\n const scale = (1 - eased) + eased * (it.scale || DEFAULT_SCALE);\n const pivotX = it.pivot_x ?? .5;\n const pivotY = it.pivot_y ?? .5;\n const offsetX = (1 - scale) * elementBbox.width * pivotX;\n const offsetY = (1 - scale) * elementBbox.height * pivotY;\n\n return {\n active: eased > 0 && eased < 1,\n scale: `translate(${offsetX}px, ${offsetY}px) scale(${scale})`\n };\n }\n\n return {};\n });\n\n const opacity = (parts\n .map(it => it.opacity)\n .filter(it => it !== undefined) as number[])\n .reduce((acc: number, item: number) => acc * item, 1);\n\n const translate = parts\n .map(it => it.translate)\n .filter(it => it !== undefined)\n .join(' ');\n\n const anyScale = parts\n .map(it => it.scale)\n .filter(it => it !== undefined)\n .join(' ');\n\n const activeScale = parts\n .filter(it => it.active)\n .map(it => it.scale)\n .filter(it => it !== undefined);\n\n const scale = activeScale.length ? activeScale[activeScale.length - 1] : anyScale;\n\n const transform = [translate, scale].filter(Boolean).join(' ');\n\n return `transform:${transform || 'none'};opacity:${opacity}`;\n }\n };\n}\n","export function lerp(a: number, b: number, t: number): number {\n return a * (1 - t) + b * t;\n}\n","import { linear, cubicIn, cubicOut, cubicInOut } from 'svelte/easing';\nimport type { ChangeBoundsTransition, Interpolation } from '../types/base';\nimport { ease } from './easings/ease';\nimport { spring } from './easings/spring';\nimport { lerp } from './lerp';\n\nconst EASING: Record<Interpolation, (t: number) => number> = {\n linear,\n ease,\n ease_in: cubicIn,\n ease_out: cubicOut,\n ease_in_out: cubicInOut,\n spring\n};\n\nconst DEFAULT_DURATION = 200;\nconst DEFAULT_DELAY = 0;\n\nexport interface TransitionProps {\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n}\n\nexport function changeBoundsTransition(node: HTMLElement, {\n rootBbox,\n beforeBbox,\n afterBbox,\n transition\n}: TransitionProps) {\n return {\n delay: transition.start_delay ?? DEFAULT_DELAY,\n duration: transition.duration ?? DEFAULT_DURATION,\n easing: (transition.interpolator && transition.interpolator in EASING) ?\n EASING[transition.interpolator] :\n cubicInOut,\n css: (t: number) => {\n return [\n `top:${lerp(beforeBbox.top, afterBbox.top, t) - rootBbox.top}px`,\n `left:${lerp(beforeBbox.left, afterBbox.left, t) - rootBbox.left}px`,\n `width:${lerp(beforeBbox.width, afterBbox.width, t)}px`,\n `height:${lerp(beforeBbox.height, afterBbox.height, t)}px`\n ].join(';');\n }\n };\n}\n","import { AnyTransition, AppearanceTransition } from '../types/base';\n\nexport function flattenTransition(transition: AppearanceTransition): AnyTransition[] {\n const res: AnyTransition[] = [];\n\n if (transition.type === 'set') {\n (transition.items || []).forEach(item => {\n res.push(...flattenTransition(item));\n });\n } else {\n res.push(transition);\n }\n\n return res;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"state\":\"divkit-b8efc\",\"state__animations\":\"divkit-adaae\",\"state__animation-child\":\"divkit-eb860\",\"state__animation-child-inner\":\"divkit-e08c6\"};","<script lang=\"ts\">\n import { setContext, getContext, tick, onDestroy } from 'svelte';\n\n import css from './State.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivStateData, State } from '../../types/state';\n import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n import type { ChangeBoundsTransition } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../../context/state';\n import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n import { flattenTransition } from '../../utils/flattenTransition';\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n\n export let json: Partial<DivStateData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n let animationRoot: HTMLElement | undefined;\n let transitionChangeBoxes: Map<string, DOMRect> = new Map();\n let childrenIds = new Set<string>();\n\n $: if (json) {\n childrenIds = new Set<string>();\n }\n\n let hasError = false;\n $: items = json.states || [];\n $: {\n if (!items?.length) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n } else {\n hasError = false;\n }\n }\n\n let childStateMap: Map<string, StateInterface> | null = null;\n\n interface AnimationItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n elementBbox: DOMRect;\n rootBbox: DOMRect;\n transitions: AnyTransition[];\n alpha?: number;\n width: number;\n height: number;\n offsetTop: number;\n offsetLeft: number;\n direction: 'in' | 'out';\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n interface AnimationItemWithMaxDuration extends AnimationItem {\n maxDuration: number;\n }\n interface ChangeBoundsItem {\n json: DivBaseData;\n templateContext: TemplateContext;\n rootBbox: DOMRect;\n beforeBbox: DOMRect;\n afterBbox: DOMRect;\n transition: ChangeBoundsTransition;\n resolvePromise?: (val?: void) => void;\n node: HTMLElement;\n }\n let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n\n interface ChildWithTransition {\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: AppearanceTransition;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n interface ChildWithTransitionChange {\n id: string;\n json: DivBaseData;\n templateContext: TemplateContext;\n transitions: TransitionChange;\n node: HTMLElement;\n resolvePromise?: (val?: void) => void;\n }\n let childrenWithTransitionIn: ChildWithTransition[] = [];\n let childrenWithTransitionOut: ChildWithTransition[] = [];\n let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n function haveFadeTransition(list: AnyTransition[]): boolean {\n return list.some(it => it.type === 'fade');\n }\n\n function getItemAnimation(rootBbox: DOMRect, child: ChildWithTransition, direction: 'in' | 'out'): AnimationItem {\n let { json, templateContext, transitions, node } = child;\n json = rootCtx.getJsonWithVars(json) as DivBaseData;\n transitions = rootCtx.getJsonWithVars(transitions) as AppearanceTransition;\n\n const transitionsList: AnyTransition[] = flattenTransition(transitions);\n const bbox = node.getBoundingClientRect();\n\n return {\n json: {\n ...json,\n margins: undefined,\n alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n },\n templateContext,\n elementBbox: bbox,\n rootBbox,\n transitions: transitionsList,\n alpha: json.alpha,\n width: bbox.width,\n height: bbox.height,\n offsetTop: bbox.top - rootBbox.top,\n offsetLeft: bbox.left - rootBbox.left,\n direction,\n resolvePromise: child.resolvePromise,\n node: child.node\n };\n }\n\n function getTransitionChange(transitionOrSet: TransitionChange): ChangeBoundsTransition | null {\n if (transitionOrSet.type === 'change_bounds') {\n return transitionOrSet;\n } else if (transitionOrSet.type === 'set') {\n return getTransitionChange(transitionOrSet.items[0]);\n }\n return null;\n }\n\n const stateId = json.div_id || json.id;\n\n if (!stateId) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n } else if (!layoutParams?.fakeElement) {\n stateCtx.registerInstance(stateId, {\n async setState(stateId: string) {\n if (selectedId === stateId) {\n return;\n }\n\n rootCtx.setRunning('stateChange', true);\n\n const wasIds = new Set(childrenIds);\n\n animationList.forEach(it => {\n if (it.resolvePromise) {\n it.resolvePromise();\n }\n });\n animationList = [];\n let transitionsOutToRun: AnimationItem[] = [];\n if (animationRoot) {\n const rootBbox = animationRoot.getBoundingClientRect();\n transitionsOutToRun = childrenWithTransitionOut\n .map(it => getItemAnimation(rootBbox, it, 'out'));\n }\n childrenWithTransitionChange.forEach(child => {\n transitionChangeBoxes.set(child.id, child.node.getBoundingClientRect());\n });\n childrenWithTransitionIn = [];\n childrenWithTransitionOut = [];\n childrenWithTransitionChange = [];\n\n const newState = items.find(it => it.state_id === stateId) || null;\n if (newState) {\n selectedId = stateId;\n selectedState = newState;\n } else {\n rootCtx.logError(wrapError(new Error('Cannot find state with id'), {\n additional: {\n stateId\n }\n }));\n }\n\n await tick();\n\n if (!animationRoot) {\n return;\n }\n const rootBbox = animationRoot.getBoundingClientRect();\n\n let transitionsInToRun: AnimationItem[] =\n childrenWithTransitionIn.filter(it => {\n if (it.json.id && !wasIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n })\n .map(it => getItemAnimation(rootBbox, it, 'in'));\n\n transitionsOutToRun = transitionsOutToRun.filter(it => {\n if (it.json.id && !childrenIds.has(it.json.id)) {\n return true;\n }\n it.resolvePromise?.();\n return false;\n });\n\n const inOutList: AnimationItem[] = transitionsOutToRun.concat(transitionsInToRun);\n const maxDuration = inOutList.reduce((acc: number, item: AnimationItem) => {\n return Math.max(\n acc,\n calcMaxDuration(item.transitions)\n );\n }, 0);\n\n const changeList: ChangeBoundsItem[] = childrenWithTransitionChange\n .filter(child => transitionChangeBoxes.has(child.id))\n .map(child => {\n const res: ChangeBoundsItem = {\n json: {\n ...child.json,\n margins: undefined,\n width: { type: 'match_parent' },\n height: { type: 'match_parent' },\n },\n templateContext: child.templateContext,\n rootBbox,\n beforeBbox: transitionChangeBoxes.get(child.id) as DOMRect,\n afterBbox: child.node.getBoundingClientRect(),\n node: child.node,\n transition: getTransitionChange(child.transitions) as ChangeBoundsTransition,\n resolvePromise: child.resolvePromise\n };\n\n return res;\n });\n\n animationList = [\n ...inOutList.map(it => {\n return {\n ...it,\n maxDuration\n };\n }),\n ...changeList\n ];\n\n transitionChangeBoxes.clear();\n\n rootCtx.setRunning('stateChange', false);\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n rootCtx.logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n return undefined;\n }\n });\n\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n rootCtx.logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement,\n direction: 'in' | 'out'\n ) {\n if (!animationRoot) {\n return Promise.resolve();\n }\n\n const rootBbox = animationRoot.getBoundingClientRect();\n const item: AnimationItem = getItemAnimation(\n rootBbox,\n {\n json,\n templateContext,\n transitions,\n node\n },\n direction\n );\n\n const maxDuration = calcMaxDuration(item.transitions);\n const itemWithMaxDuration: AnimationItemWithMaxDuration = {\n ...item,\n maxDuration\n };\n animationList = [\n ...animationList.filter(it => it.node !== item.node),\n itemWithMaxDuration\n ];\n\n return new Promise<void>(resolve => {\n itemWithMaxDuration.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionIn(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionIn.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionOut(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: AppearanceTransition,\n node: HTMLElement\n ) {\n const item: ChildWithTransition = {\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionOut.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n registerChildWithTransitionChange(\n json: DivBaseData,\n templateContext: TemplateContext,\n transitions: TransitionChange,\n node: HTMLElement\n ) {\n const id = json.id;\n\n if (!id) {\n return Promise.resolve();\n }\n\n const item: ChildWithTransitionChange = {\n id,\n json,\n templateContext,\n transitions,\n node\n };\n childrenWithTransitionChange.push(item);\n\n return new Promise<void>(resolve => {\n item.resolvePromise = resolve;\n });\n },\n hasTransitionChange(id?: string) {\n if (!id) {\n return false;\n }\n\n return transitionChangeBoxes.has(id);\n },\n registerChild(id: string): void {\n childrenIds.add(id);\n },\n unregisterChild(id: string): void {\n childrenIds.delete(id);\n }\n });\n }\n\n let selectedId: string | undefined;\n let selectedState: State | null = null;\n const jsonDefaultStateId = rootCtx.getJsonWithVars(json.default_state_id);\n let inited = false;\n function initDefaultState(items: State[]): void {\n if (inited) {\n return;\n }\n inited = true;\n\n if (items.length) {\n if (jsonDefaultStateId) {\n selectedId = jsonDefaultStateId;\n selectedState = items.find(it => it.state_id === selectedId) || null;\n if (!selectedState) {\n rootCtx.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n additional: {\n selectedId\n }\n }));\n }\n } else {\n selectedState = items[0];\n selectedId = selectedState.state_id;\n }\n }\n }\n $: initDefaultState(items);\n\n function onOutro(item: AnimationItem | ChangeBoundsItem): void {\n animationList = animationList.filter(it => it !== item);\n\n if (item.resolvePromise) {\n item.resolvePromise();\n }\n }\n\n onDestroy(() => {\n if (stateId && !layoutParams?.fakeElement) {\n stateCtx.unregisterInstance(stateId);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={css.state}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n {#if selectedState?.div}\n {#key selectedState}\n <Unknown div={selectedState.div} templateContext={templateContext} />\n {/key}\n {/if}\n <div class={css.state__animations} bind:this={animationRoot} aria-hidden=\"true\">\n {#each animationList as item (item)}\n {#if 'direction' in item}\n <div\n class={css['state__animation-child']}\n style=\"left:{item.offsetLeft}px;top:{item.offsetTop}px;width:{item.width}px;height:{item.height}px\"\n in:inOutTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {:else}\n <div\n class={css['state__animation-child']}\n in:changeBoundsTransition={item}\n on:introend={() => onOutro(item)}\n >\n <div class={css['state__animation-child-inner']}>\n <Unknown div={item.json} templateContext={item.templateContext} layoutParams={{ fakeElement: true }} />\n </div>\n </div>\n {/if}\n {/each}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"pager\":\"divkit-c5feb\",\"pager__items\":\"divkit-f6987\",\"pager__item\":\"divkit-feca7\",\"pager_orientation_horizontal\":\"divkit-b0a1c\",\"pager_orientation_vertical\":\"divkit-f772f\"};","<script lang=\"ts\">\n import { getContext, onDestroy, onMount } from 'svelte';\n\n import css from './Pager.module.css';\n import rootCss from '../Root.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import type { DivPagerData } from '../../types/pager';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { Orientation } from '../../types/orientation';\n import type { PagerData } from '../../stores/pagers';\n import type { Overflow, SwitchElements } from '../../types/switch-elements';\n\n import Outer from '../utilities/Outer.svelte';\n import Unknown from '../utilities/Unknown.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { makeStyle } from '../../utils/makeStyle';\n import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n import { correctEdgeInserts } from '../../utils/correctEdgeInserts';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivPagerData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const instId = rootCtx.genId('pager');\n\n let pagerItemsWrapper: HTMLElement;\n let mounted = false;\n\n let hasItemsError = false;\n $: {\n if (!json.items?.length || !Array.isArray(json.items)) {\n hasItemsError = true;\n rootCtx.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"pager\"')));\n } else {\n hasItemsError = false;\n }\n }\n\n $: items = (!hasItemsError && json.items || []).map(item => {\n let childJson: DivBaseData = item as DivBaseData;\n let childContext: TemplateContext = templateContext;\n\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n return {\n json: childJson,\n templateContext: childContext,\n origJson: item\n };\n });\n\n let currentItem = 0;\n let prevSelectedItem = 0;\n\n let hasLayoutModeError = false;\n $: jsonLayoutMode = rootCtx.getDerivedFromVars(json.layout_mode);\n $: {\n if (!$jsonLayoutMode) {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed') {\n hasLayoutModeError = true;\n rootCtx.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n } else {\n hasLayoutModeError = false;\n }\n }\n\n let orientation: Orientation = 'horizontal';\n $: jsonOrientation = rootCtx.getDerivedFromVars(json.orientation);\n $: {\n orientation = correctGeneralOrientation($jsonOrientation, orientation);\n }\n\n let itemSpacing = '';\n $: jsonItemSpacing = rootCtx.getDerivedFromVars(json.item_spacing);\n $: {\n const val = $jsonItemSpacing?.value;\n if (val && isNonNegativeNumber(val)) {\n itemSpacing = pxToEm(val || 0);\n }\n }\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let padding = '';\n $: {\n padding = correctEdgeInserts($jsonPaddings, padding);\n }\n\n $: jsonRestrictParentScroll = rootCtx.getDerivedFromVars(json.restrict_parent_scroll);\n\n $: gridAuto = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n let sizeVal = '';\n\n $: {\n if ($jsonLayoutMode?.type === 'fixed') {\n const paddings = orientation === 'horizontal' ?\n pxToEmWithUnits((json.paddings?.left || 0) + (json.paddings?.right || 0)) :\n pxToEmWithUnits((json.paddings?.top || 0) + (json.paddings?.bottom || 0));\n const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value;\n sizeVal = neighbourPageWidth ?\n `calc(100% + ${paddings} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})` :\n '100%';\n } else if ($jsonLayoutMode?.type === 'percentage') {\n const pageWidth = $jsonLayoutMode.page_width?.value;\n sizeVal = `${Number(pageWidth)}%`;\n }\n }\n\n $: style = {\n 'grid-gap': itemSpacing,\n padding,\n [gridAuto]: sizeVal\n };\n\n $: mods = {\n orientation\n };\n\n $: hasError = hasItemsError || hasLayoutModeError;\n\n function checkIsFullyIntersecting(scroller: DOMRect, item: DOMRect): boolean {\n if (orientation === 'horizontal') {\n return item.left >= scroller.left && item.right <= scroller.right;\n }\n\n return item.top >= scroller.top && item.bottom <= scroller.bottom;\n }\n\n function calculateCurrentElementIndex(): number {\n const pagerElements = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n const wrapperRect = pagerItemsWrapper.getBoundingClientRect();\n\n const firstFullyVisibleElement = pagerElements.findIndex(el =>\n checkIsFullyIntersecting(wrapperRect, el.getBoundingClientRect())\n );\n\n if (firstFullyVisibleElement !== -1) {\n return firstFullyVisibleElement;\n }\n\n return currentItem;\n }\n\n function onScroll(): void {\n if (!mounted) {\n // Already destroyed\n return;\n }\n\n const nextItem = calculateCurrentElementIndex();\n if (nextItem !== currentItem) {\n currentItem = nextItem;\n }\n }\n\n const onScrollDebounced = debounce(onScroll, 50);\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n\n function pagerDataUpdate(size: number, currentItem: number): void {\n const pagerId = json.id;\n if (pagerId) {\n const newPagersMap = new Map($pagers);\n $pagers = newPagersMap.set(pagerId, { instId, size, currentItem, scrollToPagerItem });\n }\n }\n\n function runSelectedActions(currentItem: number): void {\n // prevent initial actions execution\n if (currentItem === prevSelectedItem) {\n return;\n }\n prevSelectedItem = currentItem;\n\n const actions = rootCtx.getJsonWithVars(items[currentItem].json?.selected_actions);\n if (!actions?.length) {\n return;\n }\n rootCtx.execAnyActions(actions);\n }\n\n $: pagerDataUpdate(items.length, currentItem);\n\n $: runSelectedActions(currentItem);\n\n function scrollToPagerItem(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const isHorizontal = orientation === 'horizontal';\n const nextPagerItem = pagerItemsWrapper.children[index] as HTMLElement;\n const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n pagerItemsWrapper.scroll({\n [scrollDirection]: nextPagerItem[elementOffset],\n behavior\n });\n currentItem = index;\n }\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.registerInstance<SwitchElements>(json.id, {\n setCurrentItem(item: number) {\n if (item < 0 || item > items.length - 1) {\n throw new Error('Item is out of range in \"set-current-item\" action');\n }\n\n scrollToPagerItem(item);\n },\n setPreviousItem(overflow: Overflow) {\n let previousItem = currentItem - 1;\n\n if (previousItem < 0) {\n previousItem = overflow === 'ring' ? items.length - 1 : currentItem;\n }\n\n scrollToPagerItem(previousItem);\n },\n setNextItem(overflow: Overflow) {\n let nextItem = currentItem + 1;\n\n if (nextItem > items.length - 1) {\n nextItem = overflow === 'ring' ? 0 : currentItem;\n }\n\n scrollToPagerItem(nextItem);\n }\n });\n }\n\n onMount(() => {\n mounted = true;\n\n const isIndicatorExist = Boolean(document.getElementById(`${instId}-tab-0`));\n\n if (isIndicatorExist) {\n const pagerItems = [...pagerItemsWrapper.children] as HTMLElement[];\n\n for (const [index, item] of pagerItems.entries()) {\n item.setAttribute('role', 'tabpanel');\n item.setAttribute('id', `${instId}-panel-${index}`);\n item.setAttribute('aria-labelledby', `${instId}-tab-${index}`);\n }\n }\n });\n\n onDestroy(() => {\n mounted = false;\n\n if (json.id && !layoutParams?.fakeElement) {\n rootCtx.unregisterInstance(json.id);\n }\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('pager', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n customPaddings={true}\n >\n <div\n class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n style={makeStyle(style)}\n bind:this={pagerItemsWrapper}\n on:scroll={onScrollDebounced}\n >\n {#each items as item}\n <div class={css.pager__item}>\n <Unknown\n div={item.json}\n templateContext={item.templateContext}\n origJson={item.origJson}\n layoutParams={layoutParams?.fakeElement ? { fakeElement: true } : undefined}\n />\n </div>\n {/each}\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"divkit-d8e3f\",\"indicator__scroller\":\"divkit-b5db0\",\"indicator__items\":\"divkit-d5d94\",\"indicator__item\":\"divkit-f6629\",\"indicator_placement_default\":\"divkit-c1670\",\"indicator__item_active\":\"divkit-b39cd\",\"indicator_placement_stretch\":\"divkit-b6bd3\"};","<script lang=\"ts\">\n import { getContext, tick } from 'svelte';\n\n import rootCss from '../Root.module.css';\n import css from './Indicator.module.css';\n\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivIndicatorData } from '../../types/indicator';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { PagerData } from '../../stores/pagers';\n import type { MaybeMissing } from '../../expressions/json';\n import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n\n import Outer from '../utilities/Outer.svelte';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n import { pxToEm } from '../../utils/pxToEm';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { ARROW_LEFT, ARROW_RIGHT, END, HOME } from '../../utils/keyboard/codes';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { correctColor } from '../../utils/correctColor';\n\n export let json: Partial<DivIndicatorData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const AVAIL_SHAPES = ['rounded_rectangle', 'circle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n $: jsonShape = rootCtx.getDerivedFromVars(json.shape);\n $: jsonActiveItemColor = rootCtx.getDerivedFromVars(json.active_item_color);\n $: jsonInactiveItemColor = rootCtx.getDerivedFromVars(json.inactive_item_color);\n $: jsonActiveItemSize = rootCtx.getDerivedFromVars(json.active_item_size);\n $: jsonActiveShape = rootCtx.getDerivedFromVars(json.active_shape);\n $: jsonInactiveShape = rootCtx.getDerivedFromVars(json.inactive_shape);\n let activeStyle: DrawableStyle = {\n width: 13,\n height: 13,\n borderRadius: 6.5,\n background: '#ffdc60'\n };\n let inactiveStyle: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#33919cb5'\n };\n $: {\n if ($jsonActiveShape) {\n activeStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonActiveShape\n }, AVAIL_SHAPES, activeStyle);\n }\n if ($jsonInactiveShape) {\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonInactiveShape\n }, AVAIL_SHAPES, inactiveStyle);\n }\n if (!$jsonActiveShape && !$jsonInactiveShape && $jsonShape) {\n const activeSize = correctPositiveNumber($jsonActiveItemSize, 1.3);\n inactiveStyle = correctDrawableStyle<DrawableStyle>({\n type: 'shape_drawable',\n shape: $jsonShape,\n color: inactiveStyle.background\n }, AVAIL_SHAPES, inactiveStyle);\n inactiveStyle.background = correctColor($jsonInactiveItemColor, 1, inactiveStyle.background);\n activeStyle = {\n ...inactiveStyle,\n width: inactiveStyle.width * activeSize,\n height: inactiveStyle.height * activeSize,\n borderRadius: inactiveStyle.borderRadius * activeSize,\n background: activeStyle.background\n };\n activeStyle.background = correctColor($jsonActiveItemColor, 1, activeStyle.background);\n }\n }\n\n $: jsonSpaceBetweenCenters = rootCtx.getDerivedFromVars(json.space_between_centers);\n $: jsonItemsPlacement = rootCtx.getDerivedFromVars(json.items_placement);\n let placement: 'default' | 'stretch' = 'default';\n let spaceBetweenCenters = 15;\n let maxVisibleItems = 10;\n let itemSpacing = 5;\n $: if ($jsonItemsPlacement && ($jsonItemsPlacement.type === 'default' || $jsonItemsPlacement.type === 'stretch')) {\n placement = $jsonItemsPlacement.type;\n if (placement === 'default') {\n spaceBetweenCenters = correctNonNegativeNumber(\n ($jsonItemsPlacement as MaybeMissing<DivIndicatorDefaultItemPlacement>).space_between_centers?.value,\n spaceBetweenCenters\n );\n } else if (placement === 'stretch') {\n const placement = $jsonItemsPlacement as MaybeMissing<DivIndicatorStretchItemPlacement>;\n maxVisibleItems = correctPositiveNumber(placement.max_visible_items, maxVisibleItems);\n itemSpacing = correctNonNegativeNumber(placement.item_spacing?.value, itemSpacing);\n }\n } else {\n placement = 'default';\n if ($jsonSpaceBetweenCenters) {\n spaceBetweenCenters = correctNonNegativeNumber($jsonSpaceBetweenCenters.value, spaceBetweenCenters);\n }\n }\n\n let scroller: HTMLElement;\n let indicatorItemsWrapper: HTMLElement;\n let pagerData: PagerData;\n\n $: pagers = rootCtx.getStore<Map<string, PagerData>>('pagers');\n $: {\n onPagerDataUpdate($pagers);\n }\n\n async function onPagerDataUpdate(pagersMap: Map<string, PagerData>): Promise<void> {\n if (json.pager_id && pagersMap.has(json.pager_id)) {\n pagerData = pagersMap.get(json.pager_id) as PagerData;\n\n await tick();\n\n if (indicatorItemsWrapper) {\n // if not destroyed yet\n\n const currentItemOffsetLeft =\n (indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement).offsetLeft;\n\n scroller.scroll({\n left: currentItemOffsetLeft - scroller.clientWidth / 2,\n behavior: 'smooth'\n });\n }\n }\n }\n\n function onIndicatorItemClick(index: number) {\n if (index !== pagerData.currentItem) {\n pagerData.scrollToPagerItem(index);\n }\n }\n\n function onIndicatorItemKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return;\n }\n\n const { size, currentItem } = pagerData;\n if (event.which === ARROW_LEFT) {\n const prevItem = currentItem - 1 < 0 ? currentItem : currentItem - 1;\n moveFocus(prevItem);\n } else if (event.which === ARROW_RIGHT) {\n const nextItem = currentItem + 1 >= size ? currentItem : currentItem + 1;\n moveFocus(nextItem);\n } else if (event.which === HOME) {\n moveFocus(0);\n } else if (event.which === END) {\n moveFocus(size - 1);\n } else {\n return;\n }\n\n event.preventDefault();\n }\n\n async function moveFocus(index: number) {\n pagerData.scrollToPagerItem(index);\n\n await tick();\n\n const activeItem = indicatorItemsWrapper.querySelector(`.${css.indicator__item_active}`) as HTMLElement | null;\n if (activeItem) {\n activeItem.focus();\n }\n }\n\n $: mods = {\n placement\n };\n</script>\n\n<Outer\n cls={genClassName('indicator', css, mods)}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n>\n <div\n class={css.indicator__scroller}\n bind:this={scroller}\n >\n <div\n class={css.indicator__items}\n role=\"tablist\"\n bind:this={indicatorItemsWrapper}\n style:margin={placement === 'default' ? `0 ${pxToEm(Math.max(0, activeStyle.width - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-inactive-width={pxToEm(inactiveStyle.width)}\n style:--divkit-indicator-inactive-height={pxToEm(inactiveStyle.height)}\n style:--divkit-indicator-inactive-border-radius={pxToEm(inactiveStyle.borderRadius)}\n style:--divkit-indicator-inactive-background={inactiveStyle.background || ''}\n style:--divkit-indicator-inactive-box-shadow={inactiveStyle.boxShadow || ''}\n style:--divkit-indicator-active-width={pxToEm(activeStyle.width)}\n style:--divkit-indicator-active-height={pxToEm(activeStyle.height)}\n style:--divkit-indicator-active-border-radius={pxToEm(activeStyle.borderRadius)}\n style:--divkit-indicator-active-background={activeStyle.background || ''}\n style:--divkit-indicator-active-box-shadow={activeStyle.boxShadow || ''}\n style:--divkit-indicator-active-scale={activeStyle.width / inactiveStyle.width}\n style:--divkit-indicator-default-margin={placement === 'default' ? `0 ${pxToEm((spaceBetweenCenters - inactiveStyle.width) / 2)}` : ''}\n style:--divkit-indicator-stretch-margin={placement === 'stretch' ? pxToEm(itemSpacing) : ''}\n style:--divkit-indicator-stretch-max-count={placement === 'stretch' ? maxVisibleItems : ''}\n style:--divkit-indicator-stretch-max-spacer={placement === 'stretch' ? pxToEm((maxVisibleItems - 1) * itemSpacing) : ''}\n >\n {#if pagerData}\n {#each Array(pagerData.size) as _, index}\n {@const isActiveItem = index === pagerData.currentItem}\n <div\n class=\"{genClassName('indicator__item', css, { active: isActiveItem })} {rootCss.root__clickable}\"\n role=\"tab\"\n id=\"{pagerData.instId}-tab-{index}\"\n aria-controls=\"{pagerData.instId}-panel-{index}\"\n aria-selected={isActiveItem ? 'true' : 'false'}\n tabindex={isActiveItem ? 0 : -1}\n on:click={() => onIndicatorItemClick(index)}\n on:keydown={onIndicatorItemKeydown}\n ></div>\n {/each}\n {/if}\n </div>\n </div>\n</Outer>\n","// extracted by mini-css-extract-plugin\nexport default {\"slider\":\"divkit-ef4f7\",\"slider__input\":\"divkit-d1d65\",\"slider__input_secondary\":\"divkit-c7980\",\"slider__thumb\":\"divkit-f3453\",\"slider__thumb_secondary\":\"divkit-e1984\",\"slider__tracks-wrapper\":\"divkit-f7338\",\"slider__tracks-inner\":\"divkit-ac903\",\"slider__track\":\"divkit-e956c\",\"slider__active-track\":\"divkit-ec5bf\",\"slider__thumb-text\":\"divkit-c4af5\",\"slider__thumb-text_secondary\":\"divkit-d8821\",\"slider__tick\":\"divkit-bd9bf\",\"slider__tick_active\":\"divkit-d8ce2\",\"slider__tick_inactive\":\"divkit-e71e7\"};","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { fontWeightToCss } from './fontWeightToCss';\nimport { pxToEm } from './pxToEm';\n\nexport interface TransformedSliderTextStyle {\n fontSize: string;\n fontWeight: number | undefined;\n textColor: string;\n offset?: {\n x: number;\n y: number;\n };\n}\n\nexport function correctSliderTextStyle(\n textStyle: MaybeMissing<SliderTextStyle> | undefined,\n defaultValue: TransformedSliderTextStyle | undefined\n): TransformedSliderTextStyle | undefined {\n if (!textStyle || !textStyle.font_size) {\n return defaultValue;\n }\n\n const offset = textStyle.offset;\n const convertedColor = textStyle.text_color && correctColor(textStyle.text_color) || '#000';\n const fontWeight = fontWeightToCss(textStyle.font_weight);\n\n if (\n isPositiveNumber(textStyle.font_size) &&\n convertedColor !== 'transparent'\n ) {\n const res: TransformedSliderTextStyle = {\n fontSize: pxToEm(textStyle.font_size),\n fontWeight,\n textColor: convertedColor\n };\n\n if (typeof offset?.x?.value === 'number' && typeof offset?.y?.value === 'number') {\n res.offset = {\n x: offset.x.value,\n y: offset.y.value\n };\n }\n\n return res;\n }\n}\n","export function clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val));\n}\n","export const MAX_INT = 2147483647;\nexport const MIN_INT = -2147483648;\n\nexport const MAX_NUMBER = Number.MAX_VALUE;\nexport const MIN_NUMBER = Number.MIN_VALUE;\n\nexport const STRING = 'string';\nexport const INTEGER = 'integer';\nexport const NUMBER = 'number';\nexport const BOOLEAN = 'boolean';\nexport const COLOR = 'color';\nexport const URL = 'url';\nexport const DATETIME = 'datetime';\n","import { writable } from 'svelte/store';\nimport type { Subscriber, Unsubscriber, Writable } from 'svelte/types/runtime/store';\nimport type { EvalValue } from './eval';\nimport { MAX_INT, MIN_INT } from './const';\nimport { parseColor } from '../utils/correctColor';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url';\nexport type VariableValue = string | number | boolean;\n\nexport abstract class Variable<ValueType = any, TypeName = VariableType> {\n protected name: string;\n protected value: ValueType;\n protected store?: Writable<ValueType>;\n\n constructor(name: string, value: ValueType) {\n const val = this.convertValue(value);\n\n this.name = name;\n this.value = val;\n }\n\n getName(): string {\n return this.name;\n }\n\n protected abstract convertValue(value: unknown): ValueType;\n\n subscribe(cb: Subscriber<ValueType>): Unsubscriber {\n if (!this.store) {\n this.store = writable(this.value);\n }\n\n return this.store.subscribe(cb);\n }\n\n set(val: string): void {\n const value = this.fromString(val);\n\n this.setValue(value);\n }\n\n protected abstract fromString(val: string): ValueType;\n\n setValue(val: ValueType): void {\n const converted = this.convertValue(val);\n\n this.value = converted;\n\n if (this.store) {\n this.store.set(converted);\n }\n }\n\n getValue(): ValueType {\n return this.value;\n }\n\n abstract getType(): TypeName;\n}\n\nexport class StringVariable extends Variable<string, 'string'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'string' {\n return 'string';\n }\n}\n\nexport class IntegerVariable extends Variable<number, 'integer'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n value > MAX_INT ||\n value < MIN_INT ||\n value !== Math.round(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'integer' {\n return 'integer';\n }\n}\n\nexport class NumberVariable extends Variable<number, 'number'> {\n protected convertValue(value: unknown) {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n !isFinite(value)\n ) {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n const res = Number(val);\n\n return this.convertValue(res);\n }\n\n getType(): 'number' {\n return 'number';\n }\n}\n\nexport class BooleanVariable extends Variable<number, 'boolean'> {\n protected convertValue(value: unknown) {\n if (value !== 1 && value !== 0 && value !== true && value !== false) {\n throw new Error('Incorrect variable value');\n }\n\n return Number(value);\n }\n\n protected fromString(val: string) {\n if (val === '1' || val === 'true') {\n return 1;\n } else if (val === '0' || val === 'false') {\n return 0;\n }\n\n throw new Error('Incorrect variable value');\n }\n\n getType(): 'boolean' {\n return 'boolean';\n }\n}\n\nexport class ColorVariable extends Variable<string, 'color'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string' || !parseColor(value)) {\n throw new Error('Incorrect variable value');\n }\n\n // save input value, some expression tests rely on that\n return value;\n }\n\n protected fromString(val: string) {\n return this.convertValue(val);\n }\n\n getType(): 'color' {\n return 'color';\n }\n}\n\nexport class UrlVariable extends Variable<string, 'url'> {\n protected convertValue(value: unknown) {\n if (typeof value !== 'string') {\n throw new Error('Incorrect variable value');\n }\n\n return value;\n }\n\n protected fromString(val: string) {\n return val;\n }\n\n getType(): 'url' {\n return 'url';\n }\n}\n\nexport const TYPE_TO_CLASS = {\n string: StringVariable,\n number: NumberVariable,\n integer: IntegerVariable,\n boolean: BooleanVariable,\n color: ColorVariable,\n url: UrlVariable\n};\n\nexport function createVariable(\n name: string,\n type: VariableType,\n value: unknown\n):\n StringVariable | NumberVariable | IntegerVariable |\n BooleanVariable | ColorVariable | UrlVariable {\n if (!(type in TYPE_TO_CLASS)) {\n throw new Error('Unsupported variable type');\n }\n\n return new (TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n if (type === 'boolean' || type === 'number' || type === 'integer') {\n return 0;\n }\n\n return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n return {\n type: variable.getType(),\n value: variable.getValue()\n };\n}\n","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Slider.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivSliderData } from '../../types/slider';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { ACTION_CTX, ActionCtxValue } from '../../context/action';\n import { genClassName } from '../../utils/genClassName';\n import { correctDrawableStyle, DrawableStyle } from '../../utils/correctDrawableStyles';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { correctSliderTextStyle, TransformedSliderTextStyle } from '../../utils/correctSliderTextStyle';\n import { wrapError } from '../../utils/wrapError';\n import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n import { clamp } from '../../utils/clamp';\n import { correctNumber } from '../../utils/correctNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { debounce } from '../../utils/debounce';\n\n export let json: Partial<DivSliderData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const DEFAULT_DRAWABLE_STYLE: DrawableStyle = {\n width: 10,\n height: 10,\n borderRadius: 5,\n background: '#000'\n };\n\n const THUMB_MARK_SHAPES = ['rounded_rectangle', 'circle'];\n const TRACK_SHAPES = ['rounded_rectangle'];\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n let tracksInner: HTMLElement;\n let switchedTracks = false;\n\n $: jsonMinValue = rootCtx.getDerivedFromVars(json.min_value);\n $: jsonMaxValue = rootCtx.getDerivedFromVars(json.max_value);\n let minValue = 0;\n let maxValue = 100;\n $: {\n minValue = correctNumber($jsonMinValue, minValue);\n maxValue = correctNumber($jsonMaxValue, maxValue);\n checkTicks();\n }\n\n const firstVariable = rootCtx.getJsonWithVars(json.thumb_value_variable);\n const secondVariable = rootCtx.getJsonWithVars(json.thumb_secondary_value_variable);\n\n let valueVariable = firstVariable && rootCtx.getVariable(firstVariable, 'integer') || createVariable('temp', 'integer', 0);\n let value2Variable = secondVariable && rootCtx.getVariable(secondVariable, 'integer') || createVariable('temp', 'integer', 0);\n\n let value = clamp($valueVariable || 0, minValue, maxValue);\n let value2 = clamp($value2Variable || 0, minValue, maxValue);\n\n $: {\n const newVal = clamp($valueVariable || 0, minValue, maxValue);\n if (newVal !== value) {\n value = newVal;\n }\n }\n\n $: {\n const newVal2 = clamp($value2Variable || 0, minValue, maxValue);\n if (newVal2 !== value2) {\n value2 = newVal2;\n }\n }\n\n $: jsonThumbStyle = rootCtx.getDerivedFromVars(json.thumb_style);\n let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonThumbSecondaryStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_style);\n let thumbSecondaryStyle = thumbStyle;\n $: {\n thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n }\n\n $: jsonTrackInactiveStyle = rootCtx.getDerivedFromVars(json.track_inactive_style);\n let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n }\n\n $: jsonTrackActiveStyle = rootCtx.getDerivedFromVars(json.track_active_style);\n let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n $: {\n trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n }\n\n function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n let res: number[] = [];\n\n if (inside) {\n for (let i = from; i < to; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n } else {\n for (let i = minValue; i < from; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n for (let i = to; i < maxValue + 1; ++i) {\n res.push((i - minValue) / (maxValue - minValue));\n }\n }\n\n return res;\n }\n\n $: jsonMarkActiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_active_style);\n let markActiveTicks: number[];\n let markActiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkActiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markActiveStyle = newStyle;\n }\n }\n $: if (markActiveStyle) {\n markActiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, true) :\n fillTicks(minValue, value, minValue, maxValue, true);\n checkTicks();\n } else {\n markActiveTicks = [];\n }\n\n $: jsonMarkInactiveStyle = rootCtx.getDerivedFromVars(json.tick_mark_inactive_style);\n let markInactiveTicks: number[];\n let markInactiveStyle: DrawableStyle | null = null;\n $: {\n let newStyle = correctDrawableStyle($jsonMarkInactiveStyle, THUMB_MARK_SHAPES, DEFAULT_DRAWABLE_STYLE);\n\n if (newStyle !== DEFAULT_DRAWABLE_STYLE) {\n markInactiveStyle = newStyle;\n }\n }\n $: if (markInactiveStyle) {\n markInactiveTicks = secondVariable ?\n fillTicks(Math.min(value, value2), Math.max(value, value2) + 1, minValue, maxValue, false) :\n fillTicks(value + 1, maxValue + 1, minValue, maxValue, true);\n checkTicks();\n } else {\n markInactiveTicks = [];\n }\n\n $: jsonTextStyle = rootCtx.getDerivedFromVars(json.thumb_text_style);\n let textStyle: TransformedSliderTextStyle | undefined = undefined;\n $: {\n textStyle = correctSliderTextStyle($jsonTextStyle, textStyle);\n }\n\n $: jsonSecondaryTextStyle = rootCtx.getDerivedFromVars(json.thumb_secondary_text_style);\n let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n $: {\n textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, textStyle);\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n $: jsonSecondaryAccessibility = rootCtx.getDerivedFromVars(json.secondary_value_accessibility);\n let secondaryDescription = '';\n $: if ($jsonSecondaryAccessibility?.description) {\n secondaryDescription = $jsonSecondaryAccessibility.description;\n } else if (secondVariable) {\n rootCtx.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n level: 'warn'\n }));\n }\n\n let hasError = false;\n $: {\n let newHasError = false;\n\n if (actionCtx.hasAction()) {\n rootCtx.logError(wrapError(new Error('Cannot show \"slider\" inside component with action')));\n newHasError = true;\n } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n newHasError = true;\n } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n newHasError = true;\n } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n rootCtx.logError(wrapError(new Error('Missing \"track_inactive_style\" in slider')));\n newHasError = true;\n }\n\n if (newHasError !== hasError) {\n hasError = newHasError;\n }\n }\n\n $: maxThumbWidth = pxToEm(Math.max(...[\n thumbStyle.width,\n thumbSecondaryStyle.width,\n 0,\n ].filter(isNonNegativeNumber)));\n $: maxThumbHeight = pxToEm(Math.max(...[\n thumbStyle.height,\n thumbSecondaryStyle.height,\n 0,\n ].filter(isNonNegativeNumber)));\n $: trackPart = (value - minValue) / (maxValue - minValue);\n $: trackSecondaryPart = secondVariable ? (value2 - minValue) / (maxValue - minValue) : undefined;\n $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(trackSecondaryPart - trackPart) : trackPart;\n $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(trackSecondaryPart, trackPart) : 0;\n\n $: stl = {\n '--divkit-slider-thumb-width': pxToEm(thumbStyle.width),\n '--divkit-slider-thumb-height': pxToEm(thumbStyle.height),\n\n '--divkit-slider-thumb-secondary-width': pxToEm(thumbSecondaryStyle.width),\n '--divkit-slider-thumb-secondary-height': pxToEm(thumbSecondaryStyle.height),\n\n '--divkit-slider-text-offset-x': textStyle?.offset?.x ? pxToEmWithUnits(textStyle.offset.x) : undefined,\n '--divkit-slider-text-offset-y': textStyle?.offset?.y ? pxToEmWithUnits(textStyle.offset.y) : undefined,\n\n '--divkit-slider-text-secondary-offset-x': textSecondaryStyle?.offset?.x ? pxToEmWithUnits(textSecondaryStyle.offset.x) : undefined,\n '--divkit-slider-text-secondary-offset-y': textSecondaryStyle?.offset?.y ? pxToEmWithUnits(textSecondaryStyle.offset.y) : undefined,\n\n '--divkit-slider-tick-active-width': markActiveStyle ? pxToEm(markActiveStyle.width) : undefined,\n '--divkit-slider-tick-active-height': markActiveStyle ? pxToEm(markActiveStyle.height) : undefined,\n '--divkit-slider-tick-active-border-radius': markActiveStyle ? pxToEm(markActiveStyle.borderRadius) : undefined,\n '--divkit-slider-tick-active-background': markActiveStyle?.background || undefined,\n '--divkit-slider-tick-active-box-shadow': markActiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-tick-inactive-width': markInactiveStyle ? pxToEm(markInactiveStyle.width) : undefined,\n '--divkit-slider-tick-inactive-height': markInactiveStyle ? pxToEm(markInactiveStyle.height) : undefined,\n '--divkit-slider-tick-inactive-border-radius': markInactiveStyle ?\n pxToEm(markInactiveStyle.borderRadius) :\n undefined,\n '--divkit-slider-tick-inactive-background': markInactiveStyle?.background || undefined,\n '--divkit-slider-tick-inactive-box-shadow': markInactiveStyle?.boxShadow || undefined,\n\n '--divkit-slider-max-thumb-width': maxThumbWidth,\n '--divkit-slider-max-thumb-height': maxThumbHeight,\n '--divkit-slider-track-part': trackPart,\n '--divkit-slider-track-secondary-part': trackSecondaryPart,\n };\n\n $: mods = {};\n\n function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n const pageX = 'pageX' in event ? event.pageX : event.changedTouches?.[0]?.pageX;\n if (pageX === undefined) {\n return;\n }\n\n const rangeBbox = tracksInner.getBoundingClientRect();\n const part = (pageX - rangeBbox.left) / rangeBbox.width;\n const newVal = (maxValue - minValue) * part;\n const final = Math.round(clamp(newVal, minValue, maxValue));\n const middle = (value + value2) / 2;\n\n switchedTracks = final < middle === value < value2;\n }\n\n function onInputChange(event: Event, type: 'first' | 'second'): void {\n const val = Number((event.target as HTMLInputElement).value);\n\n if (switchedTracks === (type === 'first')) {\n value2 = val;\n value2Variable.setValue(val);\n } else {\n value = val;\n valueVariable.setValue(val);\n }\n }\n\n let isTicksWarning = false;\n\n function checkTicks() {\n if (!tracksInner) {\n return;\n }\n\n const ticksCount = maxValue - minValue;\n const activeTickWidth = markActiveStyle?.width || 0;\n const inactiveTickWidth = markInactiveStyle?.width || 0;\n const maxTickWidth = Math.max(activeTickWidth, inactiveTickWidth);\n\n if (maxTickWidth * ticksCount >= tracksInner?.clientWidth) {\n if (!isTicksWarning) {\n rootCtx.logError(wrapError(new Error('Slider ticks overlap each other'), {\n level: 'warn'\n }));\n isTicksWarning = true;\n }\n } else {\n isTicksWarning = false;\n }\n }\n\n const checkTicksDebounced = debounce(checkTicks, 50);\n\n onMount(() => {\n checkTicks();\n });\n</script>\n\n<svelte:window on:resize={checkTicksDebounced} />\n\n{#if !hasError}\n <Outer\n cls={genClassName('slider', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'slider'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <div class={css['slider__tracks-wrapper']}>\n <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n <div\n class={css.slider__track}\n style:height={pxToEm(trackInactiveStyle.height)}\n style:border-radius={pxToEm(trackInactiveStyle.borderRadius)}\n style:background={trackInactiveStyle.background}\n style:box-shadow={trackInactiveStyle.boxShadow || ''}\n ></div>\n <div\n class={css['slider__active-track']}\n style:left={(trackActiveOffset * 100).toFixed(2) + '%'}\n style:width={(trackActivePart * 100).toFixed(2) + '%'}\n style:height={pxToEm(trackActiveStyle.height)}\n style:border-radius={pxToEm(trackActiveStyle.borderRadius)}\n style:background={trackActiveStyle.background}\n style:box-shadow={trackActiveStyle.boxShadow || ''}\n ></div>\n {#each markActiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_active}\" style:--divkit-slider-tick={val}></div>\n {/each}\n {#each markInactiveTicks as val}\n <div class=\"{css.slider__tick} {css.slider__tick_inactive}\" style:--divkit-slider-tick={val}></div>\n {/each}\n <div\n class={css.slider__thumb}\n style:border-radius={pxToEm(thumbStyle.borderRadius)}\n style:background={thumbStyle.background}\n style:box-shadow={thumbStyle.boxShadow || ''}\n >\n {#if textStyle}\n <div class={css['slider__thumb-text']}>\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textStyle?.fontSize || '1em'}\n style:font-weight={textStyle?.fontWeight || ''}\n style:color={textStyle?.textColor || '#000'}\n >\n {value}\n </div>\n </div>\n {/if}\n </div>\n {#if secondVariable}\n <div\n class=\"{css.slider__thumb} {css.slider__thumb_secondary}\"\n style:border-radius={pxToEm(thumbSecondaryStyle.borderRadius)}\n style:background={thumbSecondaryStyle.background}\n style:box-shadow={thumbSecondaryStyle.boxShadow || ''}\n >\n {#if textSecondaryStyle}\n <div class=\"{css['slider__thumb-text']} {css['slider__thumb-text_secondary']}\">\n <div\n class={css['slider__thumb-text-inner']}\n style:font-size={textSecondaryStyle?.fontSize || '1em'}\n style:font-weight={textSecondaryStyle?.fontWeight || ''}\n style:color={textSecondaryStyle?.textColor || '#000'}\n >\n {value2}\n </div>\n </div>\n {/if}\n </div>\n {/if}\n <input\n type=\"range\"\n class={switchedTracks ? `${css.slider__input} ${css.slider__input_secondary}` : css.slider__input}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value2 : value}\n aria-label={description}\n on:input={event => onInputChange(event, 'first')}\n >\n {#if secondVariable}\n <input\n type=\"range\"\n class={switchedTracks ? css.slider__input : `${css.slider__input} ${css.slider__input_secondary}`}\n min={minValue}\n max={maxValue}\n step=\"1\"\n value={switchedTracks ? value : value2}\n aria-label={secondaryDescription}\n on:input={event => onInputChange(event, 'second')}\n on:mousedown={secondVariable ? onSecondMousedown : null}\n on:touchstart={secondVariable ? onSecondMousedown : null}\n >\n {/if}\n </div>\n </div>\n </Outer>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"divkit-c3a4c\",\"input__wrapper\":\"divkit-ef7eb\",\"input__holder\":\"divkit-bb3da\",\"input_multiline\":\"divkit-e48a3\",\"input__input\":\"divkit-f11e0\",\"input_highlight-color\":\"divkit-cc00f\",\"input_vertical-overflow\":\"divkit-b7075\"};","<script lang=\"ts\">\n import { getContext, onMount } from 'svelte';\n\n import css from './Input.module.css';\n\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivInputData, KeyboardType } from '../../types/input';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { genClassName } from '../../utils/genClassName';\n import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n import { wrapError } from '../../utils/wrapError';\n import { correctColor } from '../../utils/correctColor';\n import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n import { correctFontWeight } from '../../utils/correctFontWeight';\n import { isPositiveNumber } from '../../utils/isPositiveNumber';\n import { isNumber } from '../../utils/isNumber';\n import Outer from '../utilities/Outer.svelte';\n import { createVariable } from '../../expressions/variable';\n import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n\n export let json: Partial<DivInputData> = {};\n export let templateContext: TemplateContext;\n export let origJson: DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n let input: HTMLInputElement | HTMLTextAreaElement;\n let holder: HTMLElement;\n let isPressed = false;\n let verticalOverflow = false;\n\n const variable = rootCtx.getJsonWithVars(json.text_variable);\n\n let hasError = false;\n if (!variable) {\n hasError = true;\n rootCtx.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n }\n\n let valueVariable = variable && rootCtx.getVariable(variable, 'string') || createVariable('temp', 'string', '');\n let value = '';\n $: {\n value = $valueVariable as string;\n }\n\n const jsonHintText = rootCtx.getDerivedFromVars(json.hint_text);\n $: placeholder = $jsonHintText;\n\n const jsonHintColor = rootCtx.getDerivedFromVars(json.hint_color);\n let hintColor = '';\n $: {\n hintColor = correctColor($jsonHintColor, 1, hintColor);\n }\n\n const jsonFontSize = rootCtx.getDerivedFromVars(json.font_size);\n let fontSize = 12;\n $: {\n fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n }\n\n const jsonFontWeight = rootCtx.getDerivedFromVars(json.font_weight);\n let fontWeight: number | undefined = undefined;\n $: {\n fontWeight = correctFontWeight($jsonFontWeight, fontWeight);\n }\n\n const jsonLineHeight = rootCtx.getDerivedFromVars(json.line_height);\n let lineHeight: number | undefined = undefined;\n $: {\n const val = $jsonLineHeight;\n if (isPositiveNumber(val)) {\n lineHeight = val / fontSize;\n }\n }\n\n const jsonLetterSpacing = rootCtx.getDerivedFromVars(json.letter_spacing);\n let letterSpacing = '';\n $: {\n if (isNumber($jsonLetterSpacing)) {\n letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n }\n }\n\n const jsonTextColor = rootCtx.getDerivedFromVars(json.text_color);\n let textColor = '#000';\n $: {\n textColor = correctColor($jsonTextColor, 1, textColor);\n }\n\n const jsonHighlightColor = rootCtx.getDerivedFromVars(json.highlight_color);\n let highlightColor = '';\n $: {\n highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n }\n\n const jsonKeyboardType = rootCtx.getDerivedFromVars(json.keyboard_type);\n const KEYBOARD_MAP: Record<KeyboardType, string> = {\n email: 'email',\n number: 'number',\n phone: 'tel',\n single_line_text: 'text',\n multi_line_text: 'text',\n uri: 'url'\n };\n let keyboardType = 'multi_line_text';\n let inputType = 'text';\n $: {\n if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n keyboardType = $jsonKeyboardType;\n }\n }\n\n const jsonVisibleMaxLines = rootCtx.getDerivedFromVars(json.max_visible_lines);\n $: isMultiline = keyboardType === 'multi_line_text'/* && isPositiveNumber($jsonVisibleMaxLines) && $jsonVisibleMaxLines > 1*/;\n\n $: jsonPaddings = rootCtx.getDerivedFromVars(json.paddings);\n let maxHeight = '';\n $: {\n if (isPositiveNumber($jsonVisibleMaxLines)) {\n maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n }\n }\n\n $: jsonAccessibility = rootCtx.getDerivedFromVars(json.accessibility);\n let description = '';\n $: if ($jsonAccessibility?.description) {\n description = $jsonAccessibility.description;\n } else {\n rootCtx.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n level: 'warn'\n }));\n }\n\n const jsonSelectAll = rootCtx.getDerivedFromVars(json.select_all_on_focus);\n\n $: mods = {\n 'highlight-color': Boolean(highlightColor),\n 'vertical-overflow': verticalOverflow,\n multiline: isMultiline\n };\n $: stl = {\n '--divkit-input-hint-color': hintColor,\n '--divkit-input-highlight-color': highlightColor,\n 'font-size': pxToEm(fontSize),\n 'font-weight': fontWeight,\n 'line-height': lineHeight,\n 'letter-spacing': letterSpacing,\n color: textColor,\n 'max-height': maxHeight\n };\n\n function onInput(event: Event) {\n const value = (event.target as HTMLInputElement).value || '';\n\n valueVariable.setValue(value);\n\n checkVerticalOverflow();\n }\n\n // Handle text selection\n function onMousedown() {\n isPressed = false;\n\n setTimeout(() => {\n isPressed = true;\n }, 250);\n }\n\n function onClick() {\n if (!isPressed) {\n input.select();\n }\n }\n\n function checkVerticalOverflow(): void {\n verticalOverflow = holder.scrollHeight > holder.offsetHeight;\n }\n\n onMount(() => {\n checkVerticalOverflow();\n });\n</script>\n\n{#if !hasError}\n <Outer\n cls={genClassName('input', css, mods)}\n style={stl}\n customDescription={true}\n customActions={'input'}\n {json}\n {origJson}\n {templateContext}\n {layoutParams}\n >\n <span class={css.input__wrapper}>\n <span class={css.input__holder} aria-hidden=\"true\" bind:this={holder}>\n <!--appends zero-space at end-->\n {value}{#if value.endsWith('\\n') || !value}{/if}\n </span>\n {#if isMultiline}\n <textarea\n bind:this={input}\n class={css.input__input}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n ></textarea>\n {:else}\n <input\n bind:this={input}\n type={inputType}\n class={css.input__input}\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label={description}\n {placeholder}\n {value}\n on:input={onInput}\n on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n on:click={$jsonSelectAll ? onClick : undefined}\n >\n {/if}\n </span>\n </Outer>\n{/if}\n","import { SvelteComponent } from 'svelte';\nimport Text from './text/Text.svelte';\nimport Container from './container/Container.svelte';\nimport Separator from './separator/Separator.svelte';\nimport Image from './image/Image.svelte';\nimport Grid from './grid/Grid.svelte';\nimport Gallery from './gallery/Gallery.svelte';\nimport Tabs from './tabs/Tabs.svelte';\nimport State from './state/State.svelte';\nimport Pager from './pager/Pager.svelte';\nimport Indicator from './indicator/Indicator.svelte';\nimport Slider from './slider/Slider.svelte';\nimport Input from './input/Input.svelte';\n\nexport const TYPE_MAP: Record<string, typeof SvelteComponent> = {\n text: Text,\n container: Container,\n separator: Separator,\n image: Image,\n gif: Image,\n grid: Grid,\n gallery: Gallery,\n tabs: Tabs,\n state: State,\n pager: Pager,\n indicator: Indicator,\n slider: Slider,\n input: Input\n};\n","<script lang=\"ts\">\n import { getContext } from 'svelte';\n import type { SvelteComponent } from 'svelte';\n import type { LayoutParams } from '../../types/layoutParams';\n import type { DivBase, TemplateContext } from '../../../typings/common';\n import type { DivBaseData } from '../../types/base';\n import { ROOT_CTX, RootCtxValue } from '../../context/root';\n import { wrapError } from '../../utils/wrapError';\n import { TYPE_MAP } from '../typeMap';\n\n export let div: DivBaseData;\n export let templateContext: TemplateContext;\n export let origJson: DivBaseData | DivBase | undefined = undefined;\n export let layoutParams: LayoutParams | undefined = undefined;\n\n const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n let childJson: DivBaseData;\n let childContext: TemplateContext;\n\n let component: typeof SvelteComponent | undefined;\n\n $: {\n childJson = div;\n childContext = templateContext;\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n\n if (!component) {\n ({\n templateContext: childContext,\n json: childJson\n } = rootCtx.processTemplate(childJson, childContext));\n\n component = childJson && TYPE_MAP[childJson.type] || undefined;\n if (!component) {\n let error: string;\n if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n error = 'Recursive template';\n } else {\n error = 'Unknown component';\n }\n\n rootCtx.logError(wrapError(new Error(error), {\n additional: {\n component: childJson?.type || '<missing>'\n }\n }));\n }\n }\n }\n</script>\n\n{#if component}\n <svelte:component this={component} json={childJson} templateContext={childContext} {layoutParams} origJson={origJson || div} />\n{/if}\n","<script lang=\"ts\">\n import css from './RootSvgFilters.module.css';\n\n export let svgFiltersMap: Record<string, string>;\n</script>\n\n{#if Object.keys(svgFiltersMap).length}\n <svg\n class={css['root-svg-filters']}\n aria-hidden=\"true\"\n >\n <defs>\n {#each [...Object.keys(svgFiltersMap)] as filterKey}\n {@const [filterColor, filterMode] = filterKey.split(':')}\n <filter id={svgFiltersMap[filterKey]}>\n <feFlood flood-color={filterColor} />\n\n {#if filterMode === 'source_in' || filterMode === 'source_atop'}\n <feComposite in2=\"SourceGraphic\" operator={filterMode.split('_')[1]} />\n {:else if filterMode === 'multiply'}\n <feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"1\" k2=\"0\" k3=\"0\" k4=\"0\" />\n {:else}\n <feBlend in2=\"SourceGraphic\" mode={filterMode} />\n {/if}\n </filter>\n {/each}\n </defs>\n </svg>\n{/if}\n","// extracted by mini-css-extract-plugin\nexport default {\"root-svg-filters\":\"divkit-dc22b\"};","import { wrapError, WrappedError } from './wrapError';\nimport type { DivBase, TemplateContext } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\n\nexport function applyTemplate<T extends DivBase>(\n json: T,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: T;\n templateContext: TemplateContext;\n};\nexport function applyTemplate(\n json: DivBaseData,\n templateContext: TemplateContext,\n templates: Record<string, unknown>,\n logError: (error: WrappedError) => void\n): {\n json: DivBaseData;\n templateContext: TemplateContext;\n} {\n const template = templates[json.type];\n\n if (!template) {\n logError(wrapError(new Error('No such template'), {\n additional: {\n template: json.type\n }\n }));\n\n return {\n json,\n templateContext\n };\n }\n\n let i;\n const newContext: TemplateContext = {};\n\n for (i in templateContext) {\n if (templateContext.hasOwnProperty(i)) {\n newContext[i] = templateContext[i];\n }\n }\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newContext[i] = json[i as keyof typeof json];\n }\n }\n\n function copyTemplated(base: any, extender: any) {\n const keys = Object.keys(extender).filter(key => key !== '__proto__');\n const simpleKeys = keys.filter(key => key.charAt(0) !== '$');\n const templateKeys = keys.filter(key => key.charAt(0) === '$');\n\n simpleKeys.forEach(key => {\n const item = extender[key];\n\n if (typeof item === 'object' && item !== null) {\n base[key] = Array.isArray(item) ? [] : {};\n copyTemplated(base[key], item);\n } else {\n base[key] = item;\n }\n });\n\n templateKeys.forEach(key => {\n const item = extender[key];\n\n const val = newContext[item];\n\n if (val !== undefined) {\n const prop = key.substring(1);\n base[prop] = val;\n } else {\n logError(wrapError(new Error('Missing template field'), {\n level: 'warn',\n additional: {\n key,\n template: json.type\n }\n }));\n }\n });\n\n return base;\n }\n\n const newJson = copyTemplated({}, template);\n\n for (i in json) {\n if (i === 'type' || i === '__proto__') {\n continue;\n }\n\n if (json.hasOwnProperty(i)) {\n newJson[i] = json[i as keyof typeof json];\n }\n }\n\n return {\n json: newJson,\n templateContext: newContext\n };\n}\n","import type { Readable } from 'svelte/types/runtime/store';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction voidUnsubscribe() {\n}\n\nexport function constStore<T>(val: T): Readable<T> {\n return {\n subscribe(cb) {\n cb(val);\n return voidUnsubscribe;\n }\n };\n}\n","// Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n\n\n import { MAX_INT, MIN_INT } from './const';\n\n function buildBinaryExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'BinaryExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildLogicalExpression(head, tail) {\n return tail.reduce((result, element) => {\n return {\n type: 'LogicalExpression',\n operator: element[1],\n left: result,\n right: element[3]\n };\n }, head);\n }\n\n function buildString(list) {\n if (list.every(it => typeof it === 'string')) {\n return {type: 'StringLiteral', value: list.join('')};\n }\n let res = list.reduce((result, element) => {\n if (typeof element === 'string' && typeof result[result.length - 1] === 'string') {\n result[result.length - 1] += element;\n } else {\n result.push(element);\n }\n return result;\n }, []).reduce((result, element) => {\n if (typeof element === 'string') {\n result.quasis.push({type: 'StringLiteral', value: element});\n } else {\n if (result.quasis.length === result.expressions.length) {\n result.quasis.push({type: 'StringLiteral', value: ''});\n }\n result.expressions.push(element);\n }\n return result;\n }, {\n type: 'TemplateLiteral',\n quasis: [],\n expressions: []\n });\n\n if (res.quasis.length === res.expressions.length) {\n res.quasis.push({type: 'StringLiteral', value: ''});\n }\n\n return res;\n }\n\n function convertToInt32(str) {\n var num = parseInt(str, 10);\n if (num > MAX_INT || num < MIN_INT) {\n throw new Error(`Value ${str} can't be converted to Integer type.`);\n }\n return num;\n }\n\n function escapeChar(char) {\n if (char === \"'\" || char === '\\\\') {\n return char;\n }\n throw new Error('Incorrect string escape');\n }\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { start: peg$parsestart, JsonStringContents: peg$parseJsonStringContents };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = \"@{\";\n var peg$c1 = \"}\";\n var peg$c2 = \"@{}\";\n var peg$c3 = \"\\\\\";\n var peg$c4 = \"?\";\n var peg$c5 = \":\";\n var peg$c6 = \"||\";\n var peg$c7 = \"&&\";\n var peg$c8 = \"==\";\n var peg$c9 = \"!=\";\n var peg$c10 = \">=\";\n var peg$c11 = \">\";\n var peg$c12 = \"<=\";\n var peg$c13 = \"<\";\n var peg$c14 = \"+\";\n var peg$c15 = \"-\";\n var peg$c16 = \"/\";\n var peg$c17 = \"*\";\n var peg$c18 = \"%\";\n var peg$c19 = \"!\";\n var peg$c20 = \"(\";\n var peg$c21 = \")\";\n var peg$c22 = \",\";\n var peg$c23 = \"'\";\n var peg$c24 = \".\";\n var peg$c25 = \"e\";\n var peg$c26 = \"E\";\n var peg$c27 = \"true\";\n var peg$c28 = \"false\";\n\n var peg$r0 = /^[^}]/;\n var peg$r1 = /^[^'}]/;\n var peg$r2 = /^[0-9]/;\n var peg$r3 = /^[a-zA-Z_0-9.]/;\n var peg$r4 = /^[a-zA-Z_]/;\n var peg$r5 = /^[ \\t\\r\\n]/;\n\n var peg$e0 = peg$literalExpectation(\"@{\", false);\n var peg$e1 = peg$literalExpectation(\"}\", false);\n var peg$e2 = peg$literalExpectation(\"@{}\", false);\n var peg$e3 = peg$literalExpectation(\"\\\\\", false);\n var peg$e4 = peg$anyExpectation();\n var peg$e5 = peg$classExpectation([\"}\"], true, false);\n var peg$e6 = peg$literalExpectation(\"?\", false);\n var peg$e7 = peg$literalExpectation(\":\", false);\n var peg$e8 = peg$literalExpectation(\"||\", false);\n var peg$e9 = peg$literalExpectation(\"&&\", false);\n var peg$e10 = peg$literalExpectation(\"==\", false);\n var peg$e11 = peg$literalExpectation(\"!=\", false);\n var peg$e12 = peg$literalExpectation(\">=\", false);\n var peg$e13 = peg$literalExpectation(\">\", false);\n var peg$e14 = peg$literalExpectation(\"<=\", false);\n var peg$e15 = peg$literalExpectation(\"<\", false);\n var peg$e16 = peg$literalExpectation(\"+\", false);\n var peg$e17 = peg$literalExpectation(\"-\", false);\n var peg$e18 = peg$literalExpectation(\"/\", false);\n var peg$e19 = peg$literalExpectation(\"*\", false);\n var peg$e20 = peg$literalExpectation(\"%\", false);\n var peg$e21 = peg$literalExpectation(\"!\", false);\n var peg$e22 = peg$literalExpectation(\"(\", false);\n var peg$e23 = peg$literalExpectation(\")\", false);\n var peg$e24 = peg$literalExpectation(\",\", false);\n var peg$e25 = peg$otherExpectation(\"string\");\n var peg$e26 = peg$literalExpectation(\"'\", false);\n var peg$e27 = peg$classExpectation([\"'\", \"}\"], true, false);\n var peg$e28 = peg$otherExpectation(\"integer\");\n var peg$e29 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e30 = peg$otherExpectation(\"number\");\n var peg$e31 = peg$literalExpectation(\".\", false);\n var peg$e32 = peg$literalExpectation(\"e\", false);\n var peg$e33 = peg$literalExpectation(\"E\", false);\n var peg$e34 = peg$otherExpectation(\"boolean\");\n var peg$e35 = peg$literalExpectation(\"true\", false);\n var peg$e36 = peg$literalExpectation(\"false\", false);\n var peg$e37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"], \".\"], false, false);\n var peg$e38 = peg$otherExpectation(\"identifier\");\n var peg$e39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n var peg$e40 = peg$otherExpectation(\"whitespace\");\n var peg$e41 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false);\n\n var peg$f0 = function(expr) { return expr; };\n var peg$f1 = function(list) { return buildString(list); };\n var peg$f2 = function(expr) { return expr; };\n var peg$f3 = function() { return ''; };\n var peg$f4 = function() { return text(); };\n var peg$f5 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f6 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f7 = function(str) { return str; };\n var peg$f8 = function(char) { return escapeChar(char); };\n var peg$f9 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f10 = function(expr, first, second) { return {type: 'ConditionalExpression', test: expr, consequent: first, alternate: second}; };\n var peg$f11 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f12 = function(head, tail) { return buildLogicalExpression(head, tail); };\n var peg$f13 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f14 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f15 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n var peg$f17 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n var peg$f18 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n var peg$f19 = function(id) { return {type: 'Variable', id}; };\n var peg$f20 = function(expr, list) { return [expr, ...list]; };\n var peg$f21 = function(expr) { return expr; };\n var peg$f22 = function(str) { return str; };\n var peg$f23 = function(list) { return buildString(list); };\n var peg$f24 = function(expr) { return expr; };\n var peg$f25 = function() { return ''; };\n var peg$f26 = function() { return text(); };\n var peg$f27 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f28 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f29 = function(str) { return str; };\n var peg$f30 = function(char) { return escapeChar(char); };\n var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n var peg$f32 = function() { return {type: 'IntegerLiteral', value: convertToInt32(text())}; };\n var peg$f33 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f34 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n var peg$f35 = function() { return {type: 'BooleanLiteral', value: true}; };\n var peg$f36 = function() { return {type: 'BooleanLiteral', value: false}; };\n var peg$f37 = function() { return {type: 'Identifier', name: text()}; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseJsonStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseJsonStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseJsonStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseJsonStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f6();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f9();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parseOr();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 63) {\n s3 = peg$c4;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c5;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseExpression();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s1, s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseOr();\n }\n\n return s0;\n }\n\n function peg$parseOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s5 = peg$c6;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f11(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseEqual();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s5 = peg$c7;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseEqual();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEqual() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseComparison();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s5 = peg$c9;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComparison();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f13(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseComparison() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseSum();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c11;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s5 = peg$c12;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c13;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseSum();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSum() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c14;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c15;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f15(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseUnary();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c16;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c17;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseUnary();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f16(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUnary() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c19;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseUnary();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseCall();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseCall() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 40) {\n s3 = peg$c20;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseArguments();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 41) {\n s7 = peg$c21;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n }\n\n return s0;\n }\n\n function peg$parseArguments() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s3 = s7;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parse_();\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n var s0, s1, s2, s3;\n\n s0 = peg$parseString();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseExpression();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s3 = peg$c21;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseString() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c23;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseStringContents();\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n\n return s0;\n }\n\n function peg$parseStringContents() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseStringChar();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseStringChar();\n }\n peg$savedPos = s0;\n s1 = peg$f23(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseStringChar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f25();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c23;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f28();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s2 = peg$c0;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f31();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseInteger() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f32();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parseNumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s6 = peg$c25;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s6 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s6 = peg$c26;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s7 = peg$c14;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s7 = peg$c15;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f33();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 101) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s4 = peg$c14;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s4 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n\n return s0;\n }\n\n function peg$parseBoolean() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f35();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f36();\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parseReservedWord() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseReservedWord();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f37();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r5.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nexport {\n peg$SyntaxError as SyntaxError,\n\n peg$parse as parse\n};\n","import type { EvalTypes, EvalValue } from '../eval';\nimport type { VariablesMap } from '../eval';\n\nexport type FuncArg = EvalTypes | {\n type: EvalTypes;\n isVararg?: boolean;\n}\n\nexport interface Func {\n args: FuncArg[];\n cb(vars: VariablesMap, ...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\n\ntype FuncMatchError = {\n type: 'mismatch';\n expected: EvalTypes;\n found: EvalTypes;\n} | {\n type: 'few';\n expected: number;\n found: number;\n} | {\n type: 'many';\n expected: number;\n found: number;\n} | {\n type: 'missing';\n};\n\n// no args\nexport function registerFunc(name: string, args: [], cb: (vars?: VariablesMap) => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n A0 extends EvalTypes\n>(\n name: string,\n args: [A0],\n cb: (\n vars: VariablesMap,\n arg0: Extract<EvalValue, { type: A0 }>\n ) => EvalValue\n): void;\n// two specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes\n>(\n name: string,\n args: [A0, A1],\n cb: (\n vars: VariablesMap,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>\n ) => EvalValue\n): void;\n// three specific args\nexport function registerFunc<\n A0 extends EvalTypes,\n A1 extends EvalTypes,\n A2 extends EvalTypes\n>(\n name: string,\n args: [A0, A1, A2],\n cb: (\n vars: VariablesMap,\n arg0: Extract<EvalValue, { type: A0 }>,\n arg1: Extract<EvalValue, { type: A1 }>,\n arg2: Extract<EvalValue, { type: A2 }>\n ) => EvalValue\n): void;\n// any args\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (vars: VariablesMap, ...args: any[]) => EvalValue\n): void;\n\nexport function registerFunc(\n name: string,\n args: FuncArg[],\n cb: (vars: VariablesMap, ...args: EvalValue[]) => EvalValue\n): void {\n const desc: Func = {\n args,\n cb\n };\n\n const arr = funcs.get(name) || [];\n\n if (!funcs.has(name)) {\n funcs.set(name, arr);\n }\n arr.push(desc);\n\n const funcKey = name + ':' + args.map(it => {\n if (typeof it === 'object') {\n return it.type;\n }\n return it;\n }).join('#');\n\n funcByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[]): {\n type: 'match';\n} | FuncMatchError {\n let minArgs = func.args.length;\n let maxArgs = func.args.length;\n const lastArg = func.args[func.args.length - 1];\n\n if (typeof lastArg === 'object' && lastArg.isVararg) {\n --minArgs;\n maxArgs = Infinity;\n }\n\n if (args.length < minArgs) {\n return {\n type: 'few',\n expected: minArgs,\n found: args.length\n };\n } else if (args.length > maxArgs) {\n return {\n type: 'many',\n expected: maxArgs,\n found: args.length\n };\n }\n\n for (let i = 0; i < args.length; ++i) {\n let funcArg = i >= func.args.length ? func.args[func.args.length - 1] : func.args[i];\n if (typeof funcArg !== 'object') {\n funcArg = {\n type: funcArg\n };\n }\n\n if (funcArg.type !== args[i].type) {\n return {\n type: 'mismatch',\n expected: funcArg.type,\n found: args[i].type\n };\n }\n }\n\n return {\n type: 'match'\n };\n}\n\nexport function findBestMatchedFunc(funcName: string, args: EvalValue[]): Func | FuncMatchError {\n const list = funcs.get(funcName);\n if (!list) {\n return {\n type: 'missing'\n };\n }\n\n let firstError: FuncMatchError | null = null;\n for (let i = 0; i < list.length; ++i) {\n const match = matchFuncArgs(list[i], args);\n if (match.type === 'match') {\n return list[i];\n }\n if (!firstError) {\n firstError = match;\n }\n }\n\n if (!firstError) {\n throw new Error('Missing function');\n }\n\n return firstError;\n}\n","import { Node } from './ast';\n\nexport function walk(ast: Node, visitors: {\n [Type in Node['type']]?: (node: Extract<Node, { type: Type }>) => void;\n}): void {\n visitors[ast.type]?.(ast as any);\n\n switch (ast.type) {\n case 'TemplateLiteral':\n ast.expressions.forEach(item => {\n walk(item, visitors);\n });\n break;\n case 'BinaryExpression':\n case 'LogicalExpression':\n walk(ast.left, visitors);\n walk(ast.right, visitors);\n break;\n case 'UnaryExpression':\n walk(ast.argument, visitors);\n break;\n case 'ConditionalExpression':\n walk(ast.test, visitors);\n walk(ast.consequent, visitors);\n walk(ast.alternate, visitors);\n break;\n case 'CallExpression':\n ast.arguments.forEach(item => {\n walk(item, visitors);\n });\n break;\n }\n}\n","import type { EvalValue, EvalValueBase } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { EvalTypes } from './eval';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { MAX_INT, MIN_INT } from './const';\nimport { parseColor, ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\n\nexport function valToInternal(val: EvalValue): EvalValue {\n if (val.type === 'url' || val.type === 'color') {\n return {\n type: 'string',\n value: val.value\n };\n }\n\n return val;\n}\n\nexport function dateToString(date: Date): string {\n return date\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, '');\n}\n\nexport function valToString(val: EvalValue): string {\n if (val.type === 'string') {\n return val.value;\n } else if (val.type === 'integer') {\n return String(val.value);\n } else if (val.type === 'number') {\n let res = String(val.value);\n\n if (!res.includes('.')) {\n if (res.includes('e')) {\n res = res.replace('e', '.0e');\n } else {\n res += '.0';\n }\n }\n\n res = res.replace(/e\\+?/i, 'E');\n\n return res;\n } else if (val.type === 'boolean') {\n return val.value ? 'true' : 'false';\n } else if (val.type === 'datetime') {\n return dateToString(val.value);\n } else if (val.type === 'color') {\n return stringifyColor(safeConvertColor(val.value));\n } else if (val.type === 'url') {\n return val.value;\n }\n\n\n // For purpose when new eval value types will be added\n throw new Error(`Unexpected type ${(val as EvalValueBase).type}`);\n}\n\nexport function valToPreview(val: EvalValue): string {\n let res = valToString(val);\n\n if (val.type === 'string') {\n res = \"'\" +\n res\n .replace(/\\\\/g, '\\\\\\'')\n .replace(/'/g, '\\\\\\'') +\n \"'\";\n }\n\n return res;\n}\n\nexport function typeToString(type: EvalTypes): string {\n if (type === 'datetime') {\n return 'DateTime';\n }\n return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nconst int32Array = new Int32Array(1);\nexport function roundInteger(val: number): number {\n int32Array[0] = val;\n return int32Array[0];\n}\n\nexport function checkIntegerOverflow(val: number): void {\n if (val < MIN_INT || val > MAX_INT) {\n throw new Error('Integer overflow.');\n }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n const res: string[] = [];\n\n walk(ast, {\n Variable(node: Variable): void {\n res.push(node.id.name);\n }\n });\n\n return res;\n}\n\nexport function evalError(msg: string, details: string): never {\n throw new Error(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function containsUnsetVariables(ast: Node, variables: VariablesMap): boolean {\n let result = false;\n\n walk(ast, {\n Variable(node: Variable): void {\n if (!variables.has(node.id.name)) {\n result = true;\n }\n }\n });\n\n return result;\n}\n\nexport function safeConvertColor(color: string): ParsedColor {\n const res = parseColor(color);\n\n if (res) {\n return res;\n }\n\n throw new Error('Unable to convert value to Color, expected format #AARRGGBB.');\n}\n\nexport function stringifyColor(color: ParsedColor): string {\n return `#${[color.a, color.r, color.g, color.b].map(it => {\n if (it < 0 || it > 255) {\n throw new Error('Value out of range 0..1.');\n }\n\n return padLeft(Math.round(it).toString(16), 2);\n }).join('').toUpperCase()}`;\n}\n\nexport function transformColorValue(color: string): string {\n return stringifyColor(safeConvertColor(color));\n}\n","import type { BooleanValue, ColorValue, EvalValue, IntegerValue, NumberValue, StringValue, UrlValue } from '../eval';\nimport type { VariablesMap } from '../eval';\nimport type { VariableType, VariableValue } from '../variable';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, COLOR, INTEGER, MAX_INT, MIN_INT, NUMBER, STRING, URL } from '../const';\nimport { transformColorValue, valToString } from '../utils';\n\nfunction toString(\n _vars: VariablesMap,\n arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue\n): EvalValue {\n return {\n type: STRING,\n value: valToString(arg)\n };\n}\n\n\nfunction toNumber(_vars: VariablesMap, arg: IntegerValue | StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || !Number.isFinite(num)) {\n throw new Error('Unable to convert value to Number.');\n }\n\n return {\n type: NUMBER,\n value: num\n };\n}\n\n\nfunction toIntegerNumber(_vars: VariablesMap, arg: NumberValue): EvalValue {\n if (arg.value > MAX_INT || arg.value < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n const num = arg.value - (arg.value % 1);\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerString(_vars: VariablesMap, arg: StringValue): EvalValue {\n const num = Number(arg.value);\n\n if (isNaN(num) || num % 1 !== 0 || num > MAX_INT || num < MIN_INT) {\n throw new Error('Unable to convert value to Integer.');\n }\n\n return {\n type: INTEGER,\n value: num\n };\n}\n\nfunction toIntegerBoolean(_vars: VariablesMap, arg: BooleanValue): EvalValue {\n return {\n type: INTEGER,\n value: arg.value ? 1 : 0\n };\n}\n\n\nfunction toBooleanInteger(_vars: VariablesMap, arg: IntegerValue): EvalValue {\n if (arg.value !== 1 && arg.value !== 0) {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value\n };\n}\n\nfunction toBooleanString(_vars: VariablesMap, arg: StringValue): EvalValue {\n if (arg.value !== 'true' && arg.value !== 'false') {\n throw new Error('Unable to convert value to Boolean.');\n }\n\n return {\n type: BOOLEAN,\n value: arg.value === 'true' ? 1 : 0\n };\n}\n\nfunction encodeUri(_vars: VariablesMap, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: encodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to encodeUri string.');\n }\n}\n\nfunction decodeUri(_vars: VariablesMap, str: StringValue): EvalValue {\n try {\n return {\n type: STRING,\n value: decodeURIComponent(str.value)\n };\n } catch (_err) {\n throw new Error('Unable to decodeUri string.');\n }\n}\n\nfunction getValueForced(\n vars: VariablesMap,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue,\n type: VariableType\n): EvalValue {\n const variable = vars.get(varName.value);\n let value: VariableValue;\n\n if (variable && variable.getType() === type) {\n value = variable.getValue();\n } else {\n value = fallback.value;\n }\n\n if (type === 'color') {\n value = transformColorValue(value as string);\n }\n\n return {\n type,\n // value is synced with type by params\n value: value as any\n };\n}\n\nfunction getValue(\n vars: VariablesMap,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n): EvalValue {\n return getValueForced(vars, varName, fallback, fallback.type);\n}\n\nfunction getColorValue(\n vars: VariablesMap,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(vars, varName, fallback, 'color');\n}\n\nfunction getUrlValue(\n vars: VariablesMap,\n varName: StringValue,\n fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n return getValueForced(vars, varName, fallback, 'url');\n}\n\nexport function registerStd(): void {\n registerFunc('toString', [INTEGER], toString);\n registerFunc('toString', [NUMBER], toString);\n registerFunc('toString', [BOOLEAN], toString);\n registerFunc('toString', [COLOR], toString);\n registerFunc('toString', [URL], toString);\n\n registerFunc('toNumber', [INTEGER], toNumber);\n registerFunc('toNumber', [STRING], toNumber);\n\n registerFunc('toInteger', [NUMBER], toIntegerNumber);\n registerFunc('toInteger', [STRING], toIntegerString);\n registerFunc('toInteger', [BOOLEAN], toIntegerBoolean);\n\n registerFunc('toBoolean', [INTEGER], toBooleanInteger);\n registerFunc('toBoolean', [STRING], toBooleanString);\n\n registerFunc('encodeUri', [STRING], encodeUri);\n registerFunc('decodeUri', [STRING], decodeUri);\n\n registerFunc('getIntegerValue', [STRING, INTEGER], getValue);\n registerFunc('getNumberValue', [STRING, NUMBER], getValue);\n registerFunc('getBooleanValue', [STRING, BOOLEAN], getValue);\n registerFunc('getStringValue', [STRING, STRING], getValue);\n registerFunc('getColorValue', [STRING, COLOR], getColorValue);\n registerFunc('getColorValue', [STRING, STRING], getColorValue);\n registerFunc('getUrlValue', [STRING, URL], getUrlValue);\n registerFunc('getUrlValue', [STRING, STRING], getUrlValue);\n}\n","import type { DatetimeValue, EvalValue, IntegerValue } from '../eval';\nimport type { VariablesMap } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER } from '../const';\nimport { valToString } from '../utils';\n\nfunction getMaxDate(date: Date): number {\n const copy = new Date(date);\n\n copy.setUTCMonth(copy.getUTCMonth() + 1);\n copy.setUTCDate(0);\n\n return copy.getUTCDate();\n}\n\nfunction parseUnixTime(_vars: VariablesMap, arg: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(arg.value * 1000)\n };\n}\n\nfunction nowLocal(): EvalValue {\n return {\n type: DATETIME,\n value: new Date()\n };\n}\n\nfunction addMillis(_vars: VariablesMap, datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n return {\n type: DATETIME,\n value: new Date(datetime.value.getTime() + milliseconds.value)\n };\n}\n\nfunction setYear(_vars: VariablesMap, datetime: DatetimeValue, year: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n copy.setUTCFullYear(year.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMonth(_vars: VariablesMap, datetime: DatetimeValue, month: IntegerValue): EvalValue {\n if (month.value < 1 || month.value > 12) {\n throw new Error(`Expecting month in [1..12], instead got ${month.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCMonth(month.value - 1);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setDay(_vars: VariablesMap, datetime: DatetimeValue, day: IntegerValue): EvalValue {\n const copy = new Date(datetime.value);\n\n if (day.value <= 0 && day.value !== -1 || day.value > getMaxDate(copy)) {\n throw new Error(`Unable to set day ${day.value} for date ${valToString(datetime)}.`);\n }\n\n copy.setUTCDate(day.value === -1 ? 0 : day.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setHours(_vars: VariablesMap, datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n if (hours.value < 0 || hours.value > 23) {\n throw new Error(`Expecting hours in [0..23], instead got ${hours.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCHours(hours.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMinutes(_vars: VariablesMap, datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n if (minutes.value < 0 || minutes.value > 59) {\n throw new Error(`Expecting minutes in [0..59], instead got ${minutes.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCMinutes(minutes.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setSeconds(_vars: VariablesMap, datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n if (seconds.value < 0 || seconds.value > 59) {\n throw new Error(`Expecting seconds in [0..59], instead got ${seconds.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCSeconds(seconds.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nfunction setMillis(_vars: VariablesMap, datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n if (millis.value < 0 || millis.value > 999) {\n throw new Error(`Expecting millis in [0..999], instead got ${millis.value}.`);\n }\n\n const copy = new Date(datetime.value);\n\n copy.setUTCMilliseconds(millis.value);\n\n return {\n type: DATETIME,\n value: copy\n };\n}\n\nconst getter = (\n method: 'getUTCFullYear' | 'getUTCMonth' | 'getUTCDate' | 'getUTCDay' | 'getUTCHours' | 'getUTCMinutes' |\n 'getUTCSeconds' | 'getUTCMilliseconds'\n) => {\n return (_vars: VariablesMap, datetime: DatetimeValue): EvalValue => {\n const copy = new Date(datetime.value.getTime());\n\n let value: number = copy[method]();\n\n if (method === 'getUTCMonth') {\n ++value;\n } else if (method === 'getUTCDay' && value === 0) {\n value = 7;\n }\n\n return {\n type: INTEGER,\n value\n };\n };\n};\n\nconst getYear = getter('getUTCFullYear');\nconst getMonth = getter('getUTCMonth');\nconst getDay = getter('getUTCDate');\nconst getDayOfWeek = getter('getUTCDay');\nconst getHours = getter('getUTCHours');\nconst getMinutes = getter('getUTCMinutes');\nconst getSeconds = getter('getUTCSeconds');\nconst getMillis = getter('getUTCMilliseconds');\n\nexport function registerDatetime(): void {\n registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n registerFunc('nowLocal', [], nowLocal);\n registerFunc('addMillis', [DATETIME, INTEGER], addMillis);\n\n registerFunc('setYear', [DATETIME, INTEGER], setYear);\n registerFunc('setMonth', [DATETIME, INTEGER], setMonth);\n registerFunc('setDay', [DATETIME, INTEGER], setDay);\n registerFunc('setHours', [DATETIME, INTEGER], setHours);\n registerFunc('setMinutes', [DATETIME, INTEGER], setMinutes);\n registerFunc('setSeconds', [DATETIME, INTEGER], setSeconds);\n registerFunc('setMillis', [DATETIME, INTEGER], setMillis);\n\n registerFunc('getYear', [DATETIME], getYear);\n registerFunc('getMonth', [DATETIME], getMonth);\n registerFunc('getDay', [DATETIME], getDay);\n registerFunc('getDayOfWeek', [DATETIME], getDayOfWeek);\n registerFunc('getHours', [DATETIME], getHours);\n registerFunc('getMinutes', [DATETIME], getMinutes);\n registerFunc('getSeconds', [DATETIME], getSeconds);\n registerFunc('getMillis', [DATETIME], getMillis);\n}\n","import type { EvalValue, IntegerValue, StringValue } from '../eval';\nimport type { VariablesMap } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\n\nfunction len(_vars: VariablesMap, arg: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: arg.value.length\n };\n}\n\nfunction contains(_vars: VariablesMap, wholeStr: StringValue, partStr: StringValue): EvalValue {\n return {\n type: BOOLEAN,\n value: wholeStr.value.includes(partStr.value) ? 1 : 0\n };\n}\n\nfunction substring(_vars: VariablesMap, str: StringValue, start: IntegerValue, end: IntegerValue): EvalValue {\n if (end.value < start.value) {\n throw new Error('Indexes should be in ascending order.');\n }\n\n if (\n start.value < 0 || start.value > str.value.length ||\n end.value < 0 || end.value > str.value.length\n ) {\n throw new Error('Indexes are out of bounds.');\n }\n\n return {\n type: STRING,\n value: str.value.substring(start.value, end.value)\n };\n}\n\nfunction replaceAll(_vars: VariablesMap, str: StringValue, what: StringValue, replacer: StringValue): EvalValue {\n let res: string;\n\n if (what.value) {\n res = str.value.replace(new RegExp(escapeRegExp(what.value), 'g'), replacer.value);\n } else {\n // empty str\n res = str.value;\n }\n\n return {\n type: STRING,\n value: res\n };\n}\n\nfunction index(_vars: VariablesMap, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: str.value.indexOf(what.value)\n };\n}\n\nfunction lastIndex(_vars: VariablesMap, str: StringValue, what: StringValue): EvalValue {\n return {\n type: INTEGER,\n value: str.value.lastIndexOf(what.value)\n };\n}\n\nfunction trim(_vars: VariablesMap, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.trim()\n };\n}\n\nfunction trimLeft(_vars: VariablesMap, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/^\\s+/, '')\n };\n}\n\nfunction trimRight(_vars: VariablesMap, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.replace(/\\s+$/, '')\n };\n}\n\nfunction toUpperCase(_vars: VariablesMap, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toUpperCase()\n };\n}\n\nfunction toLowerCase(_vars: VariablesMap, str: StringValue): EvalValue {\n return {\n type: STRING,\n value: str.value.toLowerCase()\n };\n}\n\nfunction calcPad(val: StringValue | IntegerValue, len: IntegerValue, pad: StringValue): string {\n if (!pad.value.length) {\n return '';\n }\n\n let part = '';\n const str = val.type === STRING ? val.value : valToString(val);\n\n while (part.length + str.length < len.value) {\n part += pad.value;\n }\n if (part.length > 0 && part.length + str.length > len.value) {\n part = part.substring(0, len.value - str.length);\n }\n\n return part;\n}\n\nfunction padStart(\n _vars: VariablesMap,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const prefix = calcPad(val, len, pad);\n\n return {\n type: STRING,\n value: prefix + valToString(val)\n };\n}\n\nfunction padEnd(\n _vars: VariablesMap,\n val: StringValue | IntegerValue,\n len: IntegerValue,\n pad: StringValue\n): EvalValue {\n const suffix = calcPad(val, len, pad);\n\n return {\n type: STRING,\n value: valToString(val) + suffix\n };\n}\n\nexport function registerStrings(): void {\n registerFunc('len', [STRING], len);\n registerFunc('contains', [STRING, STRING], contains);\n registerFunc('substring', [STRING, INTEGER, INTEGER], substring);\n registerFunc('replaceAll', [STRING, STRING, STRING], replaceAll);\n registerFunc('index', [STRING, STRING], index);\n registerFunc('lastIndex', [STRING, STRING], lastIndex);\n registerFunc('trim', [STRING], trim);\n registerFunc('trimLeft', [STRING], trimLeft);\n registerFunc('trimRight', [STRING], trimRight);\n registerFunc('toUpperCase', [STRING], toUpperCase);\n registerFunc('toLowerCase', [STRING], toLowerCase);\n registerFunc('padStart', [STRING, INTEGER, STRING], padStart);\n registerFunc('padStart', [INTEGER, INTEGER, STRING], padStart);\n registerFunc('padEnd', [STRING, INTEGER, STRING], padEnd);\n registerFunc('padEnd', [INTEGER, INTEGER, STRING], padEnd);\n}\n","import type { EvalValue, IntegerValue, NumberValue } from '../eval';\nimport type { VariablesMap } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_INT, MAX_NUMBER, MIN_INT, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\n\nfunction div<T extends IntegerValue | NumberValue>(_vars: VariablesMap, arg0: T, arg1: T): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n let res = arg0.value / arg1.value;\n if (arg0.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nfunction mod<T extends IntegerValue | NumberValue>(_vars: VariablesMap, arg0: T, arg1: T): EvalValue {\n if (arg1.value === 0) {\n throw new Error('Division by zero is not supported.');\n }\n\n let res = arg0.value % arg1.value;\n if (arg0.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nfunction mul<T extends IntegerValue | NumberValue>(_vars: VariablesMap, ...args: T[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res *= args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args[0].type,\n value: res\n };\n}\n\nfunction sub<T extends IntegerValue | NumberValue>(_vars: VariablesMap, ...args: T[]): EvalValue {\n let res = args.length ? args[0].value : 0;\n for (let i = 1; i < args.length; ++i) {\n res -= args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args.length ? args[0].type : INTEGER,\n value: res\n };\n}\n\nfunction sum<T extends IntegerValue | NumberValue>(_vars: VariablesMap, ...args: T[]): EvalValue {\n let res = 0;\n for (let i = 0; i < args.length; ++i) {\n res += args[i].value;\n if (args[0].type === INTEGER) {\n res = roundInteger(res);\n }\n }\n\n return {\n type: args.length ? args[0].type : INTEGER,\n value: res\n };\n}\n\nfunction abs(_vars: VariablesMap, arg: IntegerValue | NumberValue): EvalValue {\n const res = Math.abs(arg.value);\n\n if (arg.type === INTEGER) {\n checkIntegerOverflow(res);\n }\n\n return {\n type: arg.type,\n value: res\n };\n}\n\nfunction max<T extends IntegerValue | NumberValue>(_vars: VariablesMap, ...args: T[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'max\\'.');\n }\n\n return {\n type: args[0].type,\n value: Math.max(...args.map(arg => arg.value))\n };\n}\n\nfunction min<T extends IntegerValue | NumberValue>(_vars: VariablesMap, ...args: T[]): EvalValue {\n if (!args.length) {\n throw new Error('Non empty argument list is required for function \\'min\\'.');\n }\n\n return {\n type: args[0].type,\n value: Math.min(...args.map(arg => arg.value))\n };\n}\n\nfunction maxNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MAX_NUMBER\n };\n}\n\nfunction minNumber(): EvalValue {\n return {\n type: NUMBER,\n value: MIN_NUMBER\n };\n}\n\nfunction maxInteger(): EvalValue {\n return {\n type: INTEGER,\n value: MAX_INT\n };\n}\n\nfunction minInteger(): EvalValue {\n return {\n type: INTEGER,\n value: MIN_INT\n };\n}\n\nfunction round(_vars: VariablesMap, arg: NumberValue): EvalValue {\n const sign = Math.sign(arg.value);\n\n return {\n type: NUMBER,\n // js treats Math.round(-0.5) as 0, which is different to other platforms\n value: sign * Math.round(Math.abs(arg.value))\n };\n}\n\nfunction floor(_vars: VariablesMap, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.floor(arg.value)\n };\n}\n\nfunction ceil(_vars: VariablesMap, arg: NumberValue): EvalValue {\n return {\n type: NUMBER,\n value: Math.ceil(arg.value)\n };\n}\n\nfunction signum(_vars: VariablesMap, arg: IntegerValue | NumberValue): EvalValue {\n return {\n type: arg.type,\n value: Math.sign(arg.value)\n };\n}\n\nfunction copySign<T extends IntegerValue | NumberValue>(_vars: VariablesMap, arg0: T, arg1: T): EvalValue {\n let res: number;\n\n if (arg1.value === 0 && arg0.type === INTEGER) {\n res = arg0.value;\n } else if (arg0.value === 0 && arg0.type === INTEGER) {\n res = 0;\n } else {\n let sign = Math.sign(arg1.value);\n\n if (arg0.type === NUMBER && sign === 0) {\n sign = Object.is(sign, 0) ? 1 : -1;\n }\n\n res = Math.abs(arg0.value) * sign;\n }\n\n if (arg0.type === INTEGER) {\n checkIntegerOverflow(res);\n }\n\n return {\n type: arg0.type,\n value: res\n };\n}\n\nexport function registerMath(): void {\n registerFunc('div', [INTEGER, INTEGER], div);\n registerFunc('div', [NUMBER, NUMBER], div);\n\n registerFunc('mod', [INTEGER, INTEGER], mod);\n registerFunc('mod', [NUMBER, NUMBER], mod);\n\n registerFunc('mul', [{\n type: INTEGER,\n isVararg: true\n }], mul);\n registerFunc('mul', [{\n type: NUMBER,\n isVararg: true\n }], mul);\n\n registerFunc('sub', [{\n type: INTEGER,\n isVararg: true\n }], sub);\n registerFunc('sub', [{\n type: NUMBER,\n isVararg: true\n }], sub);\n\n registerFunc('sum', [{\n type: INTEGER,\n isVararg: true\n }], sum);\n registerFunc('sum', [{\n type: NUMBER,\n isVararg: true\n }], sum);\n\n registerFunc('abs', [INTEGER], abs);\n registerFunc('abs', [NUMBER], abs);\n\n registerFunc('max', [{\n type: INTEGER,\n isVararg: true\n }], max);\n registerFunc('max', [{\n type: NUMBER,\n isVararg: true\n }], max);\n\n registerFunc('min', [{\n type: INTEGER,\n isVararg: true\n }], min);\n registerFunc('min', [{\n type: NUMBER,\n isVararg: true\n }], min);\n\n registerFunc('maxNumber', [], maxNumber);\n registerFunc('minNumber', [], minNumber);\n\n registerFunc('maxInteger', [], maxInteger);\n registerFunc('minInteger', [], minInteger);\n\n registerFunc('round', [NUMBER], round);\n registerFunc('floor', [NUMBER], floor);\n registerFunc('ceil', [NUMBER], ceil);\n\n registerFunc('signum', [NUMBER], signum);\n registerFunc('signum', [INTEGER], signum);\n\n registerFunc('copySign', [NUMBER, NUMBER], copySign);\n registerFunc('copySign', [INTEGER, INTEGER], copySign);\n}\n","import type { ColorValue, EvalValue, NumberValue, StringValue } from '../eval';\nimport type { ParsedColor } from '../../utils/correctColor';\nimport type { VariablesMap } from '../eval';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(\n field: keyof ParsedColor\n): (_vars: VariablesMap, color: StringValue | ColorValue) => EvalValue {\n return (_vars, color) => {\n const parsed = safeConvertColor(color.value);\n\n return {\n type: NUMBER,\n value: parsed[field] / 255\n };\n };\n}\n\nfunction colorSetter(\n field: keyof ParsedColor\n): (_vars: VariablesMap, color: StringValue | ColorValue, val: NumberValue) => EvalValue {\n return (_vars, color, val) => {\n const parsed = safeConvertColor(color.value);\n\n parsed[field] = val.value * 255;\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n };\n}\n\nconst getColorAlpha = colorGetter('a');\nconst getColorRed = colorGetter('r');\nconst getColorGreen = colorGetter('g');\nconst getColorBlue = colorGetter('b');\n\nconst setColorAlpha = colorSetter('a');\nconst setColorRed = colorSetter('r');\nconst setColorGreen = colorSetter('g');\nconst setColorBlue = colorSetter('b');\n\nfunction rgb(_vars: VariablesMap, red: NumberValue, green: NumberValue, blue: NumberValue): EvalValue {\n const parsed: ParsedColor = {\n a: 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nfunction argb(\n _vars: VariablesMap,\n alpha: NumberValue,\n red: NumberValue,\n green: NumberValue,\n blue: NumberValue\n): EvalValue {\n const parsed: ParsedColor = {\n a: alpha.value * 255,\n r: red.value * 255,\n g: green.value * 255,\n b: blue.value * 255\n };\n\n return {\n type: COLOR,\n value: stringifyColor(parsed)\n };\n}\n\nexport function registerColors(): void {\n registerFunc('getColorAlpha', [STRING], getColorAlpha);\n registerFunc('getColorAlpha', [COLOR], getColorAlpha);\n registerFunc('getColorRed', [STRING], getColorRed);\n registerFunc('getColorRed', [COLOR], getColorRed);\n registerFunc('getColorGreen', [STRING], getColorGreen);\n registerFunc('getColorGreen', [COLOR], getColorGreen);\n registerFunc('getColorBlue', [STRING], getColorBlue);\n registerFunc('getColorBlue', [COLOR], getColorBlue);\n\n registerFunc('setColorAlpha', [STRING, NUMBER], setColorAlpha);\n registerFunc('setColorAlpha', [COLOR, NUMBER], setColorAlpha);\n registerFunc('setColorRed', [STRING, NUMBER], setColorRed);\n registerFunc('setColorRed', [COLOR, NUMBER], setColorRed);\n registerFunc('setColorGreen', [STRING, NUMBER], setColorGreen);\n registerFunc('setColorGreen', [COLOR, NUMBER], setColorGreen);\n registerFunc('setColorBlue', [STRING, NUMBER], setColorBlue);\n registerFunc('setColorBlue', [COLOR, NUMBER], setColorBlue);\n\n registerFunc('rgb', [NUMBER, NUMBER, NUMBER], rgb);\n registerFunc('argb', [NUMBER, NUMBER, NUMBER, NUMBER], argb);\n}\n","import type { EvalValue, IntegerValue } from '../eval';\nimport type { VariablesMap } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\n\nfunction getDuration(milliseconds: IntegerValue, delimiter: number, whole?: number): EvalValue {\n if (milliseconds.value < 0) {\n throw new Error('Expecting non-negative number of milliseconds.');\n }\n\n let val = Math.floor(milliseconds.value / delimiter);\n if (whole) {\n val = val % whole;\n }\n\n return {\n type: INTEGER,\n value: val\n };\n}\n\nconst MS_IN_SECOND = 1000;\nconst SECONDS_IN_MINUTE = 60;\nconst MS_IN_MINUTE = 1000 * 60;\nconst MINUTES_IN_HOUR = 60;\nconst MS_IN_HOUR = 1000 * 60 * 60;\nconst HOURS_IN_DAY = 24;\nconst MS_IN_DAY = 1000 * 60 * 60 * 24;\nconst MS_IN_WEEK = 1000 * 60 * 60 * 24 * 7;\n\nfunction getIntervalSeconds(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(_vars: VariablesMap, milliseconds: IntegerValue): EvalValue {\n return getDuration(milliseconds, MS_IN_WEEK);\n}\n\nexport function registerInterval(): void {\n registerFunc('getIntervalSeconds', [INTEGER], getIntervalSeconds);\n registerFunc('getIntervalTotalSeconds', [INTEGER], getIntervalTotalSeconds);\n registerFunc('getIntervalMinutes', [INTEGER], getIntervalMinutes);\n registerFunc('getIntervalTotalMinutes', [INTEGER], getIntervalTotalMinutes);\n registerFunc('getIntervalHours', [INTEGER], getIntervalHours);\n registerFunc('getIntervalTotalHours', [INTEGER], getIntervalTotalHours);\n registerFunc('getIntervalTotalDays', [INTEGER], getIntervalTotalDays);\n registerFunc('getIntervalTotalWeeks', [INTEGER], getIntervalTotalWeeks);\n}\n","/* eslint-disable no-else-return */\n\nimport {\n BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n LogicalExpression,\n Node, NumberLiteral, StringLiteral, SumOperator,\n TemplateLiteral,\n UnaryExpression, Variable\n} from './ast';\nimport { findBestMatchedFunc, Func, funcByArgs } from './funcs/funcs';\nimport { evalError, roundInteger, typeToString, valToInternal, valToPreview, valToString } from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue } from './variable';\nimport { walk } from './walk';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime';\n\nexport interface EvalValueBase {\n type: string;\n value: unknown;\n}\n\nexport interface StringValue extends EvalValueBase {\n type: 'string';\n value: string;\n}\n\nexport interface UrlValue extends EvalValueBase {\n type: 'url';\n value: string;\n}\n\nexport interface ColorValue extends EvalValueBase {\n type: 'color';\n value: string;\n}\n\nexport interface NumberValue extends EvalValueBase {\n type: 'number';\n value: number;\n}\n\nexport interface IntegerValue extends EvalValueBase {\n type: 'integer';\n value: number;\n}\n\nexport interface BooleanValue extends EvalValueBase {\n type: 'boolean';\n value: number;\n}\n\nexport interface DatetimeValue extends EvalValueBase {\n type: 'datetime';\n value: Date;\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n BooleanValue | DatetimeValue;\n\nexport interface EvalError {\n type: 'error';\n value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nregister();\n\nfunction evalStringLiteral(vars: VariablesMap, expr: StringLiteral): EvalValue {\n return {\n type: STRING,\n value: expr.value\n };\n}\n\nfunction evalNumberLiteral(vars: VariablesMap, expr: NumberLiteral): EvalValue {\n return {\n type: NUMBER,\n value: expr.value\n };\n}\n\nfunction evalIntegerLiteral(vars: VariablesMap, expr: IntegerLiteral): EvalValue {\n return {\n type: INTEGER,\n value: expr.value\n };\n}\n\nfunction evalBooleanLiteral(vars: VariablesMap, expr: BooleanLiteral): EvalValue {\n return {\n type: BOOLEAN,\n value: expr.value ? 1 : 0\n };\n}\n\nfunction evalUnary(vars: VariablesMap, expr: UnaryExpression): EvalValue {\n const val = valToInternal(evalAny(vars, expr.argument));\n\n switch (expr.operator) {\n case '!':\n if (val.type === BOOLEAN) {\n return {\n type: BOOLEAN,\n value: val.value ? 0 : 1\n };\n } else {\n evalError(`${expr.operator}${valToPreview(val)}`, 'A Boolean is expected after a unary not.');\n }\n case '+':\n case '-':\n const mul = expr.operator === '+' ? 1 : -1;\n\n if (val.type === INTEGER) {\n return {\n type: INTEGER,\n value: val.value * mul\n };\n } else if (val.type === NUMBER) {\n return {\n type: NUMBER,\n value: val.value * mul\n };\n } else {\n evalError(\n `${expr.operator}${valToPreview(val)}`,\n `A Number is expected after a unary ${expr.operator === '+' ? 'plus' : 'minus'}.`\n );\n }\n }\n}\n\nfunction evalConditional(vars: VariablesMap, expr: ConditionalExpression): EvalValue {\n const test = valToInternal(evalAny(vars, expr.test));\n if (test.type === BOOLEAN) {\n if (test.value) {\n return evalAny(vars, expr.consequent);\n } else {\n return evalAny(vars, expr.alternate);\n }\n } else {\n evalError(\n `${valToPreview(test)} ? ${valToPreview(evalAny(vars, expr.consequent))} : ${valToPreview(evalAny(vars, expr.alternate))}`,\n 'Ternary must be called with a Boolean value as a condition.'\n );\n }\n}\n\nfunction evalTemplateLiteral(vars: VariablesMap, expr: TemplateLiteral): EvalValue {\n let result = '';\n\n if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n return evalAny(vars, expr.expressions[0]);\n }\n\n for (let i = 0; i < expr.expressions.length; ++i) {\n result += expr.quasis[i].value;\n result += valToString(evalAny(vars, expr.expressions[i]));\n }\n result += expr.quasis[expr.quasis.length - 1].value;\n\n return {\n type: STRING,\n value: result\n };\n}\n\nfunction evalLogicalExpression(vars: VariablesMap, expr: LogicalExpression): EvalValue {\n const left = valToInternal(evalAny(vars, expr.left));\n if (left.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ...`,\n `'${expr.operator}' must be called with boolean operands.`\n );\n }\n\n if (expr.operator === '||' && left.value) {\n return left;\n }\n if (expr.operator === '&&' && !left.value) {\n return {\n type: BOOLEAN,\n value: 0\n };\n }\n\n const right = valToInternal(evalAny(vars, expr.right));\n if (right.type !== BOOLEAN) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${expr.operator}' cannot be applied to different types: Boolean and ${typeToString(right.type)}.`\n );\n }\n\n return {\n type: BOOLEAN,\n value: right.value\n };\n}\n\nfunction evalBinaryEquality<T extends EvalValue>(operator: EqualityOperator, left: T, right: T): EvalValue {\n let res: boolean;\n\n if (left.type === DATETIME && right.type === DATETIME) {\n res = left.value.getTime() === right.value.getTime();\n } else {\n res = left.value === right.value;\n }\n\n if (operator === '!=') {\n res = !res;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinaryCompare<T extends EvalValue>(operator: CompareOperator, left: T, right: T): EvalValue {\n if (left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: boolean;\n const leftVal = left.type === DATETIME ? left.value.getTime() : left.value;\n const rightVal = right.type === DATETIME ? right.value.getTime() : right.value;\n\n if (operator === '>') {\n res = leftVal > rightVal;\n } else if (operator === '>=') {\n res = leftVal >= rightVal;\n } else if (operator === '<') {\n res = leftVal < rightVal;\n } else {\n res = leftVal <= rightVal;\n }\n\n return {\n type: BOOLEAN,\n value: res ? 1 : 0\n };\n}\n\nfunction evalBinarySum<T extends EvalValue>(operator: SumOperator, left: T, right: T): EvalValue {\n if (left.type !== STRING && left.type !== NUMBER && left.type !== INTEGER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n if (left.type === STRING) {\n if (operator === '-') {\n evalError(\n `${valToPreview(left)} - ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n return {\n type: STRING,\n value: left.value + right.value\n };\n }\n\n let res = operator === '+' ? left.value + (right.value as number) : left.value - (right.value as number);\n\n // integer\n if (left.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: left.type,\n value: res\n };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(operator: FactorOperator, left: T, right: T): EvalValue {\n if (left.type !== INTEGER && left.type !== NUMBER) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to ${typeToString(left.type)} type.`\n );\n }\n\n let res: number;\n if (operator === '*') {\n res = left.value * (right.value as number);\n } else if (operator === '/' || operator === '%') {\n if (right.value === 0) {\n evalError(\n `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n 'Division by zero is not supported.'\n );\n }\n if (operator === '/') {\n res = left.value / (right.value as number);\n } else {\n res = left.value % (right.value as number);\n }\n } else {\n throw new Error(`Unsupported operation ${operator}`);\n }\n\n if (left.type === INTEGER) {\n res = roundInteger(res);\n }\n\n return {\n type: left.type,\n value: res\n };\n}\n\nfunction evalBinaryExpression(vars: VariablesMap, expr: BinaryExpression): EvalValue {\n const operator = expr.operator;\n const left = evalAny(vars, expr.left);\n const right = evalAny(vars, expr.right);\n\n if (left.type !== right.type) {\n evalError(\n `${valToPreview(left)} ${expr.operator} ${valToPreview(right)}`,\n `Operator '${operator}' cannot be applied to different types: ${typeToString(left.type)} and ${typeToString(right.type)}.`\n );\n }\n\n if (operator === '==' || operator === '!=') {\n return evalBinaryEquality(operator, left, right);\n } else if (operator === '>' || operator === '>=' || operator === '<' || operator === '<=') {\n return evalBinaryCompare(operator, left, right);\n } else if (operator === '+' || operator === '-') {\n return evalBinarySum(operator, left, right);\n } else if (operator === '/' || operator === '*' || operator === '%') {\n return evalBinaryFactor(operator, left, right);\n }\n\n throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction argsToStr(args: EvalValue[]): string {\n return args.map(valToPreview).join(', ');\n}\n\nfunction evalCallExpression(vars: VariablesMap, expr: CallExpression): EvalValue {\n const funcName = expr.callee.name;\n\n let func: Func | undefined;\n\n const args = expr.arguments.map(arg => evalAny(vars, arg));\n const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n\n if (!funcByArgs.has(funcKey)) {\n const findRes = findBestMatchedFunc(funcName, args);\n if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n const prefix = `${funcName}(${argsToStr(args)})`;\n\n if (findRes.type === 'few' && args.length === 0) {\n evalError(prefix, `Non empty argument list is required for function '${funcName}'.`);\n } else if (findRes.type === 'many') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n evalError(prefix, `Function '${funcName}' has no matching override for given argument types: ${argsType}.`);\n } else {\n evalError(prefix, `Unknown function name: ${funcName}.`);\n }\n }\n func = findRes;\n } else {\n func = funcByArgs.get(funcKey);\n }\n\n if (!func) {\n throw new Error('Function not found');\n }\n\n try {\n return func.cb(vars, ...args);\n } catch (err: any) {\n const prefix = `${funcName}(${argsToStr(args)})`;\n evalError(prefix, err.message);\n }\n}\n\nfunction evalVariable(vars: VariablesMap, expr: Variable): EvalValue {\n const varName = expr.id.name;\n const variable = vars.get(varName);\n\n if (variable) {\n return variableToValue(variable);\n }\n\n throw new Error(`Variable '${varName}' is missing.`);\n}\n\nconst EVAL_MAP = {\n StringLiteral: evalStringLiteral,\n NumberLiteral: evalNumberLiteral,\n IntegerLiteral: evalIntegerLiteral,\n BooleanLiteral: evalBooleanLiteral,\n UnaryExpression: evalUnary,\n ConditionalExpression: evalConditional,\n TemplateLiteral: evalTemplateLiteral,\n LogicalExpression: evalLogicalExpression,\n BinaryExpression: evalBinaryExpression,\n CallExpression: evalCallExpression,\n Variable: evalVariable\n};\n\nexport function evalAny(vars: VariablesMap, expr: Node): EvalValue {\n if (expr.type in EVAL_MAP) {\n return EVAL_MAP[expr.type](vars, expr as any);\n }\n throw new Error('Unsupported expression');\n}\n\nfunction checkVariables(vars: VariablesMap, expr: Node): void {\n let unknownVariableName = '';\n\n walk(expr, {\n Variable(node) {\n if (!unknownVariableName && !vars.has(node.id.name)) {\n unknownVariableName = node.id.name;\n }\n }\n });\n\n if (unknownVariableName) {\n throw new Error(`Variable '${unknownVariableName}' is missing.`);\n }\n}\n\nexport function evalExpression(vars: VariablesMap, expr: Node): EvalResult {\n try {\n checkVariables(vars, expr);\n return evalAny(vars, expr);\n } catch (err: any) {\n return {\n type: 'error',\n value: err.message\n };\n }\n}\n","export function escapeRegExp(str: string): string {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n","import type { Node } from './ast';\nimport type { VariableValue } from './variable';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, VariablesMap } from './eval';\nimport { containsUnsetVariables, dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\n\nclass ExpressionBinding {\n private readonly ast: Node;\n\n constructor(ast: Node) {\n this.ast = ast;\n }\n\n /**\n * Applies variables into ast\n * @param variables\n * @param logError\n */\n apply(variables: VariablesMap, logError: LogError): VariableValue | string | undefined {\n if (containsUnsetVariables(this.ast, variables)) {\n return undefined;\n }\n\n try {\n const result = evalExpression(variables, this.ast);\n if (result.type === 'error') {\n logError(wrapError(new Error('Expression execution error'), {\n additional: {\n message: result.value\n }\n }));\n return undefined;\n }\n\n const value = result.value;\n if (value instanceof Date) {\n return dateToString(value);\n }\n if (result.type === 'boolean') {\n return Boolean(value);\n }\n if (result.type === 'color') {\n const parsed = parseColor(String(value));\n if (parsed) {\n return stringifyColor(parsed);\n }\n logError(wrapError(new Error('Expression execution error')));\n }\n return value;\n } catch (err) {\n logError(wrapError(new Error('Expression execution error')));\n return undefined;\n }\n }\n}\n\nexport type MaybeMissing<T> = T | (\n T extends (infer U)[] ?\n MaybeMissing<U>[] :\n (\n T extends object ?\n {\n [P in keyof T]: MaybeMissing<T[P]>;\n } :\n T | undefined\n )\n);\n\nfunction hasExpressions(str: string): boolean {\n return str.indexOf('@{') > -1 || str.indexOf('\\\\') > -1;\n}\n\nfunction prepareVarsObj<T>(\n jsonProp: T,\n store: {\n vars: string[];\n hasExpression: boolean;\n },\n logError: LogError\n): unknown {\n if (jsonProp) {\n if (typeof jsonProp === 'string') {\n if (hasExpressions(jsonProp)) {\n store.hasExpression = true;\n\n try {\n const ast = parse(jsonProp, {\n startRule: 'JsonStringContents'\n });\n const propVars = gatherVarsFromAst(ast);\n store.vars.push(...propVars);\n\n return new ExpressionBinding(ast);\n } catch (err) {\n logError(wrapError(new Error('Unable to parse expression'), {\n additional: {\n expression: jsonProp\n }\n }));\n return undefined;\n }\n }\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(item => prepareVarsObj(item, store, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = prepareVarsObj(jsonProp[key], store, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nfunction applyVars(jsonProp: unknown, variables: VariablesMap, logError: LogError): unknown {\n if (jsonProp) {\n if (jsonProp instanceof ExpressionBinding) {\n return jsonProp.apply(variables, logError);\n } else if (Array.isArray(jsonProp)) {\n return jsonProp.map(it => applyVars(it, variables, logError));\n } else if (typeof jsonProp === 'object') {\n const res: Record<string, unknown> = {};\n for (const key in jsonProp) {\n res[key] = applyVars(jsonProp[key as keyof typeof jsonProp], variables, logError);\n }\n return res;\n }\n }\n return jsonProp;\n}\n\nexport function prepareVars<T>(jsonProp: T, logError: LogError): {\n vars: string[];\n hasExpression: boolean;\n applyVars: (variables: VariablesMap) => MaybeMissing<T>;\n} {\n const store: {\n vars: string[];\n hasExpression: boolean;\n } = {\n vars: [],\n hasExpression: false\n };\n const root = prepareVarsObj(jsonProp, store, logError);\n\n const vars = uniq(store.vars);\n\n return {\n vars,\n hasExpression: store.hasExpression,\n applyVars(variables: VariablesMap) {\n return applyVars(root, variables, logError) as MaybeMissing<T>;\n }\n };\n}\n","export function uniq(list: string[]): string[] {\n return [...new Set(list)];\n}\n","import type { Writable } from 'svelte/types/runtime/store';\nimport { createPagersStore } from './pagers';\n\nexport const storesMap: Record<string, () => Writable<any>> = {\n pagers: createPagersStore\n};\n","import { writable } from 'svelte/store';\n\nexport interface PagerData {\n instId: string;\n size: number;\n currentItem: number;\n scrollToPagerItem(index: number): void;\n}\n\nexport function createPagersStore() {\n return writable(new Map<string, PagerData>());\n}\n","import type { Writable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nconst controllerToStore = new Map<GlobalVariablesController, Writable<string>>();\nconst controllerToVars = new Map<GlobalVariablesController, Map<string, Variable>>();\n\nexport function getControllerStore(controller: GlobalVariablesController): Writable<string> {\n const store = controllerToStore.get(controller) || writable('');\n\n if (!controllerToStore.has(controller)) {\n controllerToStore.set(controller, store);\n }\n\n return store;\n}\n\nexport function getControllerVars(controller: GlobalVariablesController): Map<string, Variable> {\n const map = controllerToVars.get(controller) || new Map();\n\n if (!controllerToVars.has(controller)) {\n controllerToVars.set(controller, map);\n }\n\n return map;\n}\n\nexport class GlobalVariablesController {\n setVariable(variable: Variable): void {\n const name = variable.getName();\n const vars = getControllerVars(this);\n\n if (vars.has(name)) {\n throw new Error('Variable with the same name already exist');\n } else {\n vars.set(name, variable);\n const store = getControllerStore(this);\n store.set(name);\n }\n }\n\n getVariable(variableName: string): Variable | undefined {\n const vars = getControllerVars(this);\n\n return vars.get(variableName);\n }\n}\n\nexport function createGlobalVariablesController() {\n return new GlobalVariablesController();\n}\n","import { Action, DivTimer } from '../../typings/common';\nimport { LogError, wrapError } from './wrapError';\nimport { MaybeMissing } from '../expressions/json';\nimport { VariableType } from '../expressions/variable';\n\ninterface TimerState {\n state: 'stopped' | 'running' | 'paused';\n definition: DivTimer;\n duration?: number;\n tick?: number;\n durationTimeout?: number;\n tickTimeout?: number;\n tickStarted?: number;\n tickPassed?: number;\n tickCount?: number;\n tickCountPredict?: number;\n durationStarted?: number;\n durationPassed?: number;\n hold?: boolean;\n}\n\nconst AVAIL_ACTIONS_NAMES = ['start', 'stop', 'pause', 'resume', 'cancel', 'reset'] as const;\n\ntype AVAIL_ACTIONS_LIST = typeof AVAIL_ACTIONS_NAMES[number];\n\nconst AVAIL_ACTIONS = new Set<string>(AVAIL_ACTIONS_NAMES);\n\ntype ApplyVarsFunc = <T>(json: T) => MaybeMissing<T>;\n\ntype HasVariableWithTypeFunc = (name: string, type: VariableType) => boolean;\n\ntype SetVariableValueFunc = (name: string, value: unknown) => void;\n\ntype ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean) => Promise<void>;\n\nexport class TimersController {\n private readonly timers: Map<string, TimerState> = new Map();\n private readonly logError: LogError;\n private readonly applyVars: ApplyVarsFunc;\n private readonly hasVariableWithType: HasVariableWithTypeFunc;\n private readonly setVariableValue: SetVariableValueFunc;\n private readonly execAnyActions: ExecAnyActionsFunc;\n private readonly visibilityHandler: () => void;\n private awaitActions: {\n id: string;\n action: AVAIL_ACTIONS_LIST;\n }[] = [];\n\n constructor(opts: {\n logError: LogError;\n applyVars: ApplyVarsFunc;\n hasVariableWithType: HasVariableWithTypeFunc;\n setVariableValue: SetVariableValueFunc;\n execAnyActions: ExecAnyActionsFunc;\n }) {\n this.logError = opts.logError;\n this.applyVars = opts.applyVars;\n this.hasVariableWithType = opts.hasVariableWithType;\n this.setVariableValue = opts.setVariableValue;\n this.execAnyActions = opts.execAnyActions;\n\n this.visibilityHandler = () => {\n if (document.visibilityState === 'visible') {\n this.awaitActions.forEach(({ id, action }) => {\n this.execTimerAction(id, action);\n });\n this.awaitActions = [];\n this.unholdAll();\n } else {\n this.holdAll();\n }\n };\n\n document.addEventListener('visibilitychange', this.visibilityHandler);\n }\n\n destroy(): void {\n document.removeEventListener('visibilitychange', this.visibilityHandler);\n\n for (const [_id, timer] of this.timers) {\n this.stopTimerTimeouts(timer);\n }\n }\n\n createTimer(timer: DivTimer) {\n if (!timer?.id) {\n this.logError(wrapError(new Error('Missing timer id')));\n return;\n }\n if (!(timer.duration || timer.tick_interval && (timer.value_variable || timer.tick_actions))) {\n this.logError(wrapError(new Error('Misconfigured timer'), {\n additional: {\n id: timer.id\n }\n }));\n return;\n }\n\n this.timers.set(timer.id, {\n state: 'stopped',\n definition: timer\n });\n }\n\n execTimerAction(id: string | null, action: string | null) {\n if (!id || !action || !this.timers.has(id) || !AVAIL_ACTIONS.has(action)) {\n this.logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n return;\n }\n const actionTyped = action as AVAIL_ACTIONS_LIST;\n\n if (document.visibilityState !== 'visible') {\n // wait till the page is visible\n this.awaitActions.push({\n id,\n action: actionTyped\n });\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const timer = this.timers.get(id)!;\n this[actionTyped](timer);\n }\n\n private stopTimerTimeouts(timer: TimerState): void {\n if (timer.durationTimeout) {\n clearTimeout(timer.durationTimeout);\n timer.durationTimeout = undefined;\n }\n if (timer.tickTimeout) {\n clearTimeout(timer.tickTimeout);\n timer.tickTimeout = undefined;\n }\n }\n\n private tickOrUnholdAction(timer: TimerState): void {\n const now = performance.now();\n const value = (timer.durationPassed || 0) + now - (timer.durationStarted || 0);\n if (timer.duration && value > timer.duration) {\n return;\n }\n this.updateVariable(timer, value);\n this.callActions(timer, 'tick');\n\n if (timer.tickCount !== undefined) {\n ++timer.tickCount;\n }\n }\n\n private startOrResume(timer: TimerState): void {\n timer.state = 'running';\n timer.hold = false;\n\n timer.durationStarted = performance.now();\n\n const duration = timer.duration;\n if (duration) {\n timer.durationTimeout = window.setTimeout(() => {\n this.updateVariable(timer, duration);\n if (\n timer.tickCountPredict &&\n timer.tickCount !== undefined &&\n timer.tickCount < timer.tickCountPredict\n ) {\n this.callActions(timer, 'tick');\n }\n this.stop(timer);\n }, Math.max(0, duration - (timer.durationPassed || 0)));\n }\n const tick = timer.tick;\n if (tick) {\n const startTick = () => {\n const started = timer.tickStarted = performance.now();\n const duration = Math.max(0, tick - (timer.tickPassed || 0));\n timer.tickTimeout = window.setTimeout(() => {\n this.tickOrUnholdAction(timer);\n timer.tickPassed = ((performance.now() - started) - duration) % tick;\n startTick();\n }, duration);\n };\n\n startTick();\n }\n }\n\n private start(timer: TimerState): void {\n if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer is paused')));\n return;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && !this.hasVariableWithType(variableName, 'integer')) {\n this.logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name: variableName\n }\n }));\n return;\n }\n\n if (variableName) {\n this.setVariableValue(variableName, 0);\n }\n\n if (timer.definition.duration) {\n timer.duration = this.applyVars(timer.definition.duration);\n }\n if (timer.definition.tick_interval) {\n timer.tick = this.applyVars(timer.definition.tick_interval);\n }\n // duration < 0 is incorrect\n // tick_interval <= is incorrect\n if (\n timer.duration !== undefined && timer.duration < 0 ||\n timer.tick !== undefined && timer.tick <= 0\n ) {\n this.logError(wrapError(new Error('Incorrect timer properties'), {\n additional: {\n id: timer.definition.id\n }\n }));\n return;\n }\n\n if (timer.duration !== undefined && timer.tick !== undefined) {\n timer.tickCount = 0;\n timer.tickCountPredict = Math.floor(timer.duration / timer.tick);\n }\n\n this.startOrResume(timer);\n }\n\n private stop(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n this.callActions(timer, 'end');\n }\n\n private pause(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'paused') {\n this.logError(wrapError(new Error('The timer has already been paused')));\n return;\n }\n\n timer.state = 'paused';\n\n this.stopTimerTimeouts(timer);\n\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n const variableName = timer.definition.value_variable;\n if (variableName && timer.durationPassed) {\n this.setVariableValue(variableName, Math.round(timer.durationPassed));\n }\n }\n\n private resume(timer: TimerState): void {\n if (timer.state === 'stopped') {\n this.logError(wrapError(new Error('The timer has already been stopped')));\n return;\n } else if (timer.state === 'running') {\n this.logError(wrapError(new Error('The timer is already running')));\n return;\n }\n\n this.startOrResume(timer);\n }\n\n private cancel(timer: TimerState): void {\n if (timer.state === 'stopped') {\n return;\n }\n\n timer.state = 'stopped';\n timer.durationPassed = 0;\n timer.tickPassed = 0;\n this.stopTimerTimeouts(timer);\n }\n\n private reset(timer: TimerState): void {\n this.cancel(timer);\n this.start(timer);\n }\n\n private updateVariable(timer: TimerState, value: number): void {\n const variableName = timer.definition.value_variable;\n if (variableName) {\n this.setVariableValue(variableName, Math.round(value));\n }\n }\n\n private callActions(timer: TimerState, type: 'tick' | 'end'): void {\n const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n if (actions) {\n const actionsWithExpressions = this.applyVars(actions);\n this.execAnyActions(actionsWithExpressions, false);\n }\n }\n\n private holdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running') {\n timer.hold = true;\n this.stopTimerTimeouts(timer);\n }\n }\n }\n\n private unholdAll(): void {\n for (const [_id, timer] of this.timers) {\n if (timer.state === 'running' && timer.hold) {\n // All timeouts were canceled, but the time is not stopped\n const now = performance.now();\n\n if (timer.durationStarted) {\n timer.durationPassed = (timer.durationPassed || 0) + now - timer.durationStarted;\n }\n if (timer.tickStarted) {\n timer.tickPassed = (timer.tickPassed || 0) + now - timer.tickStarted;\n }\n\n if (timer.tick) {\n // Run tick actions and update variable instantly after the page is shown, if:\n // Timer has the tick_interval\n // Timer is not done yet (check inside function)\n this.tickOrUnholdAction(timer);\n }\n\n this.startOrResume(timer);\n }\n }\n }\n}\n","<script lang=\"ts\">\n import type { Readable, Writable } from 'svelte/types/runtime/store';\n import { onDestroy, setContext, tick } from 'svelte';\n import { derived, writable } from 'svelte/store';\n\n import css from './Root.module.css';\n\n import type {\n Action,\n VisibilityAction,\n ComponentCallback,\n CustomActionCallback,\n DivBase,\n DivJson,\n ErrorCallback,\n Platform,\n StatCallback,\n TemplateContext,\n Theme,\n Customization\n } from '../../typings/common';\n import type { AppearanceTransition, DivBaseData, TransitionChange } from '../types/base';\n import type { SwitchElements, Overflow } from '../types/switch-elements';\n import type { DivStateData } from '../types/state';\n import type { TintMode } from '../types/image';\n import Unknown from './utilities/Unknown.svelte';\n import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n import { ROOT_CTX, RootCtxValue, Running } from '../context/root';\n import { applyTemplate } from '../utils/applyTemplate';\n import { wrapError, WrappedError } from '../utils/wrapError';\n import { simpleCheckInput } from '../utils/simpleCheckInput';\n import { ACTION_CTX, ActionCtxValue } from '../context/action';\n import { STATE_CTX, StateCtxValue, StateInterface } from '../context/state';\n import { constStore } from '../utils/constStore';\n import {\n MaybeMissing,\n prepareVars\n } from '../expressions/json';\n import { storesMap } from '../stores';\n import { evalExpression } from '../expressions/eval';\n import { parse } from '../expressions/expressions';\n import { gatherVarsFromAst } from '../expressions/utils';\n import { Truthy } from '../utils/truthy';\n import { createVariable, TYPE_TO_CLASS, Variable, VariableType, VariableValue } from '../expressions/variable';\n import {\n getControllerStore,\n getControllerVars,\n GlobalVariablesController\n } from '../expressions/globalVariablesController';\n import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n import { TimersController } from '../utils/timers';\n\n export let id: string;\n export let json: Partial<DivJson> = {};\n export let platform: Platform = 'auto';\n export let theme: Theme = 'system';\n export let globalVariablesController: GlobalVariablesController = new GlobalVariablesController();\n export let mix = '';\n export let customization: Customization = {};\n export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n export let onError: ErrorCallback | undefined = undefined;\n export let onStat: StatCallback | undefined = undefined;\n export let onCustomAction: CustomActionCallback | undefined = undefined;\n export let onComponent: ComponentCallback | undefined = undefined;\n\n let isDesktop = writable(platform === 'desktop');\n if (platform === 'auto' && typeof matchMedia !== 'undefined') {\n const touchQuery = matchMedia('(any-pointer: coarse)');\n isDesktop.set(!touchQuery.matches);\n touchQuery.addListener(() => {\n isDesktop.set(!touchQuery.matches);\n });\n }\n\n let currentTheme: 'light' | 'dark' = 'light';\n let themeQuery: MediaQueryList | null = null;\n $: if (theme === 'light' || theme === 'dark') {\n currentTheme = theme;\n } else if (theme === 'system') {\n if (typeof matchMedia !== 'undefined') {\n if (!themeQuery) {\n themeQuery = matchMedia('(prefers-color-scheme: dark)');\n themeQuery.addListener(themeQueryListener);\n }\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n } else {\n currentTheme = 'light';\n }\n } else {\n logError(wrapError(new Error('Unsupported theme')));\n }\n\n $: if (currentTheme) {\n updateTheme();\n }\n\n function themeQueryListener(): void {\n if (theme !== 'system' || !themeQuery) {\n return;\n }\n\n currentTheme = themeQuery.matches ? 'dark' : 'light';\n }\n\n export function setTheme(newTheme: Theme): void {\n theme = newTheme;\n }\n\n export function getDebugVariables() {\n if (!process.env.DEVTOOL) {\n return;\n }\n\n return variables;\n }\n\n const builtinSet = new Set(builtinProtocols);\n\n let hasError = false;\n\n if (!json) {\n hasError = true;\n logError(wrapError(new Error('\"json\" prop is required')));\n }\n\n if (!id) {\n hasError = true;\n logError(wrapError(new Error('\"id\" prop is required')));\n }\n\n let initialError = simpleCheckInput(json);\n let templateContext: TemplateContext = {};\n const templates = json.templates || {};\n\n if (initialError) {\n hasError = true;\n logError(initialError);\n }\n\n const running: Record<Running, boolean> = {\n stateChange: false\n };\n\n // Will notify about new global variables\n const globalVariablesStore = getControllerStore(globalVariablesController);\n // Global variables only\n const globalVariables = getControllerVars(globalVariablesController);\n // Local variables only\n const localVariables = new Map<string, Variable>();\n // Local and global variables combined, with local in precedence\n const variables = new Map<string, Variable>();\n // Stores for notify unset global variables\n const awaitingGlobalVariables = new Map<string, Writable<any>>();\n let timersController: TimersController | null = null;\n\n /** @deprecated */\n export function setVariable(name: string, value: VariableValue): void {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n const varInstance = variables.get(name);\n if (varInstance) {\n varInstance.setValue(value);\n }\n }\n }\n\n /** @deprecated */\n export function getVariable(name: string): VariableValue | undefined {\n const varInstance = variables.get(name);\n\n return varInstance?.getValue();\n }\n\n function getVariableInstance(name: string, type: VariableType): Variable | undefined {\n const variable = variables.get(name);\n\n if (variable) {\n const foundType = variable.getType();\n\n if (foundType !== type) {\n logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n additional: {\n name,\n foundType\n }\n }));\n return;\n }\n }\n\n return variable;\n }\n\n function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n return customization?.[prop];\n }\n\n function getDerivedFromVars<T>(jsonProp: T): Readable<MaybeMissing<T>> {\n if (!jsonProp) {\n return constStore(jsonProp);\n }\n\n const prepared = prepareVars(jsonProp, logError);\n if (!prepared.vars.length) {\n if (prepared.hasExpression) {\n return constStore(prepared.applyVars(variables));\n }\n return constStore(jsonProp);\n }\n const stores = prepared.vars.map(name => {\n return variables.get(name) || awaitVariableChanges(name);\n }).filter(Truthy);\n\n return derived(stores, () => prepared.applyVars(variables));\n }\n\n function getJsonWithVars<T>(jsonProp: T): MaybeMissing<T> {\n const prepared = prepareVars(jsonProp, logError);\n\n if (!prepared.vars.length) {\n return jsonProp;\n }\n\n return prepared.applyVars(variables);\n }\n\n function logError(error: WrappedError): void {\n if (onError) {\n onError({\n error\n });\n } else if (error?.level === 'warn') {\n console.warn(error);\n } else {\n console.error(error);\n }\n }\n\n function logStat(type: string, action: Action): void {\n if (onStat) {\n onStat({\n type,\n action\n });\n }\n }\n\n function hasTemplate(templateName: string): boolean {\n return templateName in templates;\n }\n\n function processTemplate(json: DivBaseData, templateContext: TemplateContext): {\n json: DivBaseData;\n templateContext: TemplateContext;\n } {\n if (!json) {\n return {\n json,\n templateContext\n };\n }\n\n const usedTypes = new Set([json.type]);\n\n while (json.type in templates) {\n ({\n json,\n templateContext\n } = applyTemplate(json as DivBase, templateContext, templates, logError));\n\n if (usedTypes.has(json.type)) {\n return {\n json,\n templateContext\n };\n }\n usedTypes.add(json.type);\n }\n\n return {\n json,\n templateContext\n };\n }\n\n function registerComponentReal({\n node,\n json,\n origJson,\n templateContext\n }: {\n node: HTMLElement;\n json: Partial<DivBaseData>;\n origJson: DivBase | undefined;\n templateContext: TemplateContext;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'mount',\n node,\n json: json as DivBase,\n origJson,\n templateContext\n });\n }\n }\n function unregisterComponentReal({\n node\n }: {\n node: HTMLElement;\n }): void {\n if (onComponent) {\n onComponent({\n type: 'destroy',\n node\n });\n }\n }\n\n let idCounter = 0;\n function genId(key: string): string {\n if (process.env.IS_PROD) {\n return `${id}-${idCounter++}`;\n }\n return `${id}-${key}-${idCounter++}`;\n }\n\n function genClass(key: string): string {\n return `divkit-${genId(key)}`;\n }\n\n let svgFiltersMap: Record<string, string> = {};\n let svgFilterUsages: Record<string, number> = {};\n\n function addSvgFilter(color: string, mode: TintMode): string {\n const key = `${color}:${mode}`;\n svgFilterUsages[key] = svgFilterUsages[key] || 0;\n ++svgFilterUsages[key];\n\n if (svgFiltersMap[key]) {\n return svgFiltersMap[key];\n }\n\n const filterId = `${genId('root')}-svg-filter`;\n svgFiltersMap = {\n ...svgFiltersMap,\n [key]: filterId\n };\n\n return filterId;\n }\n\n function removeSvgFilter(color: string | undefined, mode: TintMode): void {\n if (!color) {\n return;\n }\n\n const key = `${color}:${mode}`;\n if (!svgFilterUsages[key]) {\n return;\n }\n\n if (--svgFilterUsages[key] === 0) {\n svgFiltersMap = Object.keys(svgFiltersMap).reduce((acc, item) => {\n if (svgFilterUsages[item]) {\n acc[item] = svgFiltersMap[item];\n }\n return acc;\n }, {} as typeof svgFiltersMap);\n }\n }\n\n function setState(stateId: string | null): void {\n if (!stateId) {\n throw new Error('Missing state id');\n }\n let state: StateInterface = stateInterface;\n let parts = stateId.split('/');\n\n parts = ['root', ...parts];\n if (parts.length < 2 || parts.length % 2 !== 0) {\n throw new Error('Incorrect state id format');\n }\n\n for (let i = 0; i < parts.length; i += 2) {\n const divId = parts[i];\n const selectedStateId = parts[i + 1];\n\n let childState = state.getChild(divId);\n if (childState) {\n childState.setState(selectedStateId);\n state = childState;\n } else {\n return;\n }\n }\n }\n\n function setCurrentItem(id: string | null, item: string | null): void {\n if (!id || !item) {\n throw new Error('Missing data for \"set-current-item\" action');\n }\n\n if (isNaN(Number(item))) {\n throw new Error('Incorrect item for \"set-current-item\" action');\n }\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setCurrentItem(Number(item));\n }\n }\n\n function setPreviousItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-previous-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-previous-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setPreviousItem(overflow as Overflow);\n }\n }\n\n function setNextItem(id: string | null, overflow: string | null): void {\n if (!id) {\n throw new Error('Missing id for \"set-next-item\" action');\n }\n\n if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n throw new Error('Incorrect overflow value for \"set-next-item\" action');\n }\n\n overflow = overflow || 'clamp';\n\n const instance = getInstance<SwitchElements>(id);\n\n if (instance) {\n instance.setNextItem(overflow as Overflow);\n }\n }\n\n export function execAction(action: MaybeMissing<Action | VisibilityAction>): void {\n const actionUrl = action.url ? String(action.url) : '';\n\n if (actionUrl) {\n try {\n const url = actionUrl.replace(/div-action:\\/\\//, '');\n const parts = /([^?]+)\\?(.+)/.exec(url);\n if (!parts) {\n return;\n }\n const params = new URLSearchParams(parts[2]);\n\n switch (parts[1]) {\n case 'set_state':\n setState(params.get('state_id'));\n break;\n case 'set_current_item':\n setCurrentItem(params.get('id'), params.get('item'));\n break;\n case 'set_previous_item':\n setPreviousItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_next_item':\n setNextItem(params.get('id'), params.get('overflow'));\n break;\n case 'set_variable':\n const name = params.get('name');\n const value = params.get('value');\n\n if (name && value !== null) {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.set(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n } else {\n logError(wrapError(new Error('Incorrect set_variable_action'), {\n additional: {\n url\n }\n }));\n }\n break;\n case 'timer':\n const action = params.get('action');\n const id = params.get('id');\n\n if (timersController) {\n timersController.execTimerAction(id, action);\n } else {\n logError(wrapError(new Error('Incorrect timer action'), {\n additional: {\n id,\n action\n }\n }));\n }\n break;\n default:\n logError(wrapError(new Error('Unknown type of action'), {\n additional: {\n url: actionUrl\n }\n }));\n }\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n url: actionUrl\n }\n }));\n }\n }\n }\n\n async function execAnyActions(actions: MaybeMissing<Action[]> | undefined, processUrls?: boolean): Promise<void> {\n if (!actions) {\n return;\n }\n\n for (let i = 0; i < actions.length; ++i) {\n let action = actions[i];\n\n const actionUrl = action.url;\n if (actionUrl) {\n const schema = getUrlSchema(actionUrl);\n if (schema) {\n if (isBuiltinSchema(schema, builtinSet)) {\n if (processUrls) {\n if (action.target === '_blank') {\n const win = window.open('', '_blank');\n if (win) {\n win.opener = null;\n win.location = actionUrl;\n }\n } else {\n location.href = actionUrl;\n }\n }\n } else if (schema === 'div-action') {\n execAction(action);\n await tick();\n } else if (action.log_id) {\n execCustomAction(action as Action & { url: string });\n await tick();\n }\n }\n }\n }\n actions.forEach(action => {\n if (action.log_id) {\n logStat('click', action as Action);\n }\n });\n }\n\n function execCustomAction(action: (Action | VisibilityAction) & { url: string }): void {\n onCustomAction?.(action);\n }\n\n function isRunning(type: Running): boolean {\n return running[type];\n }\n\n function setRunning(type: Running, val: boolean): void {\n running[type] = val;\n }\n\n const instancesMap: Map<string, unknown> = new Map();\n function registerInstance<T>(id: string, block: T) {\n if (instancesMap.has(id)) {\n logError(wrapError(new Error('Duplicate instance id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n instancesMap.set(id, block);\n }\n function unregisterInstance(id: string) {\n instancesMap.delete(id);\n }\n\n function getInstance<T>(id: string): T | undefined {\n if (!instancesMap.has(id)) {\n logError(wrapError(new Error('Missing instance with id'), {\n additional: {\n id\n }\n }));\n return;\n }\n\n return instancesMap.get(id) as T;\n }\n\n const stores = new Map<string, Writable<any>>();\n\n function setStore(id: string) {\n if (stores.has(id)) {\n return;\n }\n\n stores.set(id, storesMap[id]());\n }\n\n function getStore<T>(id: string): Writable<T> {\n if (!stores.has(id)) {\n setStore(id);\n }\n\n return stores.get(id) as Writable<T>;\n }\n\n function filterDefinedVars(vars: Set<string>): Set<string> {\n for (const varName of vars) {\n if (variables.has(varName)) {\n vars.delete(varName);\n }\n }\n\n return vars;\n }\n\n function awaitVariableChanges(variableName: string): Readable<any> {\n const store = awaitingGlobalVariables.get(variableName) || writable(undefined);\n\n if (!awaitingGlobalVariables.has(variableName)) {\n awaitingGlobalVariables.set(variableName, store);\n }\n\n return store;\n }\n\n function waitForVars(vars: string[]): Promise<void> {\n const remaining = new Set(vars);\n\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const unsubscribe = globalVariablesStore.subscribe(() => {\n filterDefinedVars(remaining);\n\n if (!remaining.size) {\n unsubscribe();\n resolve();\n }\n });\n });\n }\n\n function updateTheme(): void {\n if (!palette) {\n return;\n }\n\n const list = palette[currentTheme];\n list.forEach(item => {\n const varInstance = variables.get(item.name);\n\n if (varInstance) {\n varInstance.setValue(item.color);\n }\n });\n }\n\n function getBuiltinProtocols(): Set<string> {\n return builtinSet;\n }\n\n setContext<RootCtxValue>(ROOT_CTX, {\n logError,\n logStat,\n hasTemplate,\n processTemplate,\n genId,\n genClass,\n execAction,\n execAnyActions,\n execCustomAction,\n isRunning,\n setRunning,\n registerInstance,\n unregisterInstance,\n addSvgFilter,\n removeSvgFilter,\n getDerivedFromVars,\n getJsonWithVars,\n getStore,\n getVariable: getVariableInstance,\n getCustomization,\n getBuiltinProtocols,\n isDesktop,\n registerComponent: process.env.DEVTOOL ? registerComponentReal : undefined,\n unregisterComponent: process.env.DEVTOOL ? unregisterComponentReal : undefined\n });\n\n setContext<ActionCtxValue>(ACTION_CTX, {\n hasAction(): boolean {\n return false;\n }\n });\n\n const stateInterface: StateInterface = {\n setState(_stateId: string): void {\n throw new Error('Not implemented');\n },\n getChild(id: string): StateInterface | undefined {\n if (childStateMap && childStateMap.has(id)) {\n return childStateMap.get(id);\n }\n\n logError(wrapError(new Error('Missing state block with id'), {\n additional: {\n id\n }\n }));\n\n return undefined;\n }\n };\n\n let childStateMap: Map<string, StateInterface> | null = null;\n setContext<StateCtxValue>(STATE_CTX, {\n registerInstance(id: string, block: StateInterface) {\n if (!childStateMap) {\n childStateMap = new Map();\n }\n\n if (childStateMap.has(id)) {\n logError(wrapError(new Error('Duplicate state with id'), {\n additional: {\n id\n }\n }));\n } else {\n childStateMap.set(id, block);\n }\n },\n unregisterInstance(id: string) {\n childStateMap?.delete(id);\n },\n runVisibilityTransition(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement,\n _direction: 'in' | 'out'\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionIn(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionOut(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: AppearanceTransition,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n registerChildWithTransitionChange(\n _json: DivBaseData,\n _templateContext: TemplateContext,\n _transitions: TransitionChange,\n _node: HTMLElement\n ) {\n return Promise.resolve();\n },\n hasTransitionChange(_id?: string): boolean {\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerChild(_id: string) {\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n unregisterChild(_id: string) {\n }\n });\n\n function hasVariableWithType(name: string, type: VariableType): boolean {\n const instance = variables.get(name);\n\n return instance?.getType() === type;\n }\n\n function setVariableValue(name: string, value: unknown): void {\n const variableInstance = variables.get(name);\n if (variableInstance) {\n variableInstance.setValue(value);\n } else {\n logError(wrapError(new Error('Cannot find variable'), {\n additional: {\n name\n }\n }));\n }\n }\n\n const startVariables = json?.card?.variables;\n if (Array.isArray(startVariables)) {\n startVariables.forEach(variable => {\n if (variable && variable.type in TYPE_TO_CLASS && variable.name) {\n if (localVariables.has(variable.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: variable.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(variable.name, variable.type, variable.value);\n\n localVariables.set(variable.name, varInstance);\n variables.set(variable.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: variable.name\n }\n }));\n }\n }\n });\n }\n\n const palette = json.palette;\n if (palette) {\n const list = palette[currentTheme];\n list.forEach(item => {\n if (localVariables.has(item.name)) {\n logError(wrapError(new Error('Duplicate variable'), {\n additional: {\n name: item.name\n }\n }));\n\n return;\n }\n\n try {\n const varInstance = createVariable(item.name, 'color', item.color);\n\n localVariables.set(item.name, varInstance);\n variables.set(item.name, varInstance);\n } catch (err: any) {\n logError(wrapError(err, {\n additional: {\n name: item.name\n }\n }));\n }\n });\n }\n\n for (const [varName, variable] of globalVariables) {\n if (!variables.has(varName)) {\n variables.set(varName, variable);\n }\n }\n\n globalVariablesStore.subscribe(newVarName => {\n if (newVarName && !variables.has(newVarName)) {\n const varInstance = globalVariables.get(newVarName) as Variable;\n variables.set(newVarName, varInstance);\n\n const awaitingStore = awaitingGlobalVariables.get(newVarName);\n\n if (awaitingStore) {\n let counter = 0;\n varInstance.subscribe(() => {\n awaitingStore.set(++counter);\n });\n }\n }\n });\n\n const variableTriggers = json?.card?.variable_triggers;\n if (Array.isArray(variableTriggers)) {\n variableTriggers.forEach(trigger => {\n let prevConditionResult = false;\n\n if (typeof trigger.condition !== 'string') {\n logError(wrapError(new Error('variable_trigger has a condition that is not a string'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n const mode = trigger.mode || 'on_condition';\n\n if (mode !== 'on_variable' && mode !== 'on_condition') {\n logError(wrapError(new Error('variable_trigger has an unsupported mode'), {\n additional: {\n mode\n }\n }));\n return;\n }\n\n try {\n const ast = parse(trigger.condition, {\n startRule: 'JsonStringContents'\n });\n const exprVars = gatherVarsFromAst(ast);\n if (!exprVars.length) {\n logError(wrapError(new Error('variable_trigger must have variables in the condition'), {\n additional: {\n condition: trigger.condition\n }\n }));\n return;\n }\n\n waitForVars(exprVars).then(() => {\n const stores = exprVars.map(name => variables.get(name)).filter(Truthy);\n\n derived(stores, () => {\n return evalExpression(variables, ast);\n }).subscribe(conditionResult => {\n if (conditionResult.type === 'error') {\n logError(wrapError(new Error('variable_trigger condition execution error'), {\n additional: {\n message: conditionResult.value\n }\n }));\n return;\n }\n\n if (\n // if condition is truthy\n conditionResult.value &&\n // and trigger mode matches\n (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n ) {\n trigger.actions.forEach(action => {\n const resultAction = getJsonWithVars(action);\n if (resultAction.log_id) {\n execAction(resultAction as Action);\n }\n });\n }\n\n prevConditionResult = Boolean(conditionResult.value);\n });\n });\n } catch (err) {\n logError(wrapError(new Error('Unable to parse variable_trigger'), {\n additional: {\n condition: trigger.condition\n }\n }));\n }\n });\n }\n\n const timers = json?.card?.timers;\n if (timers) {\n const controller = timersController = new TimersController({\n logError,\n applyVars: getJsonWithVars,\n hasVariableWithType,\n setVariableValue,\n execAnyActions\n });\n timers.forEach(timer => controller.createTimer(timer));\n }\n\n const states = json?.card?.states;\n const rootStateDiv: DivStateData | undefined = (states && !hasError) ? {\n type: 'state',\n id: 'root',\n width: {\n type: 'match_parent',\n },\n height: {\n type: 'match_parent',\n },\n states: states.map(state => ({\n state_id: state.state_id.toString(),\n div: state.div\n }))\n } : undefined;\n\n /**\n * Fix for the :active pseudo-class on iOS\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n function emptyTouchstartHandler() {}\n\n onDestroy(() => {\n if (timersController) {\n timersController.destroy();\n }\n });\n</script>\n\n{#if !hasError && rootStateDiv}\n <div\n class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n on:touchstart={emptyTouchstartHandler}\n >\n <RootSvgFilters {svgFiltersMap} />\n <Unknown div={rootStateDiv} {templateContext} />\n </div>\n{/if}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, WrappedError } from './wrapError';\nimport { TYPE_MAP } from '../components/typeMap';\n\n/**\n * Simple check for json card\n * @param json\n * @returns Error string or null if everything fine\n */\nexport function simpleCheckInput(json?: Partial<DivJson>): WrappedError | null {\n if (!json) {\n return wrapError(new Error('Missing object'));\n }\n\n const card = json.card;\n const templates = json.templates || {};\n\n if (!card) {\n return wrapError(new Error('Missing card'));\n }\n\n if (!card.states || !card.states.length) {\n return wrapError(new Error('Missing states'));\n }\n\n for (const templateName in templates) {\n if (templates.hasOwnProperty(templateName)) {\n if (templateName in TYPE_MAP) {\n return wrapError(new Error('Template name collision'), {\n additional: {\n templateName\n }\n });\n }\n }\n }\n\n for (let i = 0; i < card.states.length; ++i) {\n if (!card.states[i].div) {\n return wrapError(new Error('Missing state div'), {\n additional: {\n stateId: card.states[i].state_id\n }\n });\n }\n if (typeof card.states[i].state_id !== 'number') {\n return wrapError(new Error('Missing state_id'), {\n additional: {\n index: i\n }\n });\n }\n }\n\n return null;\n}\n","import Root from './components/Root.svelte';\nimport type { Platform, Theme } from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\n\nexport function render(opts: {\n target: HTMLElement;\n json: unknown;\n id: string;\n hydrate?: boolean;\n globalVariablesController?: GlobalVariablesController;\n mix?: string;\n customization?: unknown;\n builtinProtocols?: unknown;\n onStat?: unknown;\n onCustomAction?: unknown;\n onError?: unknown;\n onComponent?: unknown;\n platform?: Platform;\n theme?: Theme;\n}) {\n return new Root({\n target: opts.target,\n props: {\n id: opts.id,\n json: opts.json,\n globalVariablesController: opts.globalVariablesController,\n mix: opts.mix,\n customization: opts.customization,\n builtinProtocols: opts.builtinProtocols,\n onStat: opts.onStat,\n onCustomAction: opts.onCustomAction,\n onError: opts.onError,\n onComponent: opts.onComponent,\n platform: opts.platform,\n theme: opts.theme\n },\n hydrate: opts.hydrate\n });\n}\n\nexport {\n createGlobalVariablesController\n} from './expressions/globalVariablesController';\n\nexport {\n createVariable\n} from './expressions/variable';\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","noop","identity","x","tar","src","k","run","fn","blank_object","create","run_all","fns","forEach","is_function","thing","src_url_equal_anchor","src_url_equal","element_src","url","document","createElement","href","not_equal","a","b","is_empty","keys","length","subscribe","store","callbacks","unsub","unsubscribe","component_subscribe","component","callback","$$","on_destroy","push","create_slot","ctx","$$scope","slot_ctx","get_slot_context","slice","get_slot_changes","dirty","lets","undefined","merged","len","Math","max","i","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","p","get_all_dirty_from_scope","action_destroyer","action_result","destroy","is_client","window","now","performance","Date","raf","cb","requestAnimationFrame","tasks","Set","run_tasks","task","c","delete","f","size","is_hydrating","append","target","node","appendChild","get_root_for_style","root","getRootNode","ownerDocument","host","append_empty_stylesheet","style_element","style","head","append_stylesheet","sheet","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","d","name","svg_element","createElementNS","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_attributes","attributes","descriptors","getOwnPropertyDescriptors","__proto__","cssText","set","set_data","text","wholeText","set_style","important","removeProperty","setProperty","managed_styles","Map","current_component","active","delete_rule","previous","animation","split","next","filter","anim","indexOf","deleted","join","info","stylesheet","cssRules","deleteRule","rules","clear","set_current_component","get_current_component","Error","onMount","on_mount","onDestroy","setContext","context","getContext","bubble","type","this","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","schedule_update","then","flush","tick","add_render_callback","seen_callbacks","promise","flushidx","saved_component","update","pop","has","add","fragment","before_update","after_update","dispatch","direction","kind","dispatchEvent","detail","bubbles","cancelable","e","createEvent","initCustomEvent","custom_event","outroing","outros","group_outros","r","check_outros","transition_in","block","local","transition_out","null_transition","duration","create_in_transition","params","animation_name","config","running","uid","cleanup","go","delay","easing","css","ease","step","keyframes","t","rule","str","hash","charCodeAt","doc","create_style_information","insertRule","create_rule","start_time","end_time","abort","fulfill","loop","started","start","invalidate","end","globals","globalThis","global","outro_and_destroy_block","lookup","get_spread_update","levels","updates","to_null_out","accounted_for","n","SvelteElement","create_component","mount_component","customElement","m","new_on_destroy","map","destroy_component","init","instance","create_fragment","props","append_styles","parent_component","bound","on_disconnect","skip_bound","ready","ret","rest","fill","make_dirty","hydrate","nodes","element","Array","from","childNodes","l","intro","HTMLElement","constructor","super","attachShadow","mode","connectedCallback","slotted","attributeChangedCallback","_oldValue","newValue","disconnectedCallback","$destroy","$on","index","splice","$set","$$props","$$set","SvelteComponent","subscriber_queue","writable","stop","subscribers","new_value","run_queue","subscriber","derived","stores","initial_value","single","isArray","stores_array","auto","inited","values","pending","sync","result","unsubscribers","ROOT_CTX","Symbol","wrapError","error","wrapped","level","additional","makeStyle","styles","res","String","pxToEm","casted","Number","isNaN","ceil","pxToEmWithUnits","padLeft","val","count","correctColor","color","alpha","defaultColor","toLowerCase","charAt","parsedColor","parseColor","stringifyColorToCss","g","it","round","toString","toFixed","colorMatch","match","_","redPart","greenPart","bluePart","alphaPart","parseInt","htmlFilter","str2","replace","Truthy","Boolean","getBackground","bgs","position","bg","opts","pos","image","solid","colors","angle","gradient","image_url","imageSize","scale","imagePos","sizeVal","radius","RELATIVE_SIZE_MAP","centerX","radialCenterToCss","center_x","centerY","center_y","radial","reverse","reduce","acc","item","nearest_corner","farthest_corner","nearest_side","farthest_side","center","hpos","vpos","content_alignment_horizontal","content_alignment_vertical","getUrlSchema","exec","isBuiltinSchema","schema","builtinSchemas","list","genClassName","mods","STATE_CTX","edgeInsertsToCss","edgeInsets","top","right","bottom","left","isNumber","num","isNonNegativeNumber","correctEdgeInserts","defaultVal","correctNonNegativeNumber","isDeepEqual","is","keysA","keysB","assignIfDifferent","newVal","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","items","correctEdgeInsertsObject","borderRadius","cornersRadius","defaultRadius","fontSize","doNothing","ACTION_CTX","getTouchCoords","firstEvent","touches","clientX","pageX","y","clientY","pageY","class","role","tabindex","actions","doubleTapActions","longTapActions","cls","attrs","use","customAction","isNativeActionAnimation","rootCtx","actionCtx","hasAction","startTs","startCoords","isChanged","logError","hasJSAction","getBuiltinProtocols","button","preventDefault","some","action","execAnyActions","coords","abs","ctrlKey","metaKey","altKey","shiftKey","isPositiveNumber","getCssFilter","filters","background","stl","insets","opacity","classList","hasNativeAnimation","_a","json","origJson","templateContext","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","HORIZONTAL_ALIGN_TO_GENERAL","VERTICAL_ALIGN_TO_GENERAL","baseline","stateCtx","currentNode","width","widthMin","widthMax","height","heightMin","heightMax","backgroundStyle","hasSeparateBg","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","jsonTransitionTriggers","fakeElement","transition_triggers","hasStateChangeTrigger","id","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","actionAnimationList","actionAnimationTransition","parseActionAnimation","startValue","start_value","endValue","end_value","start_delay","transformOrigin","transform","isVisibilityInited","visibility","pivotXNum","pivotYNum","jsonBorder","getDerivedFromVars","border","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","$jsonBorder","has_shadow","shadow","_b","offset","_d","_e","blur","_f","stroke","corners_radius","correctBorderRadiusObject","corner_radius","corner","jsonPaddings","paddings","$jsonPaddings","padding","side","aVal","bVal","sumEdgeInsets","jsonMargins","margins","$jsonMargins","jsonWidth","jsonAlignmentHorizontal","alignment_horizontal","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","overlapParent","parentHorizontalWrapContent","parentContainerOrientation","parentContainerWrap","parentLayoutOrientation","weight","constrained","min_size","max_size","align","$jsonAlignmentHorizontal","parentHAlign","jsonHeight","jsonAlignmentVertical","alignment_vertical","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","$jsonHeight","parentVerticalWrapContent","$jsonAlignmentVertical","parentVAlign","parentOverlapMod","parentOverlapAbsoluteMod","gridArea","rowSpan","colSpan","jsonAlpha","$jsonAlpha","jsonAccessibility","accessibility","$jsonAccessibility","description","jsonBackground","$jsonBackground","isRunning","transition_change","hasTransitionChange","jsonAction","jsonActions","jsonDoubleTapActions","doubletap_actions","jsonLongTapActions","longtap_actions","newActions","$jsonActions","$jsonAction","newDoubleTapActions","$jsonDoubleTapActions","newLongTapActions","$jsonLongTapActions","jsonActionAnimation","action_animation","$jsonActionAnimation","jsonVisibility","prevVisibility","nextVisibility","correctVisibility","$jsonVisibility","transition","runVisibilityTransition","catch","onVisibilityChange","scrollSnap","jsonTransform","$jsonTransform","rotation","pivotX","pivot_x","pivotXCSSValue","pivotY","pivot_y","pivotYCSSValue","flexBasis","registerChildWithTransitionIn","registerChildWithTransitionOut","registerChildWithTransitionChange","visibilityActions","visibility_actions","visibility_action","visibilityStatus","visible","finished","calcedList","getJsonWithVars","visibility_percentage","visibility_duration","log_limit","thresholds","IntersectionObserver","entries","entry","status","nowVisible","intersectionRatio","timer","setTimeout","calcedParams","limit","Infinity","calcedAction","actionUrl","execAction","log_id","execCustomAction","logStat","clearTimeout","threshold","observe","visibilityAction","registerChild","dev","unregisterChild","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","rootFontSize","textStyles","singleline","decoration","lineHeight","letterSpacing","newDecoration","underline","strike","font_size","line_height","letter_spacing","font_weight","text_color","topOffset","top_offset","correctAlignmentHorizontal","orientation","correctAlignmentVertical","correctTintMode","tintMode","svgFilterId","wrapperStyle","hasError","customLineHeight","maxHeight","lineClamp","multiline","halign","valign","rootTextColor","selectable","renderList","usedTintColors","removeSvgFilter","jsonText","$jsonText","jsonRanges","ranges","jsonImages","images","jsonRootTextStyles","jsonTextSize","$jsonTextSize","jsonLineHeight","newLineHeight","$jsonLineHeight","jsonMaxLines","max_lines","$jsonMaxLines","newMaxHeight","newLineClamp","newMultiline","lines","$jsonRanges","$jsonImages","jsonHAlign","text_alignment_horizontal","$jsonHAlign","jsonVAlign","text_alignment_vertical","$jsonVAlign","isAllTextSameColor","jsonTextColor","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","jsonTruncate","truncate","$jsonTruncate","jsonTextGradient","text_gradient","newGradient","$jsonTextGradient","jsonSelectable","correctBooleanInt","$jsonSelectable","textRanges","textImages","newRenderList","content","prevIndex","activeRanges","range","isStart","arrayIndex","sort","assign","$jsonRootTextStyles","substring","textStyles2","imageWidth","imageHeight","tintColor","tint_color","tint_mode","addSvgFilter","updateRenderList","innerMods","correctDrawableStyle","drawable","availShapes","defaultValue","shape","includes","item_width","item_height","calcCircleSize","old","borderColor","borderWidth","bgColor","background_color","boxShadow","calcDrawableStyle","setAdditionalPadding","separator","crossAxis","show_at_start","show_at_end","calcItemsGap","lineSeparator","vals","show_between","hasGapSupport","flex","display","flexDirection","gap","body","scrollHeight","appendSeparator","separators","separatorStyle","box0","box1","containingBox","appendSeparators","boxes","min","lastBox","throttledUpdated","timeout","prevRes","runTs","awaits","apply","arguments","simpleThrottle","parentElement","parentBbox","getBoundingClientRect","children","contains","outerCss","rows","row","firstChild","shift","bbox","first","rowBoxes","elem","computed","getComputedStyle","parseFloat","marginTop","marginRight","marginBottom","marginLeft","getMarginBox","rowBox","mounted","mutationObserver","resizeObserver","mutationObserverCallback","records","record","disconnect","MutationObserver","childList","characterData","subtree","ResizeObserver","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","aspect","hasItemsError","contentVAlign","contentHAlign","childLayoutParams","jsonItems","childJson","childContext","processTemplate","jsonOrientation","correctContainerOrientation","$jsonOrientation","jsonContentVAlign","$jsonContentVAlign","jsonContentHAlign","$jsonContentHAlign","jsonLayoutMode","layout_mode","wrap","$jsonLayoutMode","jsonSeparator","$jsonSeparator","_c","jsonLineSeparator","line_separator","$jsonLineSeparator","calcAdditionalPaddings","jsonAspect","newRatio","$jsonAspect","ratio","newChildLayoutParams","correctGeneralOrientation","jsonDelimiterStyle","delimiter_style","$jsonDelimiterStyle","hasContent","STATE_ERROR","FALLBACK_IMAGE","state","placeholderColor","backgroundImage","aspectPaddingBottom","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","jsonImageUrl","jsonGifUrl","gif_url","imageUrl","$jsonImageUrl","$jsonGifUrl","isWidthContent","isHeightContent","jsonPreview","preview","$jsonPreview","startsWith","jsonPlaceholderColor","placeholder_color","updatePlaceholderColor","$jsonPlaceholderColor","jsonScale","$jsonScale","jsonPosition","correctImagePosition","$jsonPosition","jsonA11y","alt","$jsonA11y","jsonTintColor","jsonTintMode","$jsonTintColor","newTintColor","newTintMode","$jsonTintMode","jsonAppearanceAnimation","appearance_animation","$jsonAppearanceAnimation","jsonFilters","newFilter","newClipPath","$jsonFilters","loaded","isSpannedWeight","formatWeight","gridCalcTemplates","weights","minSizes","multiply","minSize","totalWeight","template","every","minTrackSize","childStore","resultItems","columnCount","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","rowCount","hasLayoutError","jsonColumnCount","column_count","$jsonColumnCount","row_span","columnSpan","column_span","used","childInfo","$childStore","widthWeight","heightWeight","j","joinTemplateSizes","sizes","temp","counter","debounce","args","scroller","itemsGridElem","galleryItemsWrappers","hasScrollLeft","hasScrollRight","leftClass","getCustomization","rightClass","isDesktop","gridGap","crossGridGap","crossSpacing","columns","itemSpacing","templateSizes","scrollerStyle","defaultItem","updateArrowsVisibility","scrollLeft","scrollWidth","containerWidth","offsetWidth","updateArrowsVisibilityDebounced","scroll","behavior","getItems","maxLen","scrollToGalleryItem","galleryElements","isHorizontal","elementOffset","scrollDirection","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","findIndex","el","checkIsFullyIntersecting","visibleElementsMap","checkIsIntersecting","firstVisibleElement","registerInstance","setCurrentItem","setPreviousItem","overflow","currentElementIndex","previousItem","setNextItem","isEdgeScroll","scrollTop","offsetHeight","nextItem","unregisterInstance","shouldCheckArrows","$isDesktop","itemsGrid","column","rebuildItemsGrid","jsonCrossContentAlignment","cross_content_alignment","correctAlignment","$jsonCrossContentAlignment","jsonItemSpacing","item_spacing","$jsonItemSpacing","jsonCrossSpacing","cross_spacing","$jsonCrossSpacing","gridTemplate","itemSize","jsonScrollMode","scroll_mode","newScrollerStyle","$jsonScrollMode","jsonRestrictParentScroll","restrict_parent_scroll","gridStyle","columnStyle","jsonDefaultItem","default_item","$jsonDefaultItem","rowIndex","child_ctx","title","selected","actionable","title_click_action","div","animated","instId","genId","tabsElem","panelsWrapper","swiperElem","jsonSelectedTab","selected_tab","tabActiveFontWeight","tabInactiveFontWeight","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","tabItemSpacing","separatorBackground","separatorMargins","titlePadding","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","setSelected","focus","initTabsSwipe","changeTab","selectedTab","querySelector","moveSelected","newSelected","selectItem","_event","updateTransform","updateShowedPanels","activePanel","getElementById","updateWrapperHeight","hideNonVisiblePanels","currentTransform","clientWidth","around","isShowed","hidePanelsTimeout","clientHeight","swipeStartTime","startTransform","moveCoords","isSwipeStarted","isSwipeCanceled","newLayoutParams","jsonTabStyle","tab_title_style","tabStyle","$jsonTabStyle","adjustedPaddings","correctBorderRadius","active_font_weight","inactive_font_weight","active_text_color","inactive_text_color","active_background_color","inactive_background_color","has_separator","jsonSeparatorColor","separator_color","jsonSeparatorPaddings","separator_paddings","$jsonSeparatorColor","$jsonSeparatorPaddings","jsonSwipeEnabled","switch_tabs_by_content_swipe_enabled","isSwipeEnabled","$jsonSwipeEnabled","jsonTitlePaddings","title_paddings","$jsonTitlePaddings","which","restrictClosest","closest","panelsWrapperWidth","cubicInOut","pow","cubicIn","cubicOut","interpolateEasing","table","floor","t2","spring","EASING","linear","ease_in","ease_out","ease_in_out","calcMaxDuration","transitions","inOutTransition","elementBbox","rootBbox","maxDuration","startAlpha","tMs","parts","relative","oriented","eased","edge","distance","travel","translate","offsetX","offsetY","anyScale","activeScale","lerp","changeBoundsTransition","beforeBbox","afterBbox","flattenTransition","offsetLeft","offsetTop","old_blocks","get_key","dynamic","create_each_block","get_context","old_indexes","new_blocks","new_lookup","deltas","will_move","did_move","new_block","old_block","new_key","old_key","getTransitionChange","transitionOrSet","animationRoot","transitionChangeBoxes","childrenIds","childStateMap","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","getItemAnimation","child","transitionsList","resolvePromise","stateId","div_id","selectedId","setRunning","wasIds","transitionsOutToRun","newState","find","state_id","selectedState","transitionsInToRun","inOutList","concat","changeList","getChild","itemWithMaxDuration","jsonDefaultStateId","default_state_id","onOutro","states","initDefaultState","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","onScrollDebounced","pagerElements","wrapperRect","scrollToPagerItem","nextPagerItem","pagerItems","gridAuto","neighbourPageWidth","neighbour_page_width","pageWidth","_g","page_width","pagerId","newPagersMap","$pagers","pagerDataUpdate","selected_actions","runSelectedActions","pagers","getStore","AVAIL_SHAPES","indicatorItemsWrapper","pagerData","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","onIndicatorItemClick","moveFocus","activeItem","jsonShape","jsonActiveItemColor","active_item_color","jsonInactiveItemColor","inactive_item_color","jsonActiveItemSize","active_item_size","jsonActiveShape","active_shape","jsonInactiveShape","inactive_shape","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","jsonSpaceBetweenCenters","space_between_centers","jsonItemsPlacement","items_placement","$jsonItemsPlacement","$jsonSpaceBetweenCenters","max_visible_items","pagersMap","pager_id","currentItemOffsetLeft","onPagerDataUpdate","correctSliderTextStyle","textStyle","convertedColor","textColor","clamp","MIN_INT","MAX_NUMBER","MAX_VALUE","MIN_NUMBER","MIN_VALUE","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","DATETIME","Variable","convertValue","getName","fromString","setValue","converted","getValue","TYPE_TO_CLASS","string","getType","number","isFinite","integer","boolean","createVariable","fillTicks","to","minValue","maxValue","inside","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","tracksInner","switchedTracks","firstVariable","thumb_value_variable","secondVariable","thumb_secondary_value_variable","valueVariable","getVariable","value2Variable","markActiveTicks","markInactiveTicks","$valueVariable","value2","$value2Variable","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveStyle","markInactiveStyle","textSecondaryStyle","secondaryDescription","onInputChange","isTicksWarning","checkTicks","ticksCount","activeTickWidth","inactiveTickWidth","checkTicksDebounced","jsonMinValue","min_value","jsonMaxValue","max_value","$jsonMinValue","$jsonMaxValue","newVal2","jsonThumbStyle","thumb_style","$jsonThumbStyle","jsonThumbSecondaryStyle","thumb_secondary_style","$jsonThumbSecondaryStyle","jsonTrackInactiveStyle","track_inactive_style","$jsonTrackInactiveStyle","jsonTrackActiveStyle","track_active_style","$jsonTrackActiveStyle","jsonMarkActiveStyle","tick_mark_active_style","newStyle","$jsonMarkActiveStyle","jsonMarkInactiveStyle","tick_mark_inactive_style","$jsonMarkInactiveStyle","jsonTextStyle","thumb_text_style","$jsonTextStyle","jsonSecondaryTextStyle","thumb_secondary_text_style","$jsonSecondaryTextStyle","jsonSecondaryAccessibility","secondary_value_accessibility","$jsonSecondaryAccessibility","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","trackActivePart","trackActiveOffset","changedTouches","rangeBbox","part","final","endsWith","input","holder","isPressed","verticalOverflow","variable","text_variable","jsonHintText","hint_text","jsonHintColor","hint_color","hintColor","jsonFontSize","jsonFontWeight","jsonLetterSpacing","jsonHighlightColor","highlight_color","highlightColor","jsonKeyboardType","keyboard_type","KEYBOARD_MAP","email","phone","single_line_text","multi_line_text","uri","keyboardType","inputType","jsonVisibleMaxLines","max_visible_lines","jsonSelectAll","select_all_on_focus","checkVerticalOverflow","placeholder","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","isMultiline","$jsonVisibleMaxLines","select","TYPE_MAP","container","Image","gif","grid","gallery","tabs","pager","indicator","slider","hasTemplate","svgFiltersMap","applyTemplate","templates","newContext","newJson","copyTemplated","base","extender","simpleKeys","templateKeys","voidUnsubscribe","constStore","buildBinaryExpression","tail","operator","buildLogicalExpression","buildString","quasis","expressions","convertToInt32","escapeChar","char","peg$SyntaxError","message","expected","found","location","self","setPrototypeOf","peg$padEnd","targetLength","padString","repeat","peg$parse","peg$result","peg$FAILED","peg$source","grammarSource","peg$startRuleFunctions","peg$parsestart","JsonStringContents","s0","s1","s2","peg$currPos","peg$parseJsonStringChar","peg$savedPos","peg$f1","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c12","peg$c14","peg$c15","peg$c27","peg$c28","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r5","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$e5","peg$classExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$otherExpectation","peg$e26","peg$e27","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$e39","peg$e40","peg$e41","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","inverted","peg$computePosDetails","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","source","peg$fail","peg$parse_","peg$parseExpression","s3","s5","substr","test","peg$f5","peg$f6","peg$f9","s7","s9","peg$parseOr","consequent","alternate","s4","s6","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseSum","peg$parseFactor","peg$parseUnary","peg$parseNumber","peg$parseInteger","argument","peg$parseIdentifier","peg$parseArguments","callee","peg$parseStringChar","peg$parseStringContents","peg$parseString","peg$parseBoolean","peg$parsePrimaryExpression","peg$parseCall","peg$f27","peg$f28","peg$f31","s8","peg$parseReservedWord","buildMessage","peg$buildStructuredError","parent","C","peg$subclass","format","sources","s","loc","filler","hatLen","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","escapedParts","classEscape","any","other","hex","ch","toUpperCase","describeExpectation","descriptions","describeExpected","describeFound","funcs","funcByArgs","registerFunc","desc","arr","funcKey","matchFuncArgs","func","minArgs","maxArgs","lastArg","isVararg","funcArg","walk","ast","visitors","valToInternal","dateToString","date","toISOString","valToString","stringifyColor","safeConvertColor","valToPreview","typeToString","int32Array","Int32Array","roundInteger","checkIntegerOverflow","gatherVarsFromAst","evalError","msg","_vars","arg","toNumber","getValueForced","vars","varName","fallback","getColorValue","getUrlValue","getter","method","datetime","getTime","getYear","getMonth","getDay","getDayOfWeek","getHours","getMinutes","getSeconds","getMillis","calcPad","pad","padStart","prefix","padEnd","suffix","arg0","arg1","mod","mul","sub","sum","signum","sign","copySign","colorGetter","field","parsed","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","getDuration","milliseconds","delimiter","whole","argsToStr","encodeURIComponent","_err","decodeURIComponent","year","copy","setUTCFullYear","month","setUTCMonth","day","getUTCMonth","setUTCDate","getUTCDate","getMaxDate","hours","setUTCHours","minutes","setUTCMinutes","seconds","setUTCSeconds","millis","setUTCMilliseconds","wholeStr","partStr","what","replacer","RegExp","escapeRegExp","lastIndexOf","trim","red","green","blue","EVAL_MAP","StringLiteral","expr","NumberLiteral","IntegerLiteral","BooleanLiteral","UnaryExpression","evalAny","ConditionalExpression","TemplateLiteral","LogicalExpression","BinaryExpression","evalBinaryEquality","leftVal","rightVal","evalBinaryCompare","evalBinarySum","evalBinaryFactor","CallExpression","funcName","findRes","firstError","findBestMatchedFunc","argsType","err","variableToValue","evalExpression","unknownVariableName","checkVariables","ExpressionBinding","variables","containsUnsetVariables","prepareVarsObj","jsonProp","hasExpression","parse","propVars","expression","applyVars","prepareVars","storesMap","controllerToStore","controllerToVars","getControllerStore","controller","getControllerVars","GlobalVariablesController","setVariable","variableName","createGlobalVariablesController","AVAIL_ACTIONS","TimersController","hasVariableWithType","setVariableValue","visibilityHandler","visibilityState","awaitActions","execTimerAction","unholdAll","holdAll","_id","timers","stopTimerTimeouts","createTimer","tick_interval","value_variable","tick_actions","actionTyped","durationTimeout","tickTimeout","tickOrUnholdAction","durationPassed","durationStarted","updateVariable","callActions","tickCount","startOrResume","hold","tickCountPredict","startTick","tickStarted","tickPassed","pause","resume","cancel","reset","actionsWithExpressions","emptyTouchstartHandler","passive","platform","theme","globalVariablesController","mix","customization","builtinProtocols","onError","onStat","onCustomAction","onComponent","matchMedia","touchQuery","matches","addListener","currentTheme","themeQuery","themeQueryListener","builtinSet","initialError","card","templateName","simpleCheckInput","stateChange","globalVariablesStore","globalVariables","localVariables","awaitingGlobalVariables","timersController","prepared","console","warn","idCounter","svgFilterUsages","URLSearchParams","stateInterface","divId","selectedStateId","childState","setState","getInstance","variableInstance","processUrls","win","open","opener","instancesMap","filterDefinedVars","usedTypes","genClass","filterId","awaitVariableChanges","setStore","foundType","registerComponent","unregisterComponent","_stateId","_json","_templateContext","_transitions","_node","_direction","startVariables","varInstance","palette","newVarName","awaitingStore","variableTriggers","variable_triggers","trigger","prevConditionResult","condition","exprVars","remaining","waitForVars","conditionResult","resultAction","rootStateDiv","newTheme","render","Root"],"sourceRoot":""}
|