{"version":3,"file":"client-devtool.mjs","sources":["../../src/expressions/bigint.ts","../../src/expressions/expressions.js","../../src/expressions/const.ts","../../src/expressions/walk.ts","../../src/utils/padLeft.ts","../../src/utils/correctColor.ts","../../src/expressions/utils.ts","../../src/expressions/funcs/funcs.ts","../../src/expressions/funcs/std.ts","../../src/utils/formatDate.ts","../../src/expressions/funcs/datetime.ts","../../src/utils/escapeRegExp.ts","../../src/utils/wrapError.ts","../../src/expressions/funcs/strings.ts","../../src/expressions/funcs/math.ts","../../src/expressions/funcs/colors.ts","../../src/expressions/funcs/interval.ts","../../src/expressions/funcs/dict.ts","../../src/expressions/funcs/array.ts","../../src/expressions/funcs/stored.ts","../../src/expressions/funcs/trigonometry.ts","../../src/expressions/funcs/index.ts","../../node_modules/svelte/src/runtime/internal/utils.js","../../node_modules/svelte/src/runtime/internal/environment.js","../../node_modules/svelte/src/runtime/internal/loop.js","../../node_modules/svelte/src/runtime/internal/globals.js","../../node_modules/svelte/src/runtime/internal/dom.js","../../node_modules/svelte/src/runtime/internal/style_manager.js","../../node_modules/svelte/src/runtime/internal/lifecycle.js","../../node_modules/svelte/src/runtime/internal/scheduler.js","../../node_modules/svelte/src/runtime/internal/transitions.js","../../node_modules/svelte/src/runtime/internal/each.js","../../node_modules/svelte/src/runtime/internal/spread.js","../../node_modules/svelte/src/runtime/internal/Component.js","../../node_modules/svelte/src/shared/version.js","../../node_modules/svelte/src/runtime/store/index.js","../../src/expressions/variable.ts","../../src/expressions/eval.ts","../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../src/context/root.ts","../../src/utils/makeStyle.ts","../../src/utils/pxToEm.ts","../../src/utils/htmlFilter.ts","../../src/utils/truthy.ts","../../src/utils/background.ts","../../src/utils/correctNonNegativeNumber.ts","../../src/use/visibilityAction.ts","../../src/utils/genClassName.ts","../../src/use/devtool.ts","../../src/context/state.ts","../../src/utils/edgeInsertsToCss.ts","../../src/utils/isNumber.ts","../../src/utils/isNonNegativeNumber.ts","../../src/utils/correctEdgeInserts.ts","../../src/utils/correctAlpha.ts","../../src/utils/isDeepEqual.ts","../../src/utils/assignIfDifferent.ts","../../src/utils/correctVisibility.ts","../../src/utils/correctCSSInterpolator.ts","../../src/utils/correctNumber.ts","../../src/utils/flattenAnimation.ts","../../src/utils/correctEdgeInsertsObject.ts","../../src/utils/sumEdgeInsets.ts","../../src/utils/correctBorderRadiusObject.ts","../../src/utils/borderRadius.ts","../../src/utils/shadow.ts","../../src/utils/isPrefersReducedMotion.ts","../../src/use/layoutProvider.ts","../../src/context/enabled.ts","../../src/utils/correctBooleanInt.ts","../../src/utils/composeAccessibilityDescription.ts","../../src/utils/componentContext.ts","../../src/utils/transformationsToTransform.ts","../../src/context/visibility.ts","../../src/utils/doNothing.ts","../../src/context/action.ts","../../src/utils/url.ts","../../src/components/utilities/Actionable.svelte","../../src/utils/isPositiveNumber.ts","../../src/utils/filters.ts","../../src/components/utilities/OuterBackground.svelte","../../src/components/utilities/Outer.svelte","../../src/utils/correctPositiveNumber.ts","../../src/utils/fontWeightToCss.ts","../../src/utils/correctFontWeight.ts","../../src/utils/edgeInsetsMultiply.ts","../../src/utils/variationSettings.ts","../../src/components/text/TextRange.svelte","../../src/utils/correctAlignmentHorizontal.ts","../../src/utils/correctAlignmentVertical.ts","../../src/utils/propToString.ts","../../src/utils/correctTintMode.ts","../../src/utils/filterEnabledActions.ts","../../src/utils/debounce.ts","../../src/use/autoEllipsize.ts","../../src/utils/constStore.ts","../../src/utils/itemBuilder.ts","../../src/components/text/Text.svelte","../../src/utils/container.ts","../../src/utils/correctContainerOrientation.ts","../../src/utils/correctDrawableStyles.ts","../../src/utils/hasGapSupport.ts","../../src/utils/correctContentAlignmentVertical.ts","../../src/utils/correctContentAlignmentHorizontal.ts","../../src/utils/simpleThrottle.ts","../../src/utils/getMarginBox.ts","../../src/components/container/ContainerSeparators.svelte","../../src/components/container/Container.svelte","../../src/utils/correctGeneralOrientation.ts","../../src/components/separator/Separator.svelte","../../src/utils/correctImagePosition.ts","../../src/utils/prepareBase64.ts","../../src/components/utilities/DevtoolHolder.svelte","../../src/components/image/Image.svelte","../../src/utils/gridCalcTemplates.ts","../../src/components/grid/Grid.svelte","../../src/utils/correctAlignment.ts","../../src/utils/nonNegativeModulo.ts","../../src/components/gallery/Gallery.svelte","../../src/utils/correctTabDelimiterStyle.ts","../../src/utils/keyboard/codes.ts","../../src/utils/correctBorderRadius.ts","../../src/utils/getTouchCoords.ts","../../src/components/utilities/EnabledContext.svelte","../../src/components/tabs/Tabs.svelte","../../node_modules/svelte/src/runtime/easing/index.js","../../src/utils/easings/interpolateEasing.ts","../../src/utils/easings/ease.ts","../../src/utils/easings/spring.ts","../../src/utils/easing.ts","../../src/utils/inOutTransition.ts","../../src/utils/lerp.ts","../../src/utils/changeBoundsTransition.ts","../../src/utils/flattenTransition.ts","../../src/components/state/State.svelte","../../src/components/pager/Pager.svelte","../../src/components/indicator/Indicator.svelte","../../src/utils/correctSliderTextStyle.ts","../../src/utils/clamp.ts","../../src/utils/slider.ts","../../src/components/slider/Slider.svelte","../../src/utils/textDiff.ts","../../src/utils/mask/baseInputMask.ts","../../src/utils/mask/fixedLengthInputMask.ts","../../src/utils/updateFixedMask.ts","../../src/utils/mask/currencyInputMask.ts","../../src/utils/updateCurrencyMask.ts","../../src/utils/contenteditable.ts","../../src/utils/mask/phoneInputMask.ts","../../src/utils/updatePhoneMask.ts","../../src/components/input/Input.svelte","../../src/components/select/Select.svelte","../../src/utils/correctVideoSource.ts","../../src/utils/video.ts","../../src/components/video/Video.svelte","../../src/utils/booleanInt.ts","../../src/components/switch/Switch.svelte","../../src/components/custom/Custom.svelte","../../src/components/typeMap.ts","../../src/components/utilities/Unknown.svelte","../../src/components/utilities/RootSvgFilters.svelte","../../src/utils/applyTemplate.ts","../../src/expressions/parserCache.ts","../../src/expressions/funcs/customFuncs.ts","../../src/utils/simpleCheckInput.ts","../../src/utils/uniq.ts","../../src/expressions/json.ts","../../src/expressions/globalVariablesController.ts","../../src/utils/timers.ts","../../src/actions/array.ts","../../src/actions/dict.ts","../../src/actions/copyToClipboard.ts","../../src/utils/animators.ts","../../src/utils/componentUtils.ts","../../src/utils/checkSubmitAction.ts","../../src/actions/updateStructure.ts","../../src/utils/inOutAnimation.ts","../../src/utils/hasDialogSupport.ts","../../src/components/tooltip/Tooltip.svelte","../../node_modules/svelte/src/runtime/transition/index.js","../../src/components/menu/Menu.svelte","../../src/components/Root.svelte","../../src/extensions/sizeProvider.ts","../../src/extensions/gesture.ts","../../src/utils/filterHTMLElements.ts","../../src/extensions/lottie.ts","../../src/extensions/markdown.ts","../../src/client-devtool.ts"],"sourcesContent":["export function toBigIntNoCheck(val: number | bigint | string): bigint {\n    return BigInt(val);\n}\n\nexport const MAX_INT = toBigIntNoCheck('9223372036854775807');\nexport const MIN_INT = toBigIntNoCheck('-9223372036854775808');\n\nexport function toBigInt(val: number | bigint | string): bigint {\n    const res = toBigIntNoCheck(val);\n    if (res > MAX_INT || res < MIN_INT) {\n        throw new Error('Integer overflow.');\n    }\n    return res;\n}\n\nexport const bigIntZero = toBigInt(0);\n\nexport function absBigInt(val: bigint): bigint {\n    let res = val;\n\n    if (res < 0) {\n        res = -res;\n    }\n\n    return res;\n}\n\nexport function signBigInt(val: bigint): bigint {\n    let res = 0;\n\n    if (val > 0) {\n        res = 1;\n    } else if (val < 0) {\n        res = -1;\n    }\n\n    return toBigInt(res);\n}\n","// Generated by Peggy 3.0.2.\n//\n// https://peggyjs.org/\n\n\n    import { toBigInt } from './bigint';\n\n    function buildConditionalExpression(expr, tail) {\n        if (tail && tail[3] && tail[7]) {\n            return {type: 'ConditionalExpression', test: expr, consequent: tail[3], alternate: tail[7]};\n        }\n\n        return expr;\n    }\n\n    function buildTryExpression(expr, tail) {\n        if (tail && tail[3]) {\n            return {type: 'TryExpression', test: expr, alternate: tail[3]};\n        }\n\n        return expr;\n    }\n\n    function buildBinaryExpression(head, tail) {\n        if (!tail.length) {\n            return head;\n        }\n\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        if (!tail.length) {\n            return head;\n        }\n\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 buildMethodCall(head, tail) {\n        if (!tail.length) {\n            return head;\n        }\n\n        return tail.reduce((result, element) => {\n            if (!element[5]) {\n                throw new Error('Method expected after .');\n            }\n            return {\n                type: 'MethodExpression',\n                object: result,\n                method: element[3],\n                arguments: element[5][2]\n            };\n        }, head);\n    }\n\n    function buildVariableOrBoolean(txt) {\n        if (txt === 'true' || txt === 'false') {\n            return {type: 'BooleanLiteral', value: txt === 'true'};\n        }\n\n        return {type: 'Variable', id: {type: 'Identifier', name: txt}};\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 convertToInt64(str) {\n        try {\n            return toBigInt(str);\n        } catch (_err) {\n            throw new Error(`Value ${str} can't be converted to Integer type.`);\n        }\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 offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n      ? this.location.source.offset(s)\n      : s;\n    var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n    if (src) {\n      var e = this.location.end;\n      var filler = peg$padEnd(\"\", offset_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          + offset_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 = \"'\";\n  var peg$c26 = \"e\";\n  var peg$c27 = \"E\";\n\n  var peg$r0 = /^[^}]/;\n  var peg$r1 = /^[^'}]/;\n  var peg$r2 = /^[0-9]/;\n  var peg$r3 = /^[a-zA-Z_]/;\n  var peg$r4 = /^[a-zA-Z_0-9]/;\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$literalExpectation(\")\", false);\n  var peg$e26 = peg$literalExpectation(\",\", false);\n  var peg$e27 = peg$otherExpectation(\"string\");\n  var peg$e28 = peg$literalExpectation(\"'\", false);\n  var peg$e29 = peg$classExpectation([\"'\", \"}\"], true, false);\n  var peg$e30 = peg$otherExpectation(\"integer\");\n  var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n  var peg$e32 = peg$otherExpectation(\"number\");\n  var peg$e33 = peg$literalExpectation(\"e\", false);\n  var peg$e34 = peg$literalExpectation(\"E\", false);\n  var peg$e35 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n  var peg$e36 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\", [\"0\", \"9\"]], false, false);\n  var peg$e37 = peg$otherExpectation(\"whitespace\");\n  var peg$e38 = 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, tail) { return buildConditionalExpression(expr, tail); };\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(expr, tail) { return buildTryExpression(expr, tail); };\n  var peg$f16 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f17 = function(head, tail) { return buildBinaryExpression(head, tail); };\n  var peg$f18 = function(val) { return val; };\n  var peg$f19 = function(val) { return val; };\n  var peg$f20 = function(op, expr) { return {type: 'UnaryExpression', operator: op, argument: expr}; };\n  var peg$f21 = function() { throw new Error(\"Incorrect unary operator\"); };\n  var peg$f22 = function(head, tail) { return buildMethodCall(head, tail); };\n  var peg$f23 = function(id, args) { return {type: 'CallExpression', callee: id, arguments: args}; };\n  var peg$f24 = function(expr, list) { return [expr, ...list]; };\n  var peg$f25 = function(expr) { return expr; };\n  var peg$f26 = function(str) { return str; };\n  var peg$f27 = function(list) { return buildString(list); };\n  var peg$f28 = function(expr) { return expr; };\n  var peg$f29 = function() { return ''; };\n  var peg$f30 = function() { return text(); };\n  var peg$f31 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f32 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f33 = function(str) { return str; };\n  var peg$f34 = function(char) { return escapeChar(char); };\n  var peg$f35 = function() { throw new Error(\"Error tokenizing '\" + input + \"'.\"); };\n  var peg$f36 = function() { return {type: 'IntegerLiteral', value: convertToInt64(text())}; };\n  var peg$f37 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n  var peg$f38 = function() { return {type: 'NumberLiteral', value: parseFloat(text())}; };\n  var peg$f39 = function() { const txt = text(); if (/\\.\\./.test(txt) || /\\.$/.test(txt)) {throw new Error('Unexpected token: .')} return buildVariableOrBoolean(txt); };\n  var peg$f40 = 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, offset) {\n    var startPosDetails = peg$computePosDetails(startPos);\n    var endPosDetails = peg$computePosDetails(endPos);\n\n    var res = {\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    if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n      res.start = peg$source.offset(res.start);\n      res.end = peg$source.offset(res.end);\n    }\n    return res;\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, s10;\n\n    s0 = peg$currPos;\n    s1 = peg$parseOr();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 63) {\n        s4 = peg$c4;\n        peg$currPos++;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e6); }\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parse_();\n        s6 = peg$parseExpression();\n        if (s6 !== peg$FAILED) {\n          s7 = peg$parse_();\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s8 = peg$c5;\n            peg$currPos++;\n          } else {\n            s8 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e7); }\n          }\n          if (s8 !== peg$FAILED) {\n            s9 = peg$parse_();\n            s10 = peg$parseExpression();\n            if (s10 !== peg$FAILED) {\n              s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 === peg$FAILED) {\n        s2 = null;\n      }\n      peg$savedPos = s0;\n      s0 = peg$f10(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\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$parseTry();\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$parseTry();\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$parseTry();\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$parseTry() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    s0 = peg$currPos;\n    s1 = peg$parseSum();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (input.substr(peg$currPos, 2) === peg$c14) {\n        s4 = peg$c14;\n        peg$currPos += 2;\n      } else {\n        s4 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e16); }\n      }\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parse_();\n        s6 = peg$parseSum();\n        if (s6 !== peg$FAILED) {\n          s3 = [s3, s4, s5, s6];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      if (s2 === peg$FAILED) {\n        s2 = null;\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$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$c15;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e17); }\n      }\n      if (s5 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s5 = peg$c16;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$c15;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e17); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s5 = peg$c16;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$f16(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$parseUnaryExpression();\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$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) === 42) {\n          s5 = peg$c18;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e20); }\n        }\n        if (s5 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 37) {\n            s5 = peg$c19;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e21); }\n          }\n        }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseUnaryExpression();\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$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) === 42) {\n            s5 = peg$c18;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e20); }\n          }\n          if (s5 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 37) {\n              s5 = peg$c19;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e21); }\n            }\n          }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseUnaryExpression();\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$f17(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseUnaryExpression() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    s1 = peg$currPos;\n    peg$silentFails++;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s2 = peg$c16;\n      peg$currPos++;\n    } else {\n      s2 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\n    }\n    peg$silentFails--;\n    if (s2 !== peg$FAILED) {\n      peg$currPos = s1;\n      s1 = undefined;\n    } else {\n      s1 = peg$FAILED;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseNumber();\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f18(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      s1 = peg$currPos;\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s2 = peg$c16;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n      peg$silentFails--;\n      if (s2 !== peg$FAILED) {\n        peg$currPos = s1;\n        s1 = undefined;\n      } else {\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseInteger();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s0 = peg$f19(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) === 33) {\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          if (input.charCodeAt(peg$currPos) === 43) {\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            if (input.charCodeAt(peg$currPos) === 45) {\n              s1 = peg$c16;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\n            }\n          }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse_();\n          s3 = peg$parseDoubleUnaryExpressionCatch();\n          if (s3 === peg$FAILED) {\n            s3 = peg$parseMethod();\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f20(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$parseMethod();\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseDoubleUnaryExpressionCatch() {\n    var s0, s1;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 43) {\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      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$f21();\n    }\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseMethod() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n    s0 = peg$currPos;\n    s1 = peg$parseCall();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 46) {\n        s5 = peg$c21;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e23); }\n      }\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parse_();\n        s7 = peg$parseStrictIdentifier();\n        if (s7 !== peg$FAILED) {\n          s8 = peg$parse_();\n          s9 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s10 = peg$c22;\n            peg$currPos++;\n          } else {\n            s10 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e24); }\n          }\n          if (s10 !== peg$FAILED) {\n            s11 = peg$parse_();\n            s12 = peg$parseArguments();\n            if (s12 !== peg$FAILED) {\n              s13 = peg$parse_();\n              if (input.charCodeAt(peg$currPos) === 41) {\n                s14 = peg$c23;\n                peg$currPos++;\n              } else {\n                s14 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e25); }\n              }\n              if (s14 !== peg$FAILED) {\n                s10 = [s10, s11, s12, s13, s14];\n                s9 = s10;\n              } else {\n                peg$currPos = s9;\n                s9 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s9;\n              s9 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s9;\n            s9 = peg$FAILED;\n          }\n          if (s9 === peg$FAILED) {\n            s9 = null;\n          }\n          s4 = [s4, s5, s6, s7, s8, s9];\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) === 46) {\n          s5 = peg$c21;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e23); }\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          s7 = peg$parseStrictIdentifier();\n          if (s7 !== peg$FAILED) {\n            s8 = peg$parse_();\n            s9 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s10 = peg$c22;\n              peg$currPos++;\n            } else {\n              s10 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\n            }\n            if (s10 !== peg$FAILED) {\n              s11 = peg$parse_();\n              s12 = peg$parseArguments();\n              if (s12 !== peg$FAILED) {\n                s13 = peg$parse_();\n                if (input.charCodeAt(peg$currPos) === 41) {\n                  s14 = peg$c23;\n                  peg$currPos++;\n                } else {\n                  s14 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e25); }\n                }\n                if (s14 !== peg$FAILED) {\n                  s10 = [s10, s11, s12, s13, s14];\n                  s9 = s10;\n                } else {\n                  peg$currPos = s9;\n                  s9 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s9;\n                s9 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s9;\n              s9 = peg$FAILED;\n            }\n            if (s9 === peg$FAILED) {\n              s9 = null;\n            }\n            s4 = [s4, s5, s6, s7, s8, s9];\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$f22(s1, s2);\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\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$parseStrictIdentifier();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s3 = peg$c22;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e24); }\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$c23;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e25); }\n          }\n          if (s7 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f23(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$parsePrimaryExpression();\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$c24;\n        peg$currPos++;\n      } else {\n        s5 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e26); }\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$c24;\n          peg$currPos++;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e26); }\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$f24(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, s4, s5;\n\n    s0 = peg$parseIdentifierOrBoolean();\n    if (s0 === peg$FAILED) {\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$currPos;\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s1 = peg$c22;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\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) === 41) {\n                  s5 = peg$c23;\n                  peg$currPos++;\n                } else {\n                  s5 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$e25); }\n                }\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s0 = peg$f25(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          }\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$c25;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e28); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseStringContents();\n      if (input.charCodeAt(peg$currPos) === 39) {\n        s3 = peg$c25;\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e28); }\n      }\n      if (s3 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s0 = peg$f26(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$e27); }\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$f27(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$f28(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$f29();\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$c25;\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e28); }\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$f30();\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$e29); }\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$e29); }\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$f31();\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$f32();\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$f33(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$f34(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$f35();\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$c16;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$e31); }\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$e31); }\n        }\n      }\n    } else {\n      s2 = peg$FAILED;\n    }\n    if (s2 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s0 = peg$f36();\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$e30); }\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$c16;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$e31); }\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$e31); }\n      }\n    }\n    if (input.charCodeAt(peg$currPos) === 46) {\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      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$e31); }\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$e31); }\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$c26;\n          peg$currPos++;\n        } else {\n          s6 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e33); }\n        }\n        if (s6 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 69) {\n            s6 = peg$c27;\n            peg$currPos++;\n          } else {\n            s6 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e34); }\n          }\n        }\n        if (s6 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s7 = peg$c15;\n            peg$currPos++;\n          } else {\n            s7 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e17); }\n          }\n          if (s7 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s7 = peg$c16;\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$e31); }\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$e31); }\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$f37();\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$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$e31); }\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$e31); }\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 101) {\n          s3 = peg$c26;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e33); }\n        }\n        if (s3 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 69) {\n            s3 = peg$c27;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e34); }\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s4 = peg$c15;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e17); }\n          }\n          if (s4 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s4 = peg$c16;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e18); }\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$e31); }\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$e31); }\n              }\n            }\n          } else {\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s0 = peg$f38();\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$e32); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifierOrBoolean() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n    s0 = peg$currPos;\n    if (peg$r3.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$e35); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = [];\n      if (peg$r4.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$e36); }\n      }\n      if (s4 !== peg$FAILED) {\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          if (peg$r4.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$e36); }\n          }\n        }\n      } else {\n        s3 = peg$FAILED;\n      }\n      if (s3 === peg$FAILED) {\n        s3 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s4 = peg$c21;\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$e23); }\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$currPos;\n          peg$silentFails++;\n          s6 = peg$currPos;\n          s7 = peg$parse_();\n          s8 = peg$parseStrictIdentifier();\n          if (s8 !== peg$FAILED) {\n            s9 = peg$parse_();\n            if (input.charCodeAt(peg$currPos) === 40) {\n              s10 = peg$c22;\n              peg$currPos++;\n            } else {\n              s10 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$e24); }\n            }\n            if (s10 !== peg$FAILED) {\n              s7 = [s7, s8, s9, s10];\n              s6 = s7;\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s6;\n            s6 = peg$FAILED;\n          }\n          peg$silentFails--;\n          if (s6 === peg$FAILED) {\n            s5 = undefined;\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\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      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = [];\n        if (peg$r4.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$e36); }\n        }\n        if (s4 !== peg$FAILED) {\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            if (peg$r4.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$e36); }\n            }\n          }\n        } else {\n          s3 = peg$FAILED;\n        }\n        if (s3 === peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s4 = peg$c21;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$e23); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            s6 = peg$currPos;\n            s7 = peg$parse_();\n            s8 = peg$parseStrictIdentifier();\n            if (s8 !== peg$FAILED) {\n              s9 = peg$parse_();\n              if (input.charCodeAt(peg$currPos) === 40) {\n                s10 = peg$c22;\n                peg$currPos++;\n              } else {\n                s10 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$e24); }\n              }\n              if (s10 !== peg$FAILED) {\n                s7 = [s7, s8, s9, s10];\n                s6 = s7;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = undefined;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\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      }\n      peg$savedPos = s0;\n      s0 = peg$f39();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseStrictIdentifier() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    if (peg$r3.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$e35); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      if (peg$r4.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$e36); }\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        if (peg$r4.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$e36); }\n        }\n      }\n      peg$savedPos = s0;\n      s0 = peg$f40();\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\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$e38); }\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$e38); }\n      }\n    }\n    peg$silentFails--;\n    s1 = peg$FAILED;\n    if (peg$silentFails === 0) { peg$fail(peg$e37); }\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","export 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';\nexport const DICT = 'dict';\nexport const ARRAY = 'array';\nexport const FUNCTION = 'function';\n","import type { 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 'TryExpression':\n            walk(ast.test, visitors);\n            walk(ast.alternate, visitors);\n            break;\n        case 'CallExpression':\n            ast.arguments.forEach(item => {\n                walk(item, visitors);\n            });\n            break;\n        case 'MethodExpression':\n            walk(ast.object, visitors);\n            ast.arguments.forEach(item => {\n                walk(item, visitors);\n            });\n            break;\n    }\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 = (typeof color === 'string' && 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 function correctColorWithAlpha(color: string | undefined, alpha: number, defaultColor = 'transparent'): string {\n    color = (typeof color === 'string' && 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\nexport function 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","import type { EvalContext, EvalTypes, EvalTypesWithoutDatetime, EvalValue, EvalValueBase, IntegerValue, NumberValue } from './eval';\nimport type { Node, Variable } from './ast';\nimport type { VariablesMap } from './eval';\nimport { walk } from './walk';\nimport { parseColor, type ParsedColor } from '../utils/correctColor';\nimport { padLeft } from '../utils/padLeft';\nimport { MAX_INT, MIN_INT, toBigInt } from './bigint';\nimport { BOOLEAN, NUMBER } from './const';\nimport type { TypedValue } from '../../typings/common';\nimport type { MaybeMissing } from './json';\nimport type { FuncMatchError } from './funcs/funcs';\n\nexport class FuncError extends Error {\n}\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 [\n        date.getFullYear(),\n        String(date.getMonth() + 1).padStart(2, '0'),\n        String(date.getDate()).padStart(2, '0')\n    ].join('-') + ' ' + [\n        String(date.getHours()).padStart(2, '0'),\n        String(date.getMinutes()).padStart(2, '0'),\n        String(date.getSeconds()).padStart(2, '0')\n    ].join(':');\n}\n\nfunction stringifySortReplacer(key: string, value: unknown): unknown {\n    if (value && value instanceof Object && !Array.isArray(value)) {\n        return Object.keys(value)\n            .sort()\n            .reduce<Record<string, unknown>>((sorted, key) => {\n                sorted[key] = value[key as keyof typeof value];\n                return sorted;\n            }, {});\n    }\n\n    return value;\n}\n\nexport function valToString(val: EvalValue, stringifyComplex: boolean): 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    } else if ((val.type === 'dict' || val.type === 'array') && stringifyComplex) {\n        return JSON.stringify(val.value, stringifySortReplacer);\n    } else if (val.type === 'dict') {\n        return '<dict>';\n    } else if (val.type === 'array') {\n        return '<array>';\n    } else if (val.type === 'function') {\n        return val.value[0].name || 'Function';\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, false);\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: string): string {\n    if (type === 'datetime') {\n        return 'DateTime';\n    }\n    return type.charAt(0).toUpperCase() + type.substring(1);\n}\n\nexport function roundInteger(_ctx: EvalContext, val: bigint): bigint {\n    return toBigInt(val);\n}\n\nexport function checkIntegerOverflow(_ctx: EvalContext, val: number | bigint): void {\n    if (val < MIN_INT || val > MAX_INT) {\n        throw new Error('Integer overflow.');\n    }\n}\n\nexport function checkUrl(val: unknown): void {\n    if (typeof val !== 'string') {\n        throw new Error('Incorrect url value.');\n    }\n\n    try {\n        // eslint-disable-next-line no-new\n        new URL(val);\n    } catch (_err) {\n        throw new Error('Incorrect url value.');\n    }\n}\n\nexport function safeCheckUrl(val: unknown): boolean {\n    try {\n        checkUrl(val);\n        return true;\n    } catch {\n        return false;\n    }\n}\n\nexport function gatherVarsFromAst(ast: Node): string[] {\n    const res = new Set<string>();\n\n    walk(ast, {\n        Variable(node: Variable): void {\n            res.add(node.id.name);\n        }\n    });\n\n    return [...res];\n}\n\nexport function evalError(msg: string, details: string): never {\n    throw new FuncError(`Failed to evaluate [${msg}]. ${details}`);\n}\n\nexport function evalOuterError(_msg: string, details: string): never {\n    throw new Error(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\nexport function integerToNumber(integerValue: IntegerValue): NumberValue {\n    return {\n        type: NUMBER,\n        value: Number(integerValue.value)\n    };\n}\n\nconst EVAL_TYPE_TO_JS_TYPE = {\n    string: 'string',\n    number: 'number',\n    integer: 'number',\n    boolean: 'boolean',\n    color: 'string',\n    url: 'string',\n    array: 'array',\n    dict: 'object',\n    datetime: 'never'\n};\nexport function convertJsValueToDivKit(\n    ctx: EvalContext | undefined,\n    val: unknown,\n    evalType: EvalTypes\n): EvalValue {\n    if (evalType === 'function') {\n        throw new Error('Cannot convert function');\n    }\n\n    const jsType = EVAL_TYPE_TO_JS_TYPE[evalType];\n\n    let type: string = typeof val;\n    if (\n        jsType === 'array' && !Array.isArray(val) ||\n        jsType !== 'array' && type !== jsType ||\n        type === 'object' && val === null\n    ) {\n        if (type === 'object') {\n            if (Array.isArray(val)) {\n                type = 'array';\n            } else if (val === null) {\n                type = 'null';\n            } else {\n                type = 'dict';\n            }\n        }\n        throw new Error(`Incorrect value type: expected ${typeToString(evalType)}, got ${typeToString(type)}.`);\n    }\n    if (jsType === 'number' && evalType === 'integer') {\n        if (ctx) {\n            checkIntegerOverflow(ctx, val as number);\n        }\n        try {\n            val = toBigInt(val as number);\n        } catch (_err) {\n            throw new Error('Cannot convert value to integer.');\n        }\n    }\n    if (jsType === 'string' && evalType === 'color') {\n        val = transformColorValue(val as string);\n    }\n    if (jsType === 'string' && evalType === 'url') {\n        checkUrl(val);\n    }\n    if (jsType === 'boolean' && evalType === BOOLEAN) {\n        val = val ? 1 : 0;\n    }\n\n    return {\n        type: evalType,\n        value: val\n    } as EvalValue;\n}\n\nexport function convertDivKitValueToJson(value: EvalValue) {\n    if (value.type === 'number' || value.type === 'integer') {\n        return Number(value.value);\n    } else if (value.type === 'boolean') {\n        return Boolean(value.value);\n    }\n\n    return value.value;\n}\n\nexport function convertTypedValue(value: MaybeMissing<TypedValue>) {\n    return convertDivKitValueToJson(\n        convertJsValueToDivKit(undefined, value.value, value.type as EvalTypesWithoutDatetime)\n    );\n}\n\nexport function argsToStr(args: EvalValue[]): string {\n    return args.map(valToPreview).join(', ');\n}\n\nexport function logFunctionMatchError(\n    funcName: string,\n    args: EvalValue[],\n    findRes: FuncMatchError,\n    isOuterFunc = false\n): never {\n    const argsType = args.map(arg => typeToString(arg.type)).join(', ');\n    const prefix = `${funcName}(${argsToStr(args)})`;\n    const makeError: (msg: string, details: string) => never =\n        isOuterFunc ? evalOuterError : evalError;\n\n    if (findRes.type === 'few' && args.length === 0 && findRes.hasOverloads) {\n        makeError(prefix, 'Function requires non empty argument list.');\n    } else if (findRes.type === 'many' || findRes.type === 'few' || findRes.type === 'mismatch') {\n        if (findRes.hasOverloads) {\n            makeError(prefix, `Function has no matching overload for given argument types: ${argsType}.`);\n        } else {\n            // eslint-disable-next-line no-lonely-if\n            if (findRes.type === 'many' || findRes.type === 'few') {\n                if (findRes.def.args.some(arg => typeof arg === 'object' && arg.isVararg)) {\n                    makeError(prefix, `At least ${findRes.def.args.length} argument(s) expected.`);\n                } else {\n                    makeError(prefix, `Exactly ${findRes.def.args.length} argument(s) expected.`);\n                }\n            } else {\n                const expectedArgs = findRes.def.args.map(arg => typeToString(typeof arg === 'string' ? arg : arg.type)).join(', ');\n                makeError(prefix, `Invalid argument type: expected ${expectedArgs}, got ${argsType}.`);\n            }\n        }\n    } else {\n        makeError(prefix, `Unknown function name: ${funcName}.`);\n    }\n}\n","import { INTEGER, NUMBER } from '../const';\nimport type { EvalTypes, EvalValue } from '../eval';\nimport type { EvalContext } from '../eval';\nimport { integerToNumber } from '../utils';\n\nexport type FuncArg = EvalTypes | {\n    type: EvalTypes;\n    isVararg?: boolean;\n}\n\nexport interface Func {\n    name?: string;\n    args: FuncArg[];\n    cb(ctx: EvalContext, ...args: EvalValue[]): EvalValue;\n}\n\nexport const funcs: Map<string, Func[]> = new Map();\nexport const funcByArgs: Map<string, Func> = new Map();\nexport const methods: Map<string, Func[]> = new Map();\nexport const methodByArgs: Map<string, Func> = new Map();\n\nexport type FuncMatchError = {\n    type: 'mismatch';\n    expected: EvalTypes;\n    found: EvalTypes;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'few';\n    expected: number;\n    found: number;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'many';\n    expected: number;\n    found: number;\n    def: Func;\n    hasOverloads: boolean;\n} | {\n    type: 'missing';\n};\n\nexport interface FuncMatchFound {\n    func: Func;\n    conversions: number;\n}\n\nexport type FuncMatch = FuncMatchFound | FuncMatchError;\n\n// no args\nexport function registerFunc(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerFunc<\n    A0 extends EvalTypes\n>(\n    name: string,\n    args: [A0],\n    cb: (\n        ctx: EvalContext,\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        ctx: EvalContext,\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        ctx: EvalContext,\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: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerFunc(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...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\n// no args\nexport function registerMethod(name: string, args: [], cb: (ctx?: EvalContext) => EvalValue): void;\n// one specific arg\nexport function registerMethod<\n    A0 extends EvalTypes\n>(\n    name: string,\n    args: [A0],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>\n    ) => EvalValue\n): void;\n// two specific args\nexport function registerMethod<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1],\n    cb: (\n        ctx: EvalContext,\n        arg0: Extract<EvalValue, { type: A0 }>,\n        arg1: Extract<EvalValue, { type: A1 }>\n    ) => EvalValue\n): void;\n// three specific args\nexport function registerMethod<\n    A0 extends EvalTypes,\n    A1 extends EvalTypes,\n    A2 extends EvalTypes\n>(\n    name: string,\n    args: [A0, A1, A2],\n    cb: (\n        ctx: EvalContext,\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 registerMethod(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: any[]) => EvalValue\n): void;\n\nexport function registerMethod(\n    name: string,\n    args: FuncArg[],\n    cb: (ctx: EvalContext, ...args: EvalValue[]) => EvalValue\n): void {\n    const desc: Func = {\n        args,\n        cb\n    };\n\n    const arr = methods.get(name) || [];\n\n    if (!methods.has(name)) {\n        methods.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    methodByArgs.set(funcKey, desc);\n}\n\nfunction matchFuncArgs(func: Func, args: EvalValue[], hasOverloads: boolean): {\n    type: 'match';\n    conversions: number;\n} | FuncMatchError {\n    const minArgs = func.args.length;\n    let maxArgs = func.args.length;\n    let conversions = 0;\n    const lastArg = func.args[func.args.length - 1];\n\n    if (typeof lastArg === 'object' && lastArg.isVararg) {\n        maxArgs = Infinity;\n    }\n\n    if (args.length < minArgs) {\n        return {\n            type: 'few',\n            expected: minArgs,\n            found: args.length,\n            def: func,\n            hasOverloads\n        };\n    } else if (args.length > maxArgs) {\n        return {\n            type: 'many',\n            expected: maxArgs,\n            found: args.length,\n            def: func,\n            hasOverloads\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 === NUMBER && args[i].type === INTEGER) {\n            ++conversions;\n            continue;\n        }\n\n        if (funcArg.type !== args[i].type) {\n            return {\n                type: 'mismatch',\n                expected: funcArg.type,\n                found: args[i].type,\n                def: func,\n                hasOverloads\n            };\n        }\n    }\n\n    return {\n        type: 'match',\n        conversions\n    };\n}\n\nexport function findBestMatchedFuncList(list: Func[] | undefined, args: EvalValue[]): FuncMatch {\n    if (!list) {\n        return {\n            type: 'missing'\n        };\n    }\n\n    let firstError: FuncMatchError | null = null;\n    let bestFunc: {\n        func: Func;\n        conversions: number;\n    } | null = null;\n    for (let i = 0; i < list.length; ++i) {\n        const match = matchFuncArgs(list[i], args, list.length > 1);\n        if (match.type === 'match') {\n            if (!bestFunc || bestFunc.conversions > match.conversions) {\n                bestFunc = {\n                    func: list[i],\n                    conversions: match.conversions\n                };\n            }\n            continue;\n        }\n        if (!firstError) {\n            firstError = match;\n        }\n    }\n\n    if (!bestFunc) {\n        if (firstError) {\n            return firstError;\n        }\n        throw new Error('Missing function');\n    }\n\n    return bestFunc;\n}\n\nexport function findBestMatchedFunc(map: Map<string, Func[]>, funcName: string, args: EvalValue[]): FuncMatch {\n    return findBestMatchedFuncList(map.get(funcName), args);\n}\n\nexport function convertArgs(func: Func, args: EvalValue[]): EvalValue[] {\n    return args.map((arg, 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 === NUMBER && arg.type === INTEGER) {\n            return integerToNumber(arg);\n        }\n\n        return arg;\n    });\n}\n\nexport function funcToKey(funcName: string, func: Func): string {\n    return funcName + ':' + func.args.map(arg => typeof arg === 'string' ? arg : arg.type).join('#');\n}\n","import type {\n    ArrayValue,\n    BooleanValue,\n    ColorValue,\n    DictValue,\n    EvalContext,\n    EvalValue,\n    IntegerValue,\n    NumberValue,\n    StringValue,\n    UrlValue\n} from '../eval';\nimport type { VariableType, VariableValue } from '../variable';\nimport { registerFunc, registerMethod } from './funcs';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { checkUrl, transformColorValue, valToString } from '../utils';\nimport { MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction toString(\n    _ctx: EvalContext,\n    arg: IntegerValue | NumberValue | BooleanValue | ColorValue | UrlValue | StringValue | ArrayValue | DictValue\n): EvalValue {\n    return {\n        type: STRING,\n        value: valToString(arg, true)\n    };\n}\n\n\nfunction toNumber(_ctx: EvalContext, arg: IntegerValue | StringValue): EvalValue {\n    const num = Number(arg.value);\n\n    if (Number.isNaN(num) || !Number.isFinite(num)) {\n        throw new Error('Unable to convert value to Number.');\n    }\n    if (arg.value === '') {\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(_ctx: EvalContext, 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: toBigInt(num)\n    };\n}\n\nfunction toIntegerString(_ctx: EvalContext, arg: StringValue): EvalValue {\n    let num: bigint;\n\n    try {\n        num = toBigInt(arg.value);\n    } catch (err) {\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(_ctx: EvalContext, arg: BooleanValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(arg.value ? 1 : 0)\n    };\n}\n\n\nfunction toBooleanInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const intVal = Number(arg.value);\n    if (intVal !== 1 && intVal !== 0) {\n        throw new Error('Unable to convert value to Boolean.');\n    }\n\n    return {\n        type: BOOLEAN,\n        value: intVal\n    };\n}\n\nfunction toBooleanString(_ctx: EvalContext, 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 toColor(_ctx: EvalContext, arg: StringValue): EvalValue {\n    return {\n        type: COLOR,\n        value: transformColorValue(arg.value)\n    };\n}\n\nfunction toUrl(_ctx: EvalContext, arg: StringValue): EvalValue {\n    checkUrl(arg.value);\n\n    return {\n        type: URL,\n        value: arg.value\n    };\n}\n\nfunction encodeUri(_ctx: EvalContext, 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(_ctx: EvalContext, 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    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue,\n    type: VariableType\n): EvalValue {\n    const variable = ctx.variables.get(varName.value);\n    let value: VariableValue;\n\n    if (variable && variable.getType() === type) {\n        value = variable.getValue();\n\n        if (!ctx.storeUsedVars) {\n            ctx.storeUsedVars = new Set();\n        }\n        ctx.storeUsedVars.add(variable);\n    } else {\n        value = fallback.value;\n    }\n\n    if (type === 'color') {\n        value = transformColorValue(value as string);\n    } else if (type === 'url') {\n        checkUrl(value);\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    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n): EvalValue {\n    return getValueForced(ctx, varName, fallback, fallback.type);\n}\n\nfunction getColorValue(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n    return getValueForced(ctx, varName, fallback, 'color');\n}\n\nfunction getUrlValue(\n    ctx: EvalContext,\n    varName: StringValue,\n    fallback: IntegerValue | NumberValue | StringValue | BooleanValue | UrlValue | ColorValue\n) {\n    return getValueForced(ctx, varName, fallback, 'url');\n}\n\nfunction firstDiffChar(str0: string, str1: string): string {\n    for (let i = 0; i < str1.length; ++i) {\n        const char0 = str0.charAt(i);\n        const char1 = str1.charAt(i);\n\n        if (char0 !== char1 && char1) {\n            return char1;\n        }\n    }\n\n    return '';\n}\n\nconst TEST_NUMBER = 1234567890;\n\nfunction numberFractionDivider(locale?: string): string {\n    const formatter0 = new Intl.NumberFormat(locale, {\n        maximumFractionDigits: 0\n    });\n    const formatter1 = new Intl.NumberFormat(locale, {\n        minimumFractionDigits: 1\n    });\n\n    const str0 = formatter0.format(TEST_NUMBER);\n    const str1 = formatter1.format(TEST_NUMBER);\n\n    return firstDiffChar(str0, str1);\n}\n\nfunction numberGroupingDivider(locale?: string): string {\n    const formatter0 = new Intl.NumberFormat(locale, {\n        useGrouping: false\n    });\n    const formatter1 = new Intl.NumberFormat(locale, {\n        useGrouping: true\n    });\n\n    const str0 = formatter0.format(TEST_NUMBER);\n    const str1 = formatter1.format(TEST_NUMBER);\n\n    return firstDiffChar(str0, str1);\n}\n\nfunction decimalFormat(\n    _ctx: EvalContext,\n    arg: IntegerValue | NumberValue,\n    format: StringValue,\n    locale?: StringValue\n): EvalValue {\n    const pattern = format.value;\n    const patternWithoutGroupping = pattern.replace(/,/g, '');\n    if (\n        !/^((#+)|(#*0+))(\\.0*#*)?$/.test(patternWithoutGroupping) &&\n        !/^#*0*\\.((0*#*)|(#+))$/.test(patternWithoutGroupping) ||\n        /,.*,/.test(pattern) ||\n        pattern.indexOf(',') > pattern.indexOf('.') && pattern.indexOf('.') > -1\n    ) {\n        throw new Error('Incorrect format pattern.');\n    }\n\n    const rawParts = pattern.split('.');\n    const rawInteger = rawParts[0];\n    const rawFraction = rawParts[1] || '';\n\n    const parts = pattern.replace(/[^#0.]/g, '').split('.');\n    const integer = parts[0];\n    const fraction = parts[1] || '';\n\n    const groupIndex = rawInteger.indexOf(',');\n    const digitsInGroup = groupIndex > -1 ? rawInteger.length - groupIndex - 1 : -1;\n\n    if (groupIndex > -1 && digitsInGroup < 1 || rawFraction.indexOf(',') > -1) {\n        throw new Error('Incorrect format pattern.');\n    }\n\n    try {\n        let minimumIntegerDigits = 0;\n        while (integer[integer.length - 1 - minimumIntegerDigits] === '0') {\n            ++minimumIntegerDigits;\n        }\n        let minimumFractionDigits = 0;\n        while (fraction[minimumFractionDigits] === '0') {\n            ++minimumFractionDigits;\n        }\n        let maximumFractionDigits = minimumFractionDigits;\n        while (fraction[maximumFractionDigits] === '#') {\n            ++maximumFractionDigits;\n        }\n\n        const formatter = new Intl.NumberFormat(locale?.value || undefined, {\n            useGrouping: false,\n            minimumIntegerDigits: Math.min(Math.max(minimumIntegerDigits, 1), 21),\n            minimumFractionDigits: Math.min(Math.max(minimumFractionDigits, 0), 100),\n            maximumFractionDigits: Math.min(Math.max(maximumFractionDigits, minimumFractionDigits, 0), 100),\n            roundingMode: 'halfEven'\n        });\n\n        let result = formatter.format(arg.value);\n\n        if (groupIndex > -1 && digitsInGroup > 0) {\n            const groupChar = numberGroupingDivider(locale?.value);\n            const fractionChar = numberFractionDivider(locale?.value);\n\n            if (groupChar && fractionChar) {\n                const resultParts = result.split(fractionChar);\n                const resultInteger = resultParts[0];\n                let res = '';\n                for (let i = resultInteger.length - 1; i >= 0; --i) {\n                    res = resultInteger[i] + res;\n\n                    // eslint-disable-next-line max-depth\n                    if (i > 0 && (resultInteger.length - i) % digitsInGroup === 0) {\n                        res = groupChar + res;\n                    }\n                }\n\n                result = res + (resultParts.length > 1 ? fractionChar + resultParts[1] : '');\n            }\n        }\n\n        if (minimumFractionDigits === 0 && maximumFractionDigits === 0 && pattern.endsWith('.')) {\n            // force fraction delimeter on end\n            const divider = numberFractionDivider(locale?.value);\n            if (divider) {\n                result += divider;\n            }\n        }\n\n        return {\n            type: STRING,\n            value: result\n        };\n    } catch (_err) {\n        throw new Error('Incorrect or unsupported number format.' + _err + ' ' + locale?.value || undefined);\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    registerFunc('toString', [STRING], toString);\n    registerFunc('toString', [ARRAY], toString);\n    registerFunc('toString', [DICT], 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('toColor', [STRING], toColor);\n\n    registerFunc('toUrl', [STRING], toUrl);\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    registerMethod('toString', [INTEGER], toString);\n    registerMethod('toString', [NUMBER], toString);\n    registerMethod('toString', [BOOLEAN], toString);\n    registerMethod('toString', [COLOR], toString);\n    registerMethod('toString', [URL], toString);\n    registerMethod('toString', [STRING], toString);\n    registerMethod('toString', [ARRAY], toString);\n    registerMethod('toString', [DICT], toString);\n\n    registerFunc('decimalFormat', [INTEGER, STRING], decimalFormat);\n    registerFunc('decimalFormat', [NUMBER, STRING], decimalFormat);\n    registerFunc('decimalFormat', [INTEGER, STRING, STRING], decimalFormat);\n    registerFunc('decimalFormat', [NUMBER, STRING, STRING], decimalFormat);\n\n    registerMethod('decimalFormat', [INTEGER, STRING], decimalFormat);\n    registerMethod('decimalFormat', [NUMBER, STRING], decimalFormat);\n    registerMethod('decimalFormat', [INTEGER, STRING, STRING], decimalFormat);\n    registerMethod('decimalFormat', [NUMBER, STRING, STRING], decimalFormat);\n}\n","// Some code based on the https://github.com/date-fns (MIT License)\n\ntype FormatGetter = (opts: Intl.DateTimeFormatOptions & {\n    date?: Date;\n}, field: Intl.DateTimeFormatPartTypes | 'week' | 'weekyear' | 'extendedyear' | 'weekofmonth' | 'dayofyear' | 'dayofweekinmonth' | 'weekdaynumeric' | 'timezoneoffset') => string | undefined;\n\nfunction formatNumber(num: string | undefined, len: number | undefined): string | undefined {\n    if (!num || !len) {\n        return num;\n    }\n\n    return num.padStart(len, '0');\n}\n\nconst formatters: Record<string, (token: number, getter: FormatGetter) => string | undefined> = {\n    G(token, getter) {\n        let era: Intl.DateTimeFormatOptions['era'];\n        if (token < 4) {\n            era = 'short';\n        } else if (token === 5) {\n            era = 'narrow';\n        } else {\n            era = 'long';\n        }\n        return getter({\n            era\n        }, 'era');\n    },\n    d(token, getter) {\n        return formatNumber(getter({\n            day: 'numeric'\n        }, 'day'), token > 1 ? token : 0);\n    },\n    D(token, getter) {\n        return formatNumber(getter({}, 'dayofyear'), token > 1 ? token : 0);\n    },\n    F(token, getter) {\n        return formatNumber(getter({}, 'dayofweekinmonth'), token > 1 ? token : 0);\n    },\n    M(token, getter) {\n        let month: Intl.DateTimeFormatOptions['month'];\n        if (token === 1) {\n            month = 'numeric';\n        } else if (token === 2) {\n            month = '2-digit';\n        } else if (token === 3) {\n            month = 'short';\n        } else if (token === 5) {\n            month = 'narrow';\n        } else {\n            month = 'long';\n        }\n        return getter({\n            month,\n            // to get a genitive case of month\n            day: 'numeric'\n        }, 'month');\n    },\n    y(token, getter) {\n        return formatNumber(getter({\n            year: token === 2 ? '2-digit' : 'numeric'\n        }, 'year'), token > 2 ? token : undefined);\n    },\n    Y(token, getter) {\n        return formatNumber(getter({\n            year: token === 2 ? '2-digit' : 'numeric'\n        }, 'weekyear'), token > 2 ? token : undefined);\n    },\n    u(token, getter) {\n        return formatNumber(getter({\n            year: 'numeric'\n        }, 'extendedyear'), token > 1 ? token : undefined);\n    },\n    E(token, getter) {\n        let weekday: Intl.DateTimeFormatOptions['weekday'];\n        if (token <= 3) {\n            weekday = 'short';\n        } else if (token === 5) {\n            weekday = 'narrow';\n        } else {\n            weekday = 'long';\n        }\n        return getter({\n            weekday\n        }, 'weekday');\n    },\n    e(token, getter) {\n        if (token > 2) {\n            return formatters.E(token, getter);\n        }\n        return formatNumber(getter({}, 'weekdaynumeric'), token > 1 ? token : undefined);\n    },\n    w(token, getter) {\n        return formatNumber(getter({}, 'week'), token > 1 ? token : undefined);\n    },\n    W(token, getter) {\n        return formatNumber(getter({}, 'weekofmonth'), token > 1 ? token : undefined);\n    },\n    H(token, getter) {\n        const hours = getter({\n            hour: 'numeric',\n            hour12: false,\n            hourCycle: 'h23',\n        }, 'hour');\n\n        if (!hours) {\n            return;\n        }\n\n        // v8 may return '24' with 'h23' style\n        const fixed = String(Number(hours) % 24);\n        return formatNumber(fixed, token > 1 ? token : undefined);\n    },\n    h(token, getter) {\n        return formatNumber(getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h12',\n        }, 'hour'), token > 1 ? token : undefined);\n    },\n    K(token, getter) {\n        const hours = getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h11',\n        }, 'hour');\n\n        if (!hours) {\n            return;\n        }\n\n        const fixed = String(Number(hours) % 12);\n        return formatNumber(fixed, token > 1 ? token : undefined);\n    },\n    k(token, getter) {\n        return formatNumber(getter({\n            hour: 'numeric',\n            hour12: false,\n            hourCycle: 'h24',\n        }, 'hour'), token > 2 ? token : undefined);\n    },\n    a(_token, getter) {\n        return getter({\n            hour: 'numeric',\n            hour12: true,\n            hourCycle: 'h11',\n            dayPeriod: undefined\n        }, 'dayPeriod');\n    },\n    m(token, getter) {\n        return formatNumber(getter({\n            minute: 'numeric'\n        }, 'minute'), token > 1 ? token : undefined);\n    },\n    s(token, getter) {\n        return formatNumber(getter({\n            second: 'numeric'\n        }, 'second'), token > 1 ? token : undefined);\n    },\n    S(token, getter) {\n        const res = getter({\n            fractionalSecondDigits: Math.min(3, token) as 1 | 2 | 3\n        }, 'fractionalSecond');\n\n        if (res && token > 3) {\n            return res.padEnd(token, '0');\n        }\n        return res;\n    },\n    z(token, getter) {\n        return getter({\n            timeZoneName: token === 4 ? 'long' : 'short'\n        }, 'timeZoneName');\n    },\n    Z(_token, getter) {\n        const offset = -Number(getter({}, 'timezoneoffset'));\n        const timeOffset = Math.abs(offset / 60);\n        const fullOffset = Math.floor(timeOffset) * 100 + (timeOffset - Math.floor(timeOffset)) * 60;\n\n        return (offset >= 0 ? '+' : '-') + formatNumber(String(fullOffset), 4);\n    },\n};\n\nconst formattingTokensRegExp =\n    /(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nconst msInDay = 1000 * 60 * 60 * 24;\n\nfunction cleanEscapedString(input: string): string {\n    const matched = input.match(escapedStringRegExp);\n\n    if (!matched) {\n        return input;\n    }\n\n    return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\nfunction getWeekFirstDay(date: Date, isUTC: boolean, weekStartDay: number): Date {\n    const weekDay = date[isUTC ? 'getUTCDay' : 'getDay']();\n\n    // Monday logic\n    const offset = (weekDay < weekStartDay) ?\n        weekStartDay - weekDay - 7 :\n        weekStartDay - weekDay;\n\n    return new Date(date.getTime() + msInDay * offset);\n}\n\nfunction getFirstWeekFirstDay(date: Date, isUTC: boolean, weekStartDay: number): Date {\n    const firstDay = new Date(date);\n    firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n    firstDay[isUTC ? 'setUTCMonth' : 'setMonth'](0);\n\n    return getWeekFirstDay(firstDay, isUTC, weekStartDay);\n}\n\nfunction dayDiff(date0: Date, date1: Date): number {\n    return Math.round((date0.getTime() - date1.getTime()) / msInDay);\n}\n\nfunction getIOSWeekYear(date: Date, isUTC: boolean, weekStartDay: number): {\n    week: number;\n    year: number;\n} {\n    let week = 0;\n\n    const firstWeekFirstDay = getFirstWeekFirstDay(date, isUTC || false, weekStartDay);\n    const nextYearDate = new Date(date);\n    nextYearDate[isUTC ? 'setUTCFullYear' : 'setFullYear'](date[isUTC ? 'getUTCFullYear' : 'getFullYear']() + 1);\n    const nextYearFirstWeekFirstDay = getFirstWeekFirstDay(nextYearDate, isUTC || false, weekStartDay);\n\n    const isBeforeFirstWeek = date.getTime() < firstWeekFirstDay.getTime();\n    const isAfterLastWeek = date.getTime() >= nextYearFirstWeekFirstDay.getTime();\n\n    let year = date[isUTC ? 'getUTCFullYear' : 'getFullYear']();\n    if (isBeforeFirstWeek) {\n        --year;\n        firstWeekFirstDay[isUTC ? 'setUTCFullYear' : 'setFullYear'](firstWeekFirstDay[isUTC ? 'getUTCFullYear' : 'getFullYear']() - 1);\n        const dayOfYear = dayDiff(getWeekFirstDay(date, isUTC, weekStartDay), firstWeekFirstDay);\n        week = Math.round(dayOfYear / 7) + 1;\n    } else if (isAfterLastWeek) {\n        ++year;\n        week = 1;\n    } else {\n        const dayOfYear = dayDiff(getWeekFirstDay(date, isUTC, weekStartDay), firstWeekFirstDay);\n        week = Math.round(dayOfYear / 7) + 1;\n    }\n\n    return {\n        week,\n        year\n    };\n}\n\nexport function formatDate(date: Date, format: string, {\n    locale,\n    isUTC,\n    weekStartDay = 0\n}: {\n    locale?: string;\n    isUTC?: boolean;\n    weekStartDay?: number;\n} = {}): string {\n    const getter: FormatGetter = (opts, field): string | undefined => {\n        if (field === 'week') {\n            const { week } = getIOSWeekYear(date, isUTC || false, weekStartDay);\n\n            return String(week);\n        }\n\n        if (field === 'weekofmonth') {\n            const weekday = date[isUTC ? 'getUTCDay' : 'getDay']();\n            const firstDay = new Date(date);\n            firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n            const firstWeekday = firstDay[isUTC ? 'getUTCDay' : 'getDay']();\n            const dayOfMonth = date[isUTC ? 'getUTCDate' : 'getDate']();\n\n            return String(Math.ceil(dayOfMonth / 7) + (weekday < firstWeekday ? 1 : 0));\n        }\n\n        if (field === 'dayofweekinmonth') {\n            const dayOfMonth = date[isUTC ? 'getUTCDate' : 'getDate']();\n\n            return String(Math.ceil(dayOfMonth / 7));\n        }\n\n        if (field === 'weekdaynumeric') {\n            let weekday = date[isUTC ? 'getUTCDay' : 'getDay']();\n\n            if (weekday < weekStartDay) {\n                weekday += 7;\n            }\n\n            return String(weekday - weekStartDay + 1);\n        }\n\n        if (field === 'dayofyear') {\n            const firstDay = new Date(date);\n            firstDay[isUTC ? 'setUTCMonth' : 'setMonth'](0);\n            firstDay[isUTC ? 'setUTCDate' : 'setDate'](1);\n            firstDay[isUTC ? 'setUTCHours' : 'setHours'](1);\n            firstDay[isUTC ? 'setUTCMinutes' : 'setMinutes'](1);\n            firstDay[isUTC ? 'setUTCSeconds' : 'setSeconds'](1);\n\n            const dayOfYear = Math.ceil((date.getTime() - firstDay.getTime()) / msInDay);\n\n            return String(dayOfYear);\n        }\n\n        if (field === 'weekyear') {\n            let { year } = getIOSWeekYear(date, isUTC || false, weekStartDay);\n\n            if (year < 1) {\n                year = 1 - year;\n            }\n\n            if (opts.year === '2-digit') {\n                return String(year % 100);\n            }\n            return String(year);\n        }\n\n        if (field === 'extendedyear') {\n            const year = date[isUTC ? 'getUTCFullYear' : 'getFullYear']();\n\n            if (opts.year === '2-digit') {\n                return String(year % 100);\n            }\n            return String(year);\n        }\n\n        if (field === 'timezoneoffset') {\n            if (isUTC) {\n                return '0';\n            }\n            return String(date.getTimezoneOffset());\n        }\n\n        if (isUTC) {\n            opts.timeZone = 'UTC';\n        }\n\n        const formatter = new Intl.DateTimeFormat(locale, opts);\n        const parts = formatter.formatToParts(date);\n\n        for (let i = 0; i < parts.length; ++i) {\n            if (parts[i].type === field) {\n                return parts[i].value;\n            }\n        }\n    };\n\n    return (format\n        .match(formattingTokensRegExp) || [])\n        .map(substring => {\n            if (substring === \"''\") {\n                return \"'\";\n            }\n\n            const firstCharacter = substring[0];\n            if (firstCharacter === \"'\") {\n                return cleanEscapedString(substring);\n            }\n\n            if (formatters[firstCharacter]) {\n                return formatters[firstCharacter](substring.length, getter);\n            }\n\n            if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n                throw new Error(\n                    `Format string contains an unescaped latin alphabet character \"${firstCharacter}\"`\n                );\n            }\n\n            return substring;\n        })\n        .join('');\n}\n","/* eslint-disable no-nested-ternary */\nimport type { DatetimeValue, EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { DATETIME, INTEGER, STRING } from '../const';\nimport { valToString } from '../utils';\nimport { toBigInt } from '../bigint';\nimport { formatDate } from '../../utils/formatDate';\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(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date(Number(arg.value) * 1000)\n    };\n}\n\nfunction parseUnixTimeAsLocal(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const date = new Date(Number(arg.value) * 1000);\n    const offset = date.getTimezoneOffset();\n    date.setMinutes(date.getMinutes() - offset);\n\n    return {\n        type: DATETIME,\n        value: date\n    };\n}\n\nfunction nowLocal(): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date()\n    };\n}\n\nfunction addMillis(_ctx: EvalContext, datetime: DatetimeValue, milliseconds: IntegerValue): EvalValue {\n    return {\n        type: DATETIME,\n        value: new Date(datetime.value.getTime() + Number(milliseconds.value))\n    };\n}\n\nfunction setYear(_ctx: EvalContext, datetime: DatetimeValue, year: IntegerValue): EvalValue {\n    const copy = new Date(datetime.value);\n\n    copy.setUTCFullYear(Number(year.value));\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMonth(_ctx: EvalContext, datetime: DatetimeValue, month: IntegerValue): EvalValue {\n    const intVal = Number(month.value);\n\n    if (intVal < 1 || intVal > 12) {\n        throw new Error(`Expecting month in [1..12], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCMonth(intVal - 1);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setDay(_ctx: EvalContext, datetime: DatetimeValue, day: IntegerValue): EvalValue {\n    const copy = new Date(datetime.value);\n    const intVal = Number(day.value);\n\n    if (intVal <= 0 && intVal !== -1 || intVal > getMaxDate(copy)) {\n        throw new Error(`Unable to set day ${intVal} for date ${valToString(datetime, false)}.`);\n    }\n\n    copy.setUTCDate(intVal === -1 ? 0 : intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setHours(_ctx: EvalContext, datetime: DatetimeValue, hours: IntegerValue): EvalValue {\n    const intVal = Number(hours.value);\n\n    if (intVal < 0 || intVal > 23) {\n        throw new Error(`Expecting hours in [0..23], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCHours(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMinutes(_ctx: EvalContext, datetime: DatetimeValue, minutes: IntegerValue): EvalValue {\n    const intVal = Number(minutes.value);\n\n    if (intVal < 0 || intVal > 59) {\n        throw new Error(`Expecting minutes in [0..59], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n\n    copy.setUTCMinutes(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setSeconds(_ctx: EvalContext, datetime: DatetimeValue, seconds: IntegerValue): EvalValue {\n    const intVal = Number(seconds.value);\n\n    if (intVal < 0 || intVal > 59) {\n        throw new Error(`Expecting seconds in [0..59], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCSeconds(intVal);\n\n    return {\n        type: DATETIME,\n        value: copy\n    };\n}\n\nfunction setMillis(_ctx: EvalContext, datetime: DatetimeValue, millis: IntegerValue): EvalValue {\n    const intVal = Number(millis.value);\n\n    if (intVal < 0 || intVal > 999) {\n        throw new Error(`Expecting millis in [0..999], instead got ${intVal}.`);\n    }\n\n    const copy = new Date(datetime.value);\n    copy.setUTCMilliseconds(intVal);\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 (_ctx: EvalContext, 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: toBigInt(value)\n        };\n    };\n};\n\nfunction makeFormat(isUTC: boolean) {\n    return (ctx: EvalContext, datetime: DatetimeValue, format: StringValue, locale?: StringValue): EvalValue => {\n        return {\n            type: STRING,\n            value: formatDate(datetime.value, format.value, {\n                locale: locale?.value,\n                isUTC,\n                weekStartDay: ctx.weekStartDay\n            })\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\nconst formatAsLocal = makeFormat(false);\nconst formatAsUTC = makeFormat(true);\n\nfunction getTimestamp(_ctx: EvalContext, datetime: DatetimeValue): IntegerValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(datetime.value.getTime())\n    };\n}\n\nexport function registerDatetime(): void {\n    registerFunc('parseUnixTime', [INTEGER], parseUnixTime);\n    registerFunc('parseUnixTimeAsLocal', [INTEGER], parseUnixTimeAsLocal);\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    registerFunc('formatDateAsLocal', [DATETIME, STRING], formatAsLocal);\n    registerFunc('formatDateAsUTC', [DATETIME, STRING], formatAsUTC);\n    registerFunc('formatDateAsLocalWithLocale', [DATETIME, STRING, STRING], formatAsLocal);\n    registerFunc('formatDateAsUTCWithLocale', [DATETIME, STRING, STRING], formatAsUTC);\n\n    registerFunc('getTimestamp', [DATETIME], getTimestamp);\n}\n","export function escapeRegExp(str: string): string {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\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","import type { EvalContext, EvalValue, IntegerValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { BOOLEAN, INTEGER, STRING } from '../const';\nimport { escapeRegExp } from '../../utils/escapeRegExp';\nimport { valToString } from '../utils';\nimport { wrapError } from '../../utils/wrapError';\nimport { toBigInt } from '../bigint';\n\nfunction len(_ctx: EvalContext, arg: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(arg.value.length)\n    };\n}\n\nfunction contains(_ctx: EvalContext, wholeStr: StringValue, partStr: StringValue): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: wholeStr.value.includes(partStr.value) ? 1 : 0\n    };\n}\n\nfunction substring(_ctx: EvalContext, 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(Number(start.value), Number(end.value))\n    };\n}\n\nfunction replaceAll(_ctx: EvalContext, 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(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(str.value.indexOf(what.value))\n    };\n}\n\nfunction lastIndex(_ctx: EvalContext, str: StringValue, what: StringValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(str.value.lastIndexOf(what.value))\n    };\n}\n\nfunction trim(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.trim()\n    };\n}\n\nfunction trimLeft(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.replace(/^\\s+/, '')\n    };\n}\n\nfunction trimRight(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.replace(/\\s+$/, '')\n    };\n}\n\nfunction toUpperCase(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.toUpperCase()\n    };\n}\n\nfunction toLowerCase(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        value: str.value.toLowerCase()\n    };\n}\n\nfunction calcPad(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): string {\n    if (!pad.value.length) {\n        ctx.warnings.push(wrapError(new Error('String for padding is empty.'), {\n            level: 'warn'\n        }));\n        return '';\n    }\n\n    let part = '';\n    const str = val.type === STRING ? val.value : valToString(val, false);\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, Number(len.value) - Number(str.length));\n    }\n\n    return part;\n}\n\nfunction padStart(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): EvalValue {\n    const prefix = calcPad(ctx, val, len, pad);\n\n    return {\n        type: STRING,\n        value: prefix + valToString(val, false)\n    };\n}\n\nfunction padEnd(\n    ctx: EvalContext,\n    val: StringValue | IntegerValue,\n    len: IntegerValue,\n    pad: StringValue\n): EvalValue {\n    const suffix = calcPad(ctx, val, len, pad);\n\n    return {\n        type: STRING,\n        value: valToString(val, false) + suffix\n    };\n}\n\nfunction testRegex(_ctx: EvalContext, str: StringValue, regex: StringValue): EvalValue {\n    let re: RegExp;\n    try {\n        re = new RegExp(regex.value);\n    } catch (err) {\n        throw new Error('Invalid regular expression.');\n    }\n\n    return {\n        type: BOOLEAN,\n        value: re.test(str.value) ? 1 : 0\n    };\n}\n\nfunction encodeRegex(_ctx: EvalContext, str: StringValue): EvalValue {\n    return {\n        type: STRING,\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\n        value: str.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\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    registerFunc('testRegex', [STRING, STRING], testRegex);\n    registerFunc('encodeRegex', [STRING], encodeRegex);\n}\n","import type { EvalContext, EvalValue, IntegerValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER, MAX_NUMBER, MIN_NUMBER, NUMBER } from '../const';\nimport { checkIntegerOverflow, roundInteger } from '../utils';\nimport { absBigInt, bigIntZero, signBigInt, MAX_INT, MIN_INT, toBigInt } from '../bigint';\n\nfunction divInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    if (arg1.value === bigIntZero) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    let res = arg0.value / arg1.value;\n    res = roundInteger(ctx, res);\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction divNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    if (arg1.value === 0) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    const res = arg0.value / arg1.value;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction modInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    if (arg1.value === bigIntZero) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    let res = arg0.value % arg1.value;\n    res = roundInteger(ctx, res);\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction modNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    if (arg1.value === 0) {\n        throw new Error('Division by zero is not supported.');\n    }\n\n    const res = arg0.value % arg1.value;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction mulInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = args.length ? args[0].value : bigIntZero;\n    for (let i = 1; i < args.length; ++i) {\n        res *= args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction mulNumber(_ctx: EvalContext, ...args: NumberValue[]): 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    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction subInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = args.length ? args[0].value : bigIntZero;\n    for (let i = 1; i < args.length; ++i) {\n        res -= args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction subNumber(_ctx: EvalContext, ...args: NumberValue[]): 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    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction sumInteger(ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    let res = bigIntZero;\n    for (let i = 0; i < args.length; ++i) {\n        res += args[i].value;\n        res = roundInteger(ctx, res);\n        checkIntegerOverflow(ctx, res);\n    }\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction sumNumber(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    let res = 0;\n    for (let i = 0; i < args.length; ++i) {\n        res += args[i].value;\n    }\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction absInteger(ctx: EvalContext, arg: IntegerValue): EvalValue {\n    const res = absBigInt(arg.value);\n\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: arg.type,\n        value: res\n    };\n}\n\nfunction absNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    const res = Math.abs(arg.value);\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nfunction maxInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    let max = args[0].value;\n    for (let i = 1; i < args.length; ++i) {\n        if (args[i].value > max) {\n            max = args[i].value;\n        }\n    }\n\n    return {\n        type: INTEGER,\n        value: max\n    };\n}\n\nfunction maxNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.max(...args.map(arg => arg.value))\n    };\n}\n\nfunction minInt(_ctx: EvalContext, ...args: IntegerValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    let min = args[0].value;\n    for (let i = 1; i < args.length; ++i) {\n        if (args[i].value < min) {\n            min = args[i].value;\n        }\n    }\n\n    return {\n        type: INTEGER,\n        value: min\n    };\n}\n\nfunction minNum(_ctx: EvalContext, ...args: NumberValue[]): EvalValue {\n    if (!args.length) {\n        throw new Error('Function requires non empty argument list.');\n    }\n\n    return {\n        type: NUMBER,\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(ctx: EvalContext): EvalValue {\n    checkIntegerOverflow(ctx, MAX_INT);\n\n    return {\n        type: INTEGER,\n        value: MAX_INT\n    };\n}\n\nfunction minInteger(ctx: EvalContext): EvalValue {\n    checkIntegerOverflow(ctx, MIN_INT);\n\n    return {\n        type: INTEGER,\n        value: MIN_INT\n    };\n}\n\nfunction round(_ctx: EvalContext, 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(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.floor(arg.value)\n    };\n}\n\nfunction ceil(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.ceil(arg.value)\n    };\n}\n\nfunction signumInteger(_ctx: EvalContext, arg: IntegerValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: signBigInt(arg.value)\n    };\n}\n\nfunction signumNumber(_ctx: EvalContext, arg: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.sign(arg.value)\n    };\n}\n\nfunction copySignInteger(ctx: EvalContext, arg0: IntegerValue, arg1: IntegerValue): EvalValue {\n    let res: bigint;\n\n    if (arg1.value === bigIntZero) {\n        res = arg0.value;\n    } else if (arg0.value === bigIntZero) {\n        res = toBigInt(0);\n    } else {\n        const sign = signBigInt(arg1.value);\n\n        res = absBigInt(arg0.value) * sign;\n    }\n\n    checkIntegerOverflow(ctx, res);\n\n    return {\n        type: INTEGER,\n        value: res\n    };\n}\n\nfunction copySignNumber(_ctx: EvalContext, arg0: NumberValue, arg1: NumberValue): EvalValue {\n    let sign = Math.sign(arg1.value);\n\n    if (sign === 0) {\n        sign = Object.is(sign, 0) ? 1 : -1;\n    }\n\n    const res = Math.abs(arg0.value) * sign;\n\n    return {\n        type: NUMBER,\n        value: res\n    };\n}\n\nexport function registerMath(): void {\n    registerFunc('div', [INTEGER, INTEGER], divInteger);\n    registerFunc('div', [NUMBER, NUMBER], divNumber);\n\n    registerFunc('mod', [INTEGER, INTEGER], modInteger);\n    registerFunc('mod', [NUMBER, NUMBER], modNumber);\n\n    registerFunc('mul', [{\n        type: INTEGER,\n        isVararg: true\n    }], mulInteger);\n    registerFunc('mul', [{\n        type: NUMBER,\n        isVararg: true\n    }], mulNumber);\n\n    registerFunc('sub', [{\n        type: INTEGER,\n        isVararg: true\n    }], subInteger);\n    registerFunc('sub', [{\n        type: NUMBER,\n        isVararg: true\n    }], subNumber);\n\n    registerFunc('sum', [{\n        type: INTEGER,\n        isVararg: true\n    }], sumInteger);\n    registerFunc('sum', [{\n        type: NUMBER,\n        isVararg: true\n    }], sumNumber);\n\n    registerFunc('abs', [INTEGER], absInteger);\n    registerFunc('abs', [NUMBER], absNumber);\n\n    registerFunc('max', [{\n        type: INTEGER,\n        isVararg: true\n    }], maxInt);\n    registerFunc('max', [{\n        type: NUMBER,\n        isVararg: true\n    }], maxNum);\n\n    registerFunc('min', [{\n        type: INTEGER,\n        isVararg: true\n    }], minInt);\n    registerFunc('min', [{\n        type: NUMBER,\n        isVararg: true\n    }], minNum);\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', [INTEGER], signumInteger);\n    registerFunc('signum', [NUMBER], signumNumber);\n\n    registerFunc('copySign', [INTEGER, INTEGER], copySignInteger);\n    registerFunc('copySign', [NUMBER, NUMBER], copySignNumber);\n}\n","import type { ColorValue, EvalContext, EvalValue, NumberValue, StringValue } from '../eval';\nimport type { ParsedColor } from '../../utils/correctColor';\nimport { registerFunc } from './funcs';\nimport { COLOR, NUMBER, STRING } from '../const';\nimport { safeConvertColor, stringifyColor } from '../utils';\n\nfunction colorGetter(\n    field: keyof ParsedColor\n): (_ctx: EvalContext, 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): (_ctx: EvalContext, 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(_ctx: EvalContext, 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    _ctx: EvalContext,\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\nfunction compositeAlpha(alpha0: number, alpha1: number): number {\n    // mimic android & ios int calculation\n    return 0xff - ((((0xff - alpha0) * (0xff - alpha1)) / 0xff) | 0);\n}\n\nfunction compositeComponent(\n    bgColor: number,\n    bgAlpha: number,\n    fgColor: number,\n    fgAlpha: number,\n    alpha: number\n): number {\n    if (alpha === 0) {\n        return 0;\n    }\n\n    return (\n        (((0xFF * fgColor * fgAlpha) + (bgColor * bgAlpha * (0xFF - fgAlpha))) | 0) / (alpha * 0xFF)\n    ) | 0;\n}\n\nfunction alphaBlend(_ctx: EvalContext, color0: ColorValue, color1: ColorValue): EvalValue {\n    const parsed0 = safeConvertColor(color0.value);\n    const parsed1 = safeConvertColor(color1.value);\n\n    const totalAlpha = compositeAlpha(parsed0.a, parsed1.a);\n\n    return {\n        type: COLOR,\n        value: stringifyColor({\n            a: totalAlpha,\n            r: compositeComponent(parsed0.r, parsed0.a, parsed1.r, parsed1.a, totalAlpha),\n            g: compositeComponent(parsed0.g, parsed0.a, parsed1.g, parsed1.a, totalAlpha),\n            b: compositeComponent(parsed0.b, parsed0.a, parsed1.b, parsed1.a, totalAlpha),\n        })\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    registerFunc('alphaBlend', [COLOR, COLOR], alphaBlend);\n}\n","import type { EvalContext, EvalValue, IntegerValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { INTEGER } from '../const';\nimport { toBigInt } from '../bigint';\nimport { checkIntegerOverflow } from '../utils';\n\nfunction getDuration(ctx: EvalContext, 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 = toBigInt(milliseconds.value) / toBigInt(delimiter);\n\n    checkIntegerOverflow(ctx, val);\n\n    if (whole) {\n        val = toBigInt(val) % toBigInt(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(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_SECOND, SECONDS_IN_MINUTE);\n}\n\nfunction getIntervalTotalSeconds(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_SECOND);\n}\n\nfunction getIntervalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_MINUTE, MINUTES_IN_HOUR);\n}\n\nfunction getIntervalTotalMinutes(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_MINUTE);\n}\n\nfunction getIntervalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_HOUR, HOURS_IN_DAY);\n}\n\nfunction getIntervalTotalHours(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_HOUR);\n}\n\nfunction getIntervalTotalDays(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, milliseconds, MS_IN_DAY);\n}\n\nfunction getIntervalTotalWeeks(ctx: EvalContext, milliseconds: IntegerValue): EvalValue {\n    return getDuration(ctx, 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","import { toBigInt } from '../bigint';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport type { ArrayValue, BooleanValue, DictValue, EvalContext, EvalTypes, EvalTypesWithoutDatetime, EvalValue, IntegerValue, NumberValue, StringValue } from '../eval';\nimport { checkUrl, convertJsValueToDivKit, transformColorValue } from '../utils';\nimport { registerFunc, registerMethod } from './funcs';\n\nfunction getProp(obj: object, path: string[]): unknown {\n    let current: object = obj;\n\n    for (let i = 0; i < path.length; ++i) {\n        if (!current) {\n            throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n        }\n        const val = current[path[i] as keyof typeof current];\n        if (val === undefined) {\n            throw new Error(`Missing property \"${path[i]}\" in the dict.`);\n        }\n        current = val;\n    }\n\n    return current;\n}\n\nfunction dictGetter(evalType: EvalTypesWithoutDatetime) {\n    return (ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue => {\n        if (path.length === 0) {\n            throw new Error('Non empty argument list is required.');\n        }\n\n        const val = getProp(dict.value, path.map(it => it.value));\n\n        return convertJsValueToDivKit(ctx, val, evalType);\n    };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n    func: (ctx: EvalContext, dict: DictValue, ...path: StringValue[]) => EvalValue,\n    fallbackType: EvalTypes\n) {\n    return (ctx: EvalContext, fallback: ValueType, dict: DictValue, ...path: StringValue[]) => {\n        try {\n            return func(ctx, dict, ...path);\n        } catch (_err) {\n            // ignore error\n\n            let value = fallback.value;\n            if (fallbackType === 'color') {\n                value = transformColorValue(value as string);\n            } else if (fallbackType === 'url') {\n                checkUrl(value);\n            }\n            return {\n                type: fallbackType,\n                value\n            } as unknown as EvalValue;\n        }\n    };\n}\n\nconst getDictString = dictGetter(STRING);\nconst getDictNumber = dictGetter(NUMBER);\nconst getDictInteger = dictGetter(INTEGER);\nconst getDictBoolean = dictGetter(BOOLEAN);\nconst getDictColor = dictGetter(COLOR);\nconst getDictUrl = dictGetter(URL);\nconst getDictArray = dictGetter(ARRAY);\nconst getDictDict = dictGetter(DICT);\n\nconst getDictOptString = optWrapper<StringValue>(getDictString, STRING);\nconst getDictOptNumber = optWrapper<NumberValue>(getDictNumber, NUMBER);\nconst getDictOptInteger = optWrapper<IntegerValue>(getDictInteger, INTEGER);\nconst getDictOptBoolean = optWrapper<BooleanValue>(getDictBoolean, BOOLEAN);\nconst getDictOptColor = optWrapper<BooleanValue>(getDictColor, COLOR);\nconst getDictOptUrl = optWrapper<BooleanValue>(getDictUrl, URL);\n\nfunction getDictOptArray(ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue {\n    try {\n        return getDictArray(ctx, dict, ...path);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: ARRAY,\n            value: []\n        } as unknown as EvalValue;\n    }\n}\n\nfunction getDictOptDict(ctx: EvalContext, dict: DictValue, ...path: StringValue[]): EvalValue {\n    try {\n        return getDictDict(ctx, dict, ...path);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: DICT,\n            value: {}\n        } as unknown as EvalValue;\n    }\n}\n\nfunction containsKey(_ext: EvalContext, dict: DictValue, key: StringValue): BooleanValue {\n    return {\n        type: BOOLEAN,\n        value: key.value in dict.value ? 1 : 0\n    };\n}\n\nfunction isEmpty(_ext: EvalContext, dict: DictValue): BooleanValue {\n    return {\n        type: BOOLEAN,\n        value: Object.keys(dict.value).length ? 0 : 1\n    };\n}\n\nfunction len(_ext: EvalContext, dict: DictValue): IntegerValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(Object.keys(dict.value).length)\n    };\n}\n\nfunction getDictKeys(_ext: EvalContext, dict: DictValue): ArrayValue {\n    return {\n        type: ARRAY,\n        value: Object.keys(dict.value)\n    };\n}\n\nfunction getDictValues(_ext: EvalContext, dict: DictValue): ArrayValue {\n    return {\n        type: ARRAY,\n        value: Object.values(dict.value)\n    };\n}\n\nexport function registerDict(): void {\n    const STRING_VARARG = {\n        type: STRING,\n        isVararg: true\n    } as const;\n\n    registerFunc('getDictString', [DICT, STRING_VARARG], getDictString);\n    registerFunc('getStringFromDict', [DICT, STRING_VARARG], getDictString);\n\n    registerFunc('getDictNumber', [DICT, STRING_VARARG], getDictNumber);\n    registerFunc('getNumberFromDict', [DICT, STRING_VARARG], getDictNumber);\n\n    registerFunc('getDictInteger', [DICT, STRING_VARARG], getDictInteger);\n    registerFunc('getIntegerFromDict', [DICT, STRING_VARARG], getDictInteger);\n\n    registerFunc('getDictBoolean', [DICT, STRING_VARARG], getDictBoolean);\n    registerFunc('getBooleanFromDict', [DICT, STRING_VARARG], getDictBoolean);\n\n    registerFunc('getDictColor', [DICT, STRING_VARARG], getDictColor);\n    registerFunc('getColorFromDict', [DICT, STRING_VARARG], getDictColor);\n\n    registerFunc('getDictUrl', [DICT, STRING_VARARG], getDictUrl);\n    registerFunc('getUrlFromDict', [DICT, STRING_VARARG], getDictUrl);\n\n    registerFunc('getDictOptString', [STRING, DICT, STRING_VARARG], getDictOptString);\n    registerFunc('getOptStringFromDict', [STRING, DICT, STRING_VARARG], getDictOptString);\n\n    registerFunc('getDictOptNumber', [NUMBER, DICT, STRING_VARARG], getDictOptNumber);\n    registerFunc('getOptNumberFromDict', [NUMBER, DICT, STRING_VARARG], getDictOptNumber);\n\n    registerFunc('getDictOptInteger', [INTEGER, DICT, STRING_VARARG], getDictOptInteger);\n    registerFunc('getOptIntegerFromDict', [INTEGER, DICT, STRING_VARARG], getDictOptInteger);\n\n    registerFunc('getDictOptBoolean', [BOOLEAN, DICT, STRING_VARARG], getDictOptBoolean);\n    registerFunc('getOptBooleanFromDict', [BOOLEAN, DICT, STRING_VARARG], getDictOptBoolean);\n\n    registerFunc('getDictOptColor', [COLOR, DICT, STRING_VARARG], getDictOptColor);\n    registerFunc('getOptColorFromDict', [COLOR, DICT, STRING_VARARG], getDictOptColor);\n\n    registerFunc('getDictOptColor', [STRING, DICT, STRING_VARARG], getDictOptColor);\n    registerFunc('getOptColorFromDict', [STRING, DICT, STRING_VARARG], getDictOptColor);\n\n    registerFunc('getDictOptUrl', [STRING, DICT, STRING_VARARG], getDictOptUrl);\n    registerFunc('getOptUrlFromDict', [STRING, DICT, STRING_VARARG], getDictOptUrl);\n\n    registerFunc('getDictOptUrl', [URL, DICT, STRING_VARARG], getDictOptUrl);\n    registerFunc('getOptUrlFromDict', [URL, DICT, STRING_VARARG], getDictOptUrl);\n\n    registerFunc('getDictFromDict', [DICT, STRING_VARARG], getDictDict);\n\n    registerFunc('getArrayFromDict', [DICT, STRING_VARARG], getDictArray);\n\n    registerFunc('getOptArrayFromDict', [DICT, STRING_VARARG], getDictOptArray);\n\n    registerFunc('getOptDictFromDict', [DICT, STRING_VARARG], getDictOptDict);\n\n    registerFunc('len', [DICT], len);\n    registerFunc('getDictKeys', [DICT], getDictKeys);\n    registerFunc('getDictValues', [DICT], getDictValues);\n\n    registerMethod('getString', [DICT, STRING_VARARG], getDictString);\n    registerMethod('getBoolean', [DICT, STRING_VARARG], getDictBoolean);\n    registerMethod('getInteger', [DICT, STRING_VARARG], getDictInteger);\n    registerMethod('getNumber', [DICT, STRING_VARARG], getDictNumber);\n    registerMethod('getUrl', [DICT, STRING_VARARG], getDictUrl);\n    registerMethod('getColor', [DICT, STRING_VARARG], getDictColor);\n    registerMethod('getArray', [DICT, STRING_VARARG], getDictArray);\n    registerMethod('getDict', [DICT, STRING_VARARG], getDictDict);\n    registerMethod('containsKey', [DICT, STRING], containsKey);\n    registerMethod('isEmpty', [DICT], isEmpty);\n    registerMethod('getKeys', [DICT], getDictKeys);\n    registerMethod('getValues', [DICT], getDictValues);\n}\n","import { parseColor } from '../../utils/correctColor';\nimport { toBigInt } from '../bigint';\nimport { ARRAY, BOOLEAN, COLOR, DICT, FUNCTION, INTEGER, NUMBER, STRING, URL } from '../const';\nimport type { ArrayValue, BooleanValue, ColorValue, EvalContext, EvalTypes, EvalValue, FuncValue, IntegerValue, NumberValue, StringValue, UrlValue } from '../eval';\nimport { checkIntegerOverflow, checkUrl, convertJsValueToDivKit, logFunctionMatchError, safeCheckUrl, transformColorValue, typeToString } from '../utils';\nimport { findBestMatchedFuncList, registerFunc, registerMethod, type Func, type FuncMatch } from './funcs';\n\nfunction arrayGetter(jsType: string, runtimeType: string) {\n    return (ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue => {\n        if (index.value < 0 || index.value >= array.value.length) {\n            throw new Error(`Requested index (${index.value}) out of bounds array size (${array.value.length}).`);\n        }\n        let val = array.value[Number(index.value)];\n\n        let type: string = typeof val;\n        if (\n            jsType === 'array' && !Array.isArray(val) ||\n            jsType !== 'array' && type !== jsType ||\n            type === 'object' && val === null\n        ) {\n            if (type === 'object') {\n                if (Array.isArray(val)) {\n                    type = 'Array';\n                } else if (val === null) {\n                    type = 'Null';\n                } else {\n                    type = 'Dict';\n                }\n            }\n            throw new Error(`Incorrect value type: expected ${typeToString(runtimeType)}, got ${typeToString(type)}.`);\n        }\n        if (jsType === 'number' && runtimeType === 'integer') {\n            checkIntegerOverflow(ctx, val as number);\n            try {\n                val = toBigInt(val as number);\n            } catch (_err) {\n                throw new Error('Cannot convert value to integer.');\n            }\n        }\n        if (jsType === 'string' && runtimeType === 'color') {\n            val = transformColorValue(val as string);\n        }\n        if (jsType === 'string' && runtimeType === 'url') {\n            checkUrl(val);\n        }\n\n        return {\n            type: runtimeType,\n            value: val\n        } as EvalValue;\n    };\n}\n\nfunction optWrapper<ValueType extends EvalValue>(\n    func: (ctx: EvalContext, array: ArrayValue, index: IntegerValue) => EvalValue,\n    fallbackType: EvalTypes\n) {\n    return (ctx: EvalContext, array: ArrayValue, index: IntegerValue, fallback: ValueType) => {\n        try {\n            return func(ctx, array, index);\n        } catch (_err) {\n            // ignore error\n\n            let value = fallback.value;\n            if (fallbackType === 'color') {\n                value = transformColorValue(value as string);\n            } else if (fallbackType === 'url') {\n                checkUrl(value);\n            }\n            return {\n                type: fallbackType,\n                value\n            } as unknown as EvalValue;\n        }\n    };\n}\n\nconst getArrayString = arrayGetter('string', 'string');\nconst getArrayNumber = arrayGetter('number', 'number');\nconst getArrayInteger = arrayGetter('number', 'integer');\nconst getArrayBoolean = arrayGetter('boolean', 'boolean');\nconst getArrayColor = arrayGetter('string', 'color');\nconst getArrayUrl = arrayGetter('string', 'url');\nconst getArrayArray = arrayGetter('array', 'array');\nconst getArrayDict = arrayGetter('object', 'dict');\n\nconst getArrayOptString = optWrapper<StringValue>(getArrayString, 'string');\nconst getArrayOptNumber = optWrapper<NumberValue>(getArrayNumber, 'number');\nconst getArrayOptInteger = optWrapper<IntegerValue>(getArrayInteger, 'integer');\nconst getArrayOptBoolean = optWrapper<BooleanValue>(getArrayBoolean, 'boolean');\nconst getArrayOptColor = optWrapper<ColorValue>(getArrayColor, 'color');\nconst getArrayOptUrl = optWrapper<UrlValue>(getArrayUrl, 'url');\n\nfunction getArrayOptArray(ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue {\n    try {\n        return getArrayArray(ctx, array, index);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: ARRAY,\n            value: []\n        } as unknown as EvalValue;\n    }\n}\n\nfunction getArrayOptDict(ctx: EvalContext, array: ArrayValue, index: IntegerValue): EvalValue {\n    try {\n        return getArrayDict(ctx, array, index);\n    } catch (_err) {\n        // ignore error\n        return {\n            type: DICT,\n            value: {}\n        } as unknown as EvalValue;\n    }\n}\n\nfunction len(_ctx: EvalContext, array: ArrayValue): EvalValue {\n    return {\n        type: INTEGER,\n        value: toBigInt(array.value.length)\n    };\n}\n\nfunction isEmpty(_ctx: EvalContext, array: ArrayValue): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: array.value.length === 0 ? 1 : 0\n    };\n}\n\nfunction filter(ctx: EvalContext, array: ArrayValue, fn: FuncValue): EvalValue {\n    if (!array.value.length) {\n        return {\n            type: ARRAY,\n            value: []\n        };\n    }\n\n    return {\n        type: ARRAY,\n        value: array.value.filter(it => {\n            const argMatchers: EvalValue[][] = [];\n\n            if (typeof it === 'string') {\n                if (parseColor(it)) {\n                    argMatchers.push([{\n                        type: COLOR,\n                        value: it\n                    }]);\n                }\n                if (safeCheckUrl(it)) {\n                    argMatchers.push([{\n                        type: URL,\n                        value: it\n                    }]);\n                }\n                argMatchers.push([{\n                    type: STRING,\n                    value: it\n                }]);\n            } else if (typeof it === 'number') {\n                if (Math.round(it) === it) {\n                    checkIntegerOverflow(ctx, it);\n                    argMatchers.push([{\n                        type: INTEGER,\n                        value: toBigInt(it)\n                    }]);\n                }\n                argMatchers.push([{\n                    type: NUMBER,\n                    value: it\n                }]);\n            } else if (typeof it === 'bigint') {\n                checkIntegerOverflow(ctx, it);\n                argMatchers.push([{\n                    type: INTEGER,\n                    value: it\n                }]);\n            } else if (Array.isArray(it)) {\n                argMatchers.push([{\n                    type: ARRAY,\n                    value: it\n                }]);\n            } else if (typeof it === 'object') {\n                if (it === null) {\n                    throw new Error('Incorrect value type: Null');\n                }\n                argMatchers.push([{\n                    type: DICT,\n                    value: it\n                }]);\n            } else if (typeof it === 'boolean') {\n                argMatchers.push([{\n                    type: BOOLEAN,\n                    value: it ? 1 : 0\n                }]);\n            } else {\n                throw new Error(`Incorrect value type: ${typeToString(typeof it)}`);\n            }\n\n            let fnMatch: FuncMatch = {\n                type: 'missing'\n            };\n            for (const matchItem of argMatchers) {\n                fnMatch = findBestMatchedFuncList(fn.value, matchItem);\n                if ('func' in fnMatch) {\n                    break;\n                }\n            }\n\n            let selectedFn: Func;\n            if ('func' in fnMatch) {\n                selectedFn = fnMatch.func;\n            } else {\n                const selectedFn = fn.value[0];\n                logFunctionMatchError(selectedFn.name || 'Function', argMatchers[0], fnMatch, true);\n            }\n\n            const argType = selectedFn.args[0];\n            const value = convertJsValueToDivKit(\n                ctx,\n                it,\n                typeof argType === 'string' ? argType : argType.type\n            );\n            const res = selectedFn.cb(ctx, value);\n\n            if (res.type !== BOOLEAN) {\n                throw new Error('Function must return boolean value.');\n            }\n\n            return res.value;\n        })\n    };\n}\n\nexport function registerArray(): void {\n    registerFunc('getArrayString', [\n        ARRAY,\n        INTEGER\n    ], getArrayString);\n    registerFunc('getStringFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayString);\n\n    registerFunc('getArrayNumber', [\n        ARRAY,\n        INTEGER\n    ], getArrayNumber);\n    registerFunc('getNumberFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayNumber);\n\n    registerFunc('getArrayInteger', [\n        ARRAY,\n        INTEGER\n    ], getArrayInteger);\n    registerFunc('getIntegerFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayInteger);\n\n    registerFunc('getArrayBoolean', [\n        ARRAY,\n        INTEGER\n    ], getArrayBoolean);\n    registerFunc('getBooleanFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayBoolean);\n\n    registerFunc('getArrayColor', [\n        ARRAY,\n        INTEGER\n    ], getArrayColor);\n    registerFunc('getColorFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayColor);\n\n    registerFunc('getArrayUrl', [\n        ARRAY,\n        INTEGER\n    ], getArrayUrl);\n    registerFunc('getUrlFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayUrl);\n\n    registerFunc('getArrayFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayArray);\n\n    registerFunc('getDictFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayDict);\n\n    registerFunc('getArrayOptString', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptString);\n    registerFunc('getOptStringFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptString);\n\n    registerFunc('getArrayOptNumber', [\n        ARRAY,\n        INTEGER,\n        NUMBER\n    ], getArrayOptNumber);\n    registerFunc('getOptNumberFromArray', [\n        ARRAY,\n        INTEGER,\n        NUMBER\n    ], getArrayOptNumber);\n\n    registerFunc('getArrayOptInteger', [\n        ARRAY,\n        INTEGER,\n        INTEGER\n    ], getArrayOptInteger);\n    registerFunc('getOptIntegerFromArray', [\n        ARRAY,\n        INTEGER,\n        INTEGER\n    ], getArrayOptInteger);\n\n    registerFunc('getArrayOptBoolean', [\n        ARRAY,\n        INTEGER,\n        BOOLEAN\n    ], getArrayOptBoolean);\n    registerFunc('getOptBooleanFromArray', [\n        ARRAY,\n        INTEGER,\n        BOOLEAN\n    ], getArrayOptBoolean);\n\n    registerFunc('getArrayOptColor', [\n        ARRAY,\n        INTEGER,\n        COLOR\n    ], getArrayOptColor);\n    registerFunc('getOptColorFromArray', [\n        ARRAY,\n        INTEGER,\n        COLOR\n    ], getArrayOptColor);\n    registerFunc('getArrayOptColor', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptColor);\n    registerFunc('getOptColorFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptColor);\n\n    registerFunc('getArrayOptUrl', [\n        ARRAY,\n        INTEGER,\n        URL\n    ], getArrayOptUrl);\n    registerFunc('getOptUrlFromArray', [\n        ARRAY,\n        INTEGER,\n        URL\n    ], getArrayOptUrl);\n    registerFunc('getArrayOptUrl', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptUrl);\n    registerFunc('getOptUrlFromArray', [\n        ARRAY,\n        INTEGER,\n        STRING\n    ], getArrayOptUrl);\n\n    registerFunc('getOptArrayFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayOptArray);\n\n    registerFunc('getOptDictFromArray', [\n        ARRAY,\n        INTEGER\n    ], getArrayOptDict);\n\n    registerFunc('len', [\n        ARRAY\n    ], len);\n\n    registerMethod('getString', [ARRAY, INTEGER], getArrayString);\n    registerMethod('getInteger', [ARRAY, INTEGER], getArrayInteger);\n    registerMethod('getNumber', [ARRAY, INTEGER], getArrayNumber);\n    registerMethod('getBoolean', [ARRAY, INTEGER], getArrayBoolean);\n    registerMethod('getUrl', [ARRAY, INTEGER], getArrayUrl);\n    registerMethod('getColor', [ARRAY, INTEGER], getArrayColor);\n    registerMethod('getArray', [ARRAY, INTEGER], getArrayArray);\n    registerMethod('getDict', [ARRAY, INTEGER], getArrayDict);\n    registerMethod('isEmpty', [ARRAY], isEmpty);\n    registerMethod('filter', [ARRAY, FUNCTION], filter);\n}\n","import type { EvalContext, EvalValue, StringValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { ARRAY, BOOLEAN, COLOR, DICT, INTEGER, NUMBER, STRING, URL } from '../const';\nimport { checkUrl, convertJsValueToDivKit } from '../utils';\nimport type { StoreScope } from '../../../typings/store';\n\nexport function getStored(evalType: 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'array' | 'dict') {\n    return (ctx: EvalContext, name: StringValue, scope?: EvalValue, fallback?: EvalValue): EvalValue => {\n        const fallbackValue = evalType === DICT || evalType === ARRAY ? undefined : (fallback || scope);\n        const scopeValue = (evalType === DICT || evalType === ARRAY || fallback !== undefined) ? scope : undefined;\n\n        if (!ctx.store) {\n            if (!fallbackValue) {\n                throw new Error('Missing value.');\n            }\n            return {\n                type: evalType,\n                value: fallbackValue.value\n            } as EvalValue;\n        }\n\n        let expectedType: 'boolean' | 'number' | 'string';\n        if (evalType === 'boolean') {\n            expectedType = 'boolean';\n        } else if (evalType === 'number' || evalType === 'integer') {\n            expectedType = 'number';\n        } else {\n            expectedType = 'string';\n        }\n\n        let scopeStr: StoreScope | undefined;\n        if (scopeValue) {\n            if (scopeValue.value === 'global' || scopeValue.value === 'card') {\n                scopeStr = scopeValue.value;\n            } else {\n                throw new Error('Incorrect scope value');\n            }\n        }\n\n        let val;\n        if (ctx.store.get) {\n            val = ctx.store.get(name.value, evalType, scopeStr);\n        } else if (ctx.store.getValue) {\n            val = ctx.store.getValue(name.value, expectedType);\n        }\n\n        if (val === undefined) {\n            if (!fallbackValue) {\n                throw new Error('Missing value.');\n            }\n            if (evalType === 'url') {\n                checkUrl(fallbackValue.value);\n            }\n            return {\n                type: evalType,\n                value: fallbackValue.value\n            } as EvalValue;\n        } else if (evalType === 'url') {\n            checkUrl(val);\n        }\n\n        return convertJsValueToDivKit(ctx, val, evalType);\n    };\n}\n\nexport function registerStored(): void {\n    registerFunc('getStoredIntegerValue', [STRING, INTEGER], getStored(INTEGER));\n    registerFunc('getStoredIntegerValue', [STRING, STRING, INTEGER], getStored(INTEGER));\n    registerFunc('getStoredNumberValue', [STRING, NUMBER], getStored(NUMBER));\n    registerFunc('getStoredNumberValue', [STRING, STRING, NUMBER], getStored(NUMBER));\n    registerFunc('getStoredStringValue', [STRING, STRING], getStored(STRING));\n    registerFunc('getStoredStringValue', [STRING, STRING, STRING], getStored(STRING));\n    registerFunc('getStoredUrlValue', [STRING, URL], getStored(URL));\n    registerFunc('getStoredUrlValue', [STRING, STRING, URL], getStored(URL));\n    registerFunc('getStoredUrlValue', [STRING, STRING], getStored(URL));\n    registerFunc('getStoredUrlValue', [STRING, STRING, STRING], getStored(URL));\n    registerFunc('getStoredColorValue', [STRING, COLOR], getStored(COLOR));\n    registerFunc('getStoredColorValue', [STRING, STRING, COLOR], getStored(COLOR));\n    registerFunc('getStoredColorValue', [STRING, STRING], getStored(COLOR));\n    registerFunc('getStoredColorValue', [STRING, STRING, STRING], getStored(COLOR));\n    registerFunc('getStoredBooleanValue', [STRING, BOOLEAN], getStored(BOOLEAN));\n    registerFunc('getStoredBooleanValue', [STRING, STRING, BOOLEAN], getStored(BOOLEAN));\n    registerFunc('getStoredArrayValue', [STRING], getStored(ARRAY));\n    registerFunc('getStoredArrayValue', [STRING, STRING], getStored(ARRAY));\n    registerFunc('getStoredDictValue', [STRING], getStored(DICT));\n    registerFunc('getStoredDictValue', [STRING, STRING], getStored(DICT));\n}\n","import type { EvalContext, EvalValue, NumberValue } from '../eval';\nimport { registerFunc } from './funcs';\nimport { NUMBER } from '../const';\n\nfunction pi(): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.PI\n    };\n}\n\nfunction toRadians(_ctx: EvalContext, degrees: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: degrees.value / 180 * Math.PI\n    };\n}\n\nfunction toDegrees(_ctx: EvalContext, radians: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: radians.value / Math.PI * 180\n    };\n}\n\nfunction sin(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.sin(rad.value)\n    };\n}\n\nfunction cos(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.cos(rad.value)\n    };\n}\n\nfunction tan(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.tan(rad.value)\n    };\n}\n\nfunction cot(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    const tan = Math.tan(rad.value);\n\n    if (Math.abs(tan) < 1e-12) {\n        throw new Error('Cotangent is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: 1 / tan\n    };\n}\n\nfunction atan(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.atan(rad.value)\n    };\n}\n\nfunction atan2(_ctx: EvalContext, y: NumberValue, x: NumberValue): EvalValue {\n    return {\n        type: NUMBER,\n        value: Math.atan2(y.value, x.value)\n    };\n}\n\nfunction asin(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    if (rad.value > 1 || rad.value < -1) {\n        throw new Error('Arcsine is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.asin(rad.value)\n    };\n}\n\nfunction acos(_ctx: EvalContext, rad: NumberValue): EvalValue {\n    if (rad.value > 1 || rad.value < -1) {\n        throw new Error('Arccosine is undefined for the given value.');\n    }\n\n    return {\n        type: NUMBER,\n        value: Math.acos(rad.value)\n    };\n}\n\nexport function registerTrigonometry(): void {\n    registerFunc('pi', [], pi);\n    registerFunc('toRadians', [NUMBER], toRadians);\n    registerFunc('toDegrees', [NUMBER], toDegrees);\n    registerFunc('sin', [NUMBER], sin);\n    registerFunc('cos', [NUMBER], cos);\n    registerFunc('tan', [NUMBER], tan);\n    registerFunc('cot', [NUMBER], cot);\n    registerFunc('atan', [NUMBER], atan);\n    registerFunc('atan2', [NUMBER, NUMBER], atan2);\n    registerFunc('asin', [NUMBER], asin);\n    registerFunc('acos', [NUMBER], acos);\n}\n","import { registerStd } from './std';\nimport { registerDatetime } from './datetime';\nimport { registerStrings } from './strings';\nimport { registerMath } from './math';\nimport { registerColors } from './colors';\nimport { registerInterval } from './interval';\nimport { registerDict } from './dict';\nimport { registerArray } from './array';\nimport { registerStored } from './stored';\nimport { registerTrigonometry } from './trigonometry';\n\nexport function register(): void {\n    registerStd();\n    registerDatetime();\n    registerInterval();\n    registerStrings();\n    registerMath();\n    registerColors();\n    registerDict();\n    registerArray();\n    registerStored();\n    registerTrigonometry();\n}\n","/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { noop } from './utils.js';\n\nexport const is_client = typeof window !== 'undefined';\n\n/** @type {() => number} */\nexport let now = is_client ? () => window.performance.now() : () => Date.now();\n\nexport let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;\n\n// used internally for testing\n/** @returns {void} */\nexport function set_now(fn) {\n\tnow = fn;\n}\n\n/** @returns {void} */\nexport function set_raf(fn) {\n\traf = fn;\n}\n","import { raf } from './environment.js';\n\nconst tasks = new Set();\n\n/**\n * @param {number} now\n * @returns {void}\n */\nfunction run_tasks(now) {\n\ttasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\ttasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\tif (tasks.size !== 0) raf(run_tasks);\n}\n\n/**\n * For testing purposes only!\n * @returns {void}\n */\nexport function clear_loops() {\n\ttasks.clear();\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {import('./private.js').TaskCallback} callback\n * @returns {import('./private.js').Task}\n */\nexport function loop(callback) {\n\t/** @type {import('./private.js').TaskEntry} */\n\tlet task;\n\tif (tasks.size === 0) raf(run_tasks);\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\ttasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n","/** @type {typeof globalThis} */\nexport const globals =\n\ttypeof window !== 'undefined'\n\t\t? window\n\t\t: typeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: // @ts-ignore Node typings have this\n\t\t  global;\n","import { contenteditable_truthy_values, has_prop } from './utils.js';\n\nimport { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\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;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst my_children = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmy_children.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = my_children;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seq_len =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seq_len] + 1;\n\t\tconst new_len = seq_len + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[new_len] = i;\n\t\tlongest = Math.max(new_len, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst to_move = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\tto_move.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\tto_move.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\tto_move.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < to_move.length; i++) {\n\t\twhile (j < lis.length && to_move[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(to_move[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tconst lower = prop.toLowerCase(); // for backwards compatibility with existing behavior we do lowercase first\n\tif (lower in node) {\n\t\tnode[lower] = typeof node[lower] === 'boolean' && value === '' ? true : value;\n\t} else if (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} process_node\n * @param {() => R} create_node\n * @param {boolean} dont_update_last_index\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, process_node, create_node, dont_update_last_index = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst result_node = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn create_node();\n\t})();\n\tresult_node.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn result_node;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst data_str = '' + data;\n\t\t\tif (node.data.startsWith(data_str)) {\n\t\t\t\tif (node.data.length !== data_str.length) {\n\t\t\t\t\treturn node.splitText(data_str.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = data_str;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tif (claimed_nodes.length === 0) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].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\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364  target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\nconst escaped = {\n\t'\"': '&quot;',\n\t'&': '&amp;',\n\t'<': '&lt;'\n};\n\nconst regex_attribute_characters_to_escape = /[\"&<]/g;\n\n/**\n * Note that the attribute itself should be surrounded in double quotes\n * @param {any} attribute\n */\nfunction escape_attribute(attribute) {\n\treturn String(attribute).replace(regex_attribute_characters_to_escape, (match) => escaped[match]);\n}\n\n/**\n * @param {Record<string, string>} attributes\n */\nexport function stringify_spread(attributes) {\n\tlet str = ' ';\n\tfor (const key in attributes) {\n\t\tif (attributes[key] != null) {\n\t\t\tstr += `${key}=\"${escape_attribute(attributes[key])}\" `;\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import { append_empty_stylesheet, detach, get_root_for_style } from './dom.js';\nimport { raf } from './environment.js';\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\n/** @type {Map<Document | ShadowRoot, import('./private.d.ts').StyleInformation>} */\nconst managed_styles = new Map();\n\nlet active = 0;\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n/**\n * @param {string} str\n * @returns {number}\n */\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\n/**\n * @param {Document | ShadowRoot} doc\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {{ stylesheet: any; rules: {}; }}\n */\nfunction create_style_information(doc, node) {\n\tconst info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n\tmanaged_styles.set(doc, info);\n\treturn info;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {number} a\n * @param {number} b\n * @param {number} duration\n * @param {number} delay\n * @param {(t: number) => number} ease\n * @param {(t: number, u: number) => string} fn\n * @param {number} uid\n * @returns {string}\n */\nexport function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\tconst doc = get_root_for_style(node);\n\tconst { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n\tif (!rules[name]) {\n\t\trules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${\n\t\tanimation ? `${animation}, ` : ''\n\t}${name} ${duration}ms linear ${delay}ms 1 both`;\n\tactive += 1;\n\treturn name;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {string} [name]\n * @returns {void}\n */\nexport function delete_rule(node, name) {\n\tconst previous = (node.style.animation || '').split(', ');\n\tconst next = previous.filter(\n\t\tname\n\t\t\t? (anim) => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: (anim) => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t);\n\tconst deleted = previous.length - next.length;\n\tif (deleted) {\n\t\tnode.style.animation = next.join(', ');\n\t\tactive -= deleted;\n\t\tif (!active) clear_rules();\n\t}\n}\n\n/** @returns {void} */\nexport function clear_rules() {\n\traf(() => {\n\t\tif (active) return;\n\t\tmanaged_styles.forEach((info) => {\n\t\t\tconst { ownerNode } = info.stylesheet;\n\t\t\t// there is no ownerNode if it runs on jsdom.\n\t\t\tif (ownerNode) detach(ownerNode);\n\t\t});\n\t\tmanaged_styles.clear();\n\t});\n}\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: never; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\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\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\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();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import { identity as linear, is_function, noop, run_all } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\nimport { custom_event } from './dom.js';\nimport { add_render_callback } from './scheduler.js';\n\n/**\n * @type {Promise<void> | null}\n */\nlet promise;\n\n/**\n * @returns {Promise<void>}\n */\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\treturn promise;\n}\n\n/**\n * @param {Element} node\n * @param {INTRO | OUTRO | boolean} direction\n * @param {'start' | 'end'} kind\n * @returns {void}\n */\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nconst outroing = new Set();\n\n/**\n * @type {Outro}\n */\nlet outros;\n\n/**\n * @returns {void} */\nexport function group_outros() {\n\toutros = {\n\t\tr: 0,\n\t\tc: [],\n\t\tp: outros // parent group\n\t};\n}\n\n/**\n * @returns {void} */\nexport function check_outros() {\n\tif (!outros.r) {\n\t\trun_all(outros.c);\n\t}\n\toutros = outros.p;\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} [local]\n * @returns {void}\n */\nexport function transition_in(block, local) {\n\tif (block && block.i) {\n\t\toutroing.delete(block);\n\t\tblock.i(local);\n\t}\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} local\n * @param {0 | 1} [detach]\n * @param {() => void} [callback]\n * @returns {void}\n */\nexport function transition_out(block, local, detach, callback) {\n\tif (block && block.o) {\n\t\tif (outroing.has(block)) return;\n\t\toutroing.add(block);\n\t\toutros.c.push(() => {\n\t\t\toutroing.delete(block);\n\t\t\tif (callback) {\n\t\t\t\tif (detach) block.d(1);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t\tblock.o(local);\n\t} else if (callback) {\n\t\tcallback();\n\t}\n}\n\n/**\n * @type {import('../transition/public.js').TransitionConfig}\n */\nconst null_transition = { duration: 0 };\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ start(): void; invalidate(): void; end(): void; }}\n */\nexport function create_in_transition(node, fn, params) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'in' };\n\tlet config = fn(node, params, options);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\t/**\n\t * @returns {void} */\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick(0, 1);\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tif (task) task.abort();\n\t\trunning = true;\n\t\tadd_render_callback(() => dispatch(node, true, 'start'));\n\t\ttask = loop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(1, 0);\n\t\t\t\t\tdispatch(node, true, 'end');\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn (running = false);\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\tlet started = false;\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\t\t\tstarted = true;\n\t\t\tdelete_rule(node);\n\t\t\tif (is_function(config)) {\n\t\t\t\tconfig = config(options);\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ end(reset: any): void; }}\n */\nexport function create_out_transition(node, fn, params) {\n\t/** @type {TransitionOptions} */\n\tconst options = { direction: 'out' };\n\tlet config = fn(node, params, options);\n\tlet running = true;\n\tlet animation_name;\n\tconst group = outros;\n\tgroup.r += 1;\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tadd_render_callback(() => dispatch(node, false, 'start'));\n\n\t\tif ('inert' in node) {\n\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\tnode.inert = true;\n\t\t}\n\n\t\tloop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(0, 1);\n\t\t\t\t\tdispatch(node, false, 'end');\n\t\t\t\t\tif (!--group.r) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.c);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (is_function(config)) {\n\t\twait().then(() => {\n\t\t\t// @ts-ignore\n\t\t\tconfig = config(options);\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && 'inert' in node) {\n\t\t\t\tnode.inert = original_inert_value;\n\t\t\t}\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @param {boolean} intro\n * @returns {{ run(b: 0 | 1): void; end(): void; }}\n */\nexport function create_bidirectional_transition(node, fn, params, intro) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'both' };\n\tlet config = fn(node, params, options);\n\tlet t = intro ? 0 : 1;\n\n\t/**\n\t * @type {Program | null} */\n\tlet running_program = null;\n\n\t/**\n\t * @type {PendingProgram | null} */\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @param {PendingProgram} program\n\t * @param {number} duration\n\t * @returns {Program}\n\t */\n\tfunction init(program, duration) {\n\t\tconst d = /** @type {Program['d']} */ (program.b - t);\n\t\tduration *= Math.abs(d);\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\t/**\n\t * @param {INTRO | OUTRO} b\n\t * @returns {void}\n\t */\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\t/**\n\t\t * @type {PendingProgram} */\n\t\tconst program = {\n\t\t\tstart: now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\t// @ts-ignore todo: improve typings\n\t\t\tprogram.group = outros;\n\t\t\toutros.r += 1;\n\t\t}\n\n\t\tif ('inert' in node) {\n\t\t\tif (b) {\n\t\t\t\tif (original_inert_value !== undefined) {\n\t\t\t\t\t// aborted/reversed outro — restore previous inert value\n\t\t\t\t\tnode.inert = original_inert_value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\t\tnode.inert = true;\n\t\t\t}\n\t\t}\n\n\t\tif (running_program || pending_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\t\t\tif (b) tick(0, 1);\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\t\t\tloop((now) => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\trunning_program.b,\n\t\t\t\t\t\t\trunning_program.duration,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\teasing,\n\t\t\t\t\t\t\tconfig.css\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick((t = running_program.b), 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.r) run_all(running_program.group.c);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t} else if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trun(b) {\n\t\t\tif (is_function(config)) {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconst opts = { direction: b ? 'in' : 'out' };\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconfig = config(opts);\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\n/** @typedef {1} INTRO */\n/** @typedef {0} OUTRO */\n/** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */\n/** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */\n\n/**\n * @typedef {Object} Outro\n * @property {number} r\n * @property {Function[]} c\n * @property {Object} p\n */\n\n/**\n * @typedef {Object} PendingProgram\n * @property {number} start\n * @property {INTRO|OUTRO} b\n * @property {Outro} [group]\n */\n\n/**\n * @typedef {Object} Program\n * @property {number} a\n * @property {INTRO|OUTRO} b\n * @property {1|-1} d\n * @property {number} duration\n * @property {number} start\n * @property {number} end\n * @property {Outro} [group]\n */\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @returns {{}} */\nexport function get_spread_update(levels, updates) {\n\tconst update = {};\n\tconst to_null_out = {};\n\tconst accounted_for = { $$scope: 1 };\n\tlet i = levels.length;\n\twhile (i--) {\n\t\tconst o = levels[i];\n\t\tconst n = updates[i];\n\t\tif (n) {\n\t\t\tfor (const key in o) {\n\t\t\t\tif (!(key in n)) to_null_out[key] = 1;\n\t\t\t}\n\t\t\tfor (const key in n) {\n\t\t\t\tif (!accounted_for[key]) {\n\t\t\t\t\tupdate[key] = n[key];\n\t\t\t\t\taccounted_for[key] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlevels[i] = n;\n\t\t} else {\n\t\t\tfor (const key in o) {\n\t\t\t\taccounted_for[key] = 1;\n\t\t\t}\n\t\t}\n\t}\n\tfor (const key in to_null_out) {\n\t\tif (!(key in update)) update[key] = undefined;\n\t}\n\treturn update;\n}\n\nexport function get_spread_object(spread_props) {\n\treturn typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n","import {\n\tadd_render_callback,\n\tflush,\n\tflush_render_callbacks,\n\tschedule_update,\n\tdirty_components\n} from './scheduler.js';\nimport { current_component, set_current_component } from './lifecycle.js';\nimport { blank_object, is_empty, is_function, run, run_all, noop } from './utils.js';\nimport {\n\tchildren,\n\tdetach,\n\tstart_hydrating,\n\tend_hydrating,\n\tget_custom_elements_slots,\n\tinsert,\n\telement,\n\tattr\n} from './dom.js';\nimport { transition_in } from './transitions.js';\n\n/** @returns {void} */\nexport function bind(component, name, callback) {\n\tconst index = component.$$.props[name];\n\tif (index !== undefined) {\n\t\tcomponent.$$.bound[index] = callback;\n\t\tcallback(component.$$.ctx[index]);\n\t}\n}\n\n/** @returns {void} */\nexport function create_component(block) {\n\tblock && block.c();\n}\n\n/** @returns {void} */\nexport function claim_component(block, parent_nodes) {\n\tblock && block.l(parent_nodes);\n}\n\n/** @returns {void} */\nexport function mount_component(component, target, anchor) {\n\tconst { fragment, after_update } = component.$$;\n\tfragment && fragment.m(target, anchor);\n\t// onMount happens before the initial afterUpdate\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n\t\t// if the component was destroyed immediately\n\t\t// it will update the `$$.on_destroy` reference to `null`.\n\t\t// the destructured on_destroy may still reference to the old array\n\t\tif (component.$$.on_destroy) {\n\t\t\tcomponent.$$.on_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\tafter_update.forEach(add_render_callback);\n}\n\n/** @returns {void} */\nexport function destroy_component(component, detaching) {\n\tconst $$ = component.$$;\n\tif ($$.fragment !== null) {\n\t\tflush_render_callbacks($$.after_update);\n\t\trun_all($$.on_destroy);\n\t\t$$.fragment && $$.fragment.d(detaching);\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\t$$.on_destroy = $$.fragment = null;\n\t\t$$.ctx = [];\n\t}\n}\n\n/** @returns {void} */\nfunction make_dirty(component, i) {\n\tif (component.$$.dirty[0] === -1) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty.fill(0);\n\t}\n\tcomponent.$$.dirty[(i / 31) | 0] |= 1 << i % 31;\n}\n\n// TODO: Document the other params\n/**\n * @param {SvelteComponent} component\n * @param {import('./public.js').ComponentConstructorOptions} options\n *\n * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values.\n * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised.\n * This will be the `add_css` function from the compiled component.\n *\n * @returns {void}\n */\nexport function init(\n\tcomponent,\n\toptions,\n\tinstance,\n\tcreate_fragment,\n\tnot_equal,\n\tprops,\n\tappend_styles = null,\n\tdirty = [-1]\n) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\t/** @type {import('./private.js').T$$} */\n\tconst $$ = (component.$$ = {\n\t\tfragment: null,\n\t\tctx: [],\n\t\t// state\n\t\tprops,\n\t\tupdate: noop,\n\t\tnot_equal,\n\t\tbound: blank_object(),\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\ton_disconnect: [],\n\t\tbefore_update: [],\n\t\tafter_update: [],\n\t\tcontext: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty,\n\t\tskip_bound: false,\n\t\troot: options.target || parent_component.$$.root\n\t});\n\tappend_styles && append_styles($$.root);\n\tlet ready = false;\n\t$$.ctx = instance\n\t\t? instance(component, options.props || {}, (i, ret, ...rest) => {\n\t\t\t\tconst value = rest.length ? rest[0] : ret;\n\t\t\t\tif ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) {\n\t\t\t\t\tif (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);\n\t\t\t\t\tif (ready) make_dirty(component, i);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t  })\n\t\t: [];\n\t$$.update();\n\tready = true;\n\trun_all($$.before_update);\n\t// `false` as a special case of no DOM component\n\t$$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\tstart_hydrating();\n\t\t\t// TODO: what is the correct type here?\n\t\t\t// @ts-expect-error\n\t\t\tconst nodes = children(options.target);\n\t\t\t$$.fragment && $$.fragment.l(nodes);\n\t\t\tnodes.forEach(detach);\n\t\t} else {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.c();\n\t\t}\n\t\tif (options.intro) transition_in(component.$$.fragment);\n\t\tmount_component(component, options.target, options.anchor);\n\t\tend_hydrating();\n\t\tflush();\n\t}\n\tset_current_component(parent_component);\n}\n\nexport let SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, Function[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<Function, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlet node;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\tc: function create() {\n\t\t\t\t\t\t\t\tnode = element('slot');\n\t\t\t\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\t\t\t\tattr(node, 'name', name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t\t\t\t * @param {HTMLElement} [anchor]\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tm: function mount(target, anchor) {\n\t\t\t\t\t\t\t\tinsert(target, node, anchor);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\td: function destroy(detaching) {\n\t\t\t\t\t\t\t\tif (detaching) {\n\t\t\t\t\t\t\t\t\tdetach(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\t$$slots[name] = [create_slot(name)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = new this.$$ctor({\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$scope: {\n\t\t\t\t\t\t\tctx: []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tconst reflect_attributes = () => {\n\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t\tthis.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];\n\t\t\t\t\t\tif (this.$$p_d[key].reflect) {\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.$$r = false;\n\t\t\t\t};\n\t\t\t\tthis.$$c.$$.after_update.push(reflect_attributes);\n\t\t\t\treflect_attributes(); // once initially because after_update is added too late for first render\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tObject.keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {import('./public.js').ComponentType} Component  A Svelte component constructor\n * @param {Record<string, CustomElementPropDefinition>} props_definition  The props to observe\n * @param {string[]} slots  The slots to create\n * @param {string[]} accessors  Other accessors besides the ones for props the component has\n * @param {boolean} use_shadow_dom  Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\taccessors,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn Object.keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tObject.keys(props_definition).forEach((prop) => {\n\t\tObject.defineProperty(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tthis.$$c?.$set({ [prop]: value });\n\t\t\t}\n\t\t});\n\t});\n\taccessors.forEach((accessor) => {\n\t\tObject.defineProperty(Class.prototype, accessor, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[accessor];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ (Class);\n\treturn Class;\n}\n\n/**\n * Base class for Svelte components. Used when dev=false.\n *\n * @template {Record<string, any>} [Props=any]\n * @template {Record<string, any>} [Events=any]\n */\nexport class SvelteComponent {\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$ = undefined;\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$set = undefined;\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tdestroy_component(this, 1);\n\t\tthis.$destroy = noop;\n\t}\n\n\t/**\n\t * @template {Extract<keyof Events, string>} K\n\t * @param {K} type\n\t * @param {((e: Events[K]) => void) | null | undefined} callback\n\t * @returns {() => void}\n\t */\n\t$on(type, callback) {\n\t\tif (!is_function(callback)) {\n\t\t\treturn noop;\n\t\t}\n\t\tconst callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n\t\tcallbacks.push(callback);\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * @param {Partial<Props>} props\n\t * @returns {void}\n\t */\n\t$set(props) {\n\t\tif (this.$$set && !is_empty(props)) {\n\t\t\tthis.$$.skip_bound = true;\n\t\t\tthis.$$set(props);\n\t\t\tthis.$$.skip_bound = false;\n\t\t}\n\t}\n}\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.19';\nexport const PUBLIC_VERSION = '4';\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store  - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","import type { Writable, Subscriber, Unsubscriber } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { EvalValue } from './eval';\nimport { parseColor } from '../utils/correctColor';\nimport { bigIntZero, toBigInt } from './bigint';\nimport { checkUrl, transformColorValue } from './utils';\nimport { BOOLEAN } from './const';\n\nexport type VariableType = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict' | 'array';\nexport type VariableValue = string | number | bigint | boolean | null | undefined | object | unknown[];\n\nexport abstract class Variable<\n    ValueType extends ConvertedSetValue = any,\n    TypeName = VariableType,\n    ConvertedSetValue = ValueType\n> {\n    protected name: string;\n    protected value: ValueType;\n    protected store?: Writable<ValueType>;\n\n    constructor(name: string, value: ConvertedSetValue) {\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: ConvertedSetValue): 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<bigint, 'integer', bigint | number> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'bigint' && typeof value !== 'number') {\n            throw new Error('Incorrect variable value');\n        }\n\n        try {\n            return toBigInt(value);\n        } catch (_err) {\n            throw new Error('Incorrect variable value');\n        }\n    }\n\n    protected fromString(val: string) {\n        try {\n            return toBigInt(val);\n        } catch (_err) {\n            throw new Error('Incorrect variable value');\n        }\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            Number.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<boolean, '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 Boolean(value);\n    }\n\n    protected fromString(val: string) {\n        if (val === '1' || val === 'true') {\n            return true;\n        } else if (val === '0' || val === 'false') {\n            return false;\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        return transformColorValue(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        checkUrl(value);\n\n        return value;\n    }\n\n    protected fromString(val: string) {\n        checkUrl(val);\n\n        return val;\n    }\n\n    getType(): 'url' {\n        return 'url';\n    }\n}\n\nexport class DictVariable extends Variable<object, 'dict'> {\n    protected convertValue(value: unknown) {\n        if (typeof value !== 'object' || !value) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string): object {\n        try {\n            return JSON.parse(val);\n        } catch (_err) {\n            throw new Error('Incorrect dict value');\n        }\n    }\n\n    getType(): 'dict' {\n        return 'dict';\n    }\n}\n\nexport class ArrayVariable extends Variable<unknown[], 'array'> {\n    protected convertValue(value: unknown[]) {\n        if (!Array.isArray(value)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(val: string): unknown[] {\n        try {\n            return JSON.parse(val);\n        } catch (_err) {\n            throw new Error('Incorrect array value');\n        }\n    }\n\n    getType(): 'array' {\n        return 'array';\n    }\n}\n\nexport const TYPE_TO_CLASS: Record<VariableType, typeof Variable<VariableValue, VariableType>> = {\n    string: StringVariable,\n    number: NumberVariable,\n    integer: IntegerVariable,\n    boolean: BooleanVariable,\n    color: ColorVariable,\n    url: UrlVariable,\n    dict: DictVariable,\n    array: ArrayVariable\n};\n\nexport function createVariable(\n    name: string,\n    type: VariableType,\n    value: unknown\n): InstanceType<typeof TYPE_TO_CLASS[typeof type]> {\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\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop(): void {\n}\n\nfunction constSubscribe<ValueType>(this: Variable<ValueType>, cb: Subscriber<ValueType>): Unsubscriber {\n    cb(this.value);\n\n    return noop;\n}\n\nfunction constSetter(): void {\n    throw new Error('Cannot change the value of this type of variable');\n}\n\nclass ConstStringVariable extends StringVariable {}\nclass ConstNumberVariable extends NumberVariable {}\nclass ConstIntegerVariable extends IntegerVariable {}\nclass ConstBooleanVariable extends BooleanVariable {}\nclass ConstColorVariable extends ColorVariable {}\nclass ConstUrlVariable extends UrlVariable {}\nclass ConstDictVariable extends DictVariable {}\nclass ConstArrayVariable extends ArrayVariable {}\n\nclass ConstDatetimeVariable extends Variable<Date, 'datetime'> {\n    protected convertValue(value: unknown) {\n        if (!(value instanceof Date)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return value;\n    }\n\n    protected fromString(): never {\n        throw new Error('Datetime variable does not support setter from string');\n    }\n\n    getType(): 'datetime' {\n        return 'datetime';\n    }\n}\n\nexport const CONST_TYPE_TO_CLASS: {\n    string: typeof StringVariable;\n    number: typeof NumberVariable;\n    integer: typeof IntegerVariable;\n    boolean: typeof BooleanVariable;\n    color: typeof ColorVariable;\n    url: typeof UrlVariable;\n    dict: typeof DictVariable;\n    array: typeof ArrayVariable;\n    datetime: typeof ConstDatetimeVariable;\n} = {\n    string: ConstStringVariable,\n    number: ConstNumberVariable,\n    integer: ConstIntegerVariable,\n    boolean: ConstBooleanVariable,\n    color: ConstColorVariable,\n    url: ConstUrlVariable,\n    dict: ConstDictVariable,\n    array: ConstArrayVariable,\n    datetime: ConstDatetimeVariable\n} as any;\n\nfor (const type in CONST_TYPE_TO_CLASS) {\n    const Class = CONST_TYPE_TO_CLASS[type as keyof typeof CONST_TYPE_TO_CLASS];\n\n    Class.prototype.subscribe = constSubscribe;\n    Class.prototype.set = constSetter;\n    Class.prototype.setValue = constSetter;\n}\n\nexport function createConstVariable<T extends VariableType | 'datetime'>(\n    name: string,\n    type: T,\n    value: unknown\n): InstanceType<typeof CONST_TYPE_TO_CLASS[T]> {\n    if (!(type in CONST_TYPE_TO_CLASS)) {\n        throw new Error('Unsupported variable type');\n    }\n\n    return new (CONST_TYPE_TO_CLASS[type] as any)(name, value);\n}\n\nexport function defaultValueByType(type: keyof typeof TYPE_TO_CLASS): VariableValue {\n    if (type === 'integer') {\n        return bigIntZero;\n    }\n    if (type === 'boolean' || type === 'number') {\n        return 0;\n    }\n    if (type === 'dict') {\n        return {};\n    }\n    if (type === 'array') {\n        return [];\n    }\n\n    return '';\n}\n\nexport function variableToValue(variable: Variable): EvalValue {\n    const type = variable.getType();\n    let value = variable.getValue();\n\n    if (type === BOOLEAN) {\n        value = value ? 1 : 0;\n    }\n\n    return {\n        type,\n        value\n    };\n}\n\nexport function variableValueFromString(val: string, type: VariableType): VariableValue {\n    if (type === 'string') {\n        return val;\n    } else if (type === 'integer') {\n        try {\n            return toBigInt(val);\n        } catch (_err) {\n            throw new Error('Incorrect variable value');\n        }\n    } else if (type === 'number') {\n        const converted = Number(val);\n        if (\n            Number.isNaN(converted) ||\n            !isFinite(converted)\n        ) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return converted;\n    } else if (type === 'boolean') {\n        if (val === '1' || val === 'true') {\n            return true;\n        } else if (val === '0' || val === 'false') {\n            return false;\n        }\n\n        throw new Error('Incorrect variable value');\n    } else if (type === 'color') {\n        if (typeof val !== 'string' || !parseColor(val)) {\n            throw new Error('Incorrect variable value');\n        }\n\n        return transformColorValue(val);\n    } else if (type === 'url') {\n        if (typeof val !== 'string') {\n            throw new Error('Incorrect variable value');\n        }\n        checkUrl(val);\n\n        return val;\n    } else if (type === 'dict' || type === 'array') {\n        try {\n            return JSON.parse(val);\n        } catch (_err) {\n            throw new Error('Incorrect dict value');\n        }\n    }\n\n    // For purpose when new eval value types will be added\n    throw new Error(`Unexpected type ${type}`);\n}\n","/* eslint-disable max-depth */\n/* eslint-disable no-else-return */\n\nimport type {\n    BinaryExpression, BooleanLiteral, CallExpression, CompareOperator,\n    ConditionalExpression, EqualityOperator, FactorOperator, IntegerLiteral,\n    LogicalExpression,\n    MethodExpression,\n    Node, NumberLiteral, StringLiteral, SumOperator,\n    TemplateLiteral,\n    TryExpression,\n    UnaryExpression, Variable\n} from './ast';\nimport type { WrappedError } from '../utils/wrapError';\nimport { convertArgs, findBestMatchedFunc, type Func, funcByArgs, type FuncMatch, funcs, methodByArgs, methods } from './funcs/funcs';\nimport {\n    argsToStr,\n    checkIntegerOverflow,\n    evalError,\n    FuncError,\n    integerToNumber,\n    logFunctionMatchError,\n    roundInteger,\n    typeToString,\n    valToInternal,\n    valToPreview,\n    valToString\n} from './utils';\nimport { BOOLEAN, DATETIME, INTEGER, NUMBER, STRING } from './const';\nimport { register } from './funcs';\nimport { Variable as VariableInstance, variableToValue, type VariableType } from './variable';\nimport { toBigInt } from './bigint';\nimport type { Store } from '../../typings/store';\nimport type { CustomFunctions } from './funcs/customFuncs';\n\nexport type VariablesMap = Map<string, VariableInstance>;\n\nexport type EvalTypes = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'datetime' | 'dict' | 'array' | 'function';\n\nexport type EvalTypesWithoutDatetime = 'string' | 'number' | 'integer' | 'boolean' | 'color' | 'url' | 'dict' | 'array' | 'function';\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: bigint;\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 interface DictValue extends EvalValueBase {\n    type: 'dict';\n    value: object;\n}\n\nexport interface ArrayValue extends EvalValueBase {\n    type: 'array';\n    value: unknown[];\n}\n\nexport interface FuncValue extends EvalValueBase {\n    type: 'function';\n    value: Func[];\n}\n\nexport type EvalValue = StringValue | UrlValue | ColorValue | NumberValue | IntegerValue |\n    BooleanValue | DatetimeValue | DictValue | ArrayValue | FuncValue;\n\nexport interface EvalError {\n    type: 'error';\n    value: string;\n}\n\nexport type EvalResult = EvalValue | EvalError;\n\nexport interface EvalContext {\n    variables: VariablesMap;\n    customFunctions: CustomFunctions | undefined;\n    warnings: WrappedError[];\n    store?: Store;\n    weekStartDay: number;\n    storeUsedVars?: Set<VariableInstance<any, VariableType, any>>;\n}\n\nregister();\n\nfunction evalStringLiteral(_ctx: EvalContext, expr: StringLiteral): EvalValue {\n    return {\n        type: STRING,\n        value: expr.value\n    };\n}\n\nfunction evalNumberLiteral(_ctx: EvalContext, expr: NumberLiteral): EvalValue {\n    return {\n        type: NUMBER,\n        value: expr.value\n    };\n}\n\nfunction evalIntegerLiteral(ctx: EvalContext, expr: IntegerLiteral): EvalValue {\n    checkIntegerOverflow(ctx, expr.value);\n\n    return {\n        type: INTEGER,\n        value: expr.value\n    };\n}\n\nfunction evalBooleanLiteral(_ctx: EvalContext, expr: BooleanLiteral): EvalValue {\n    return {\n        type: BOOLEAN,\n        value: expr.value ? 1 : 0\n    };\n}\n\nfunction evalUnary(ctx: EvalContext, expr: UnaryExpression): EvalValue {\n    const val = valToInternal(evalAny(ctx, 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                const value = val.value * toBigInt(mul);\n\n                checkIntegerOverflow(ctx, value);\n\n                return {\n                    type: INTEGER,\n                    value\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(ctx: EvalContext, expr: ConditionalExpression): EvalValue {\n    const test = valToInternal(evalAny(ctx, expr.test));\n    if (test.type === BOOLEAN) {\n        if (test.value) {\n            return evalAny(ctx, expr.consequent);\n        } else {\n            return evalAny(ctx, expr.alternate);\n        }\n    } else {\n        evalError(\n            `${valToPreview(test)} ? ${valToPreview(evalAny(ctx, expr.consequent))} : ${valToPreview(evalAny(ctx, expr.alternate))}`,\n            'Ternary must be called with a Boolean value as a condition.'\n        );\n    }\n}\n\nfunction evalTry(ctx: EvalContext, expr: TryExpression): EvalValue {\n    try {\n        return evalAny(ctx, expr.test);\n    } catch (_err) {\n        return evalAny(ctx, expr.alternate);\n    }\n}\n\nfunction evalTemplateLiteral(ctx: EvalContext, expr: TemplateLiteral): EvalValue {\n    let result = '';\n\n    if (expr.quasis.length === 2 && expr.quasis[0].value === '' && expr.quasis[1].value === '') {\n        return evalAny(ctx, 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(ctx, expr.expressions[i]), true);\n    }\n    result += expr.quasis[expr.quasis.length - 1].value;\n\n    return {\n        type: STRING,\n        value: result\n    };\n}\n\nfunction evalLogicalExpression(ctx: EvalContext, expr: LogicalExpression): EvalValue {\n    const left = valToInternal(evalAny(ctx, 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(ctx, 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 (\n        left.type !== NUMBER && left.type !== INTEGER && left.type !== DATETIME ||\n        right.type !== NUMBER && right.type !== INTEGER && right.type !== DATETIME\n    ) {\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>(ctx: EvalContext, 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: number | bigint = operator === '+' ?\n        (left.value as bigint) + (right.value as bigint) :\n        (left.value as bigint) - (right.value as bigint);\n\n    // integer\n    if (left.type === INTEGER) {\n        try {\n            res = roundInteger(ctx, res);\n            checkIntegerOverflow(ctx, res);\n        } catch (err: any) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                err.message\n            );\n        }\n    }\n\n    return {\n        type: left.type,\n        value: res as any\n    };\n}\n\nfunction evalBinaryFactor<T extends EvalValue>(\n    ctx: EvalContext,\n    operator: FactorOperator,\n    left: T,\n    right: T\n): 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 | bigint;\n    if (operator === '*') {\n        // bigint | number actually\n        res = (left.value as bigint) * (right.value as bigint);\n    } else if (operator === '/' || operator === '%') {\n        if (Number(right.value) === 0) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                'Division by zero is not supported.'\n            );\n        }\n        if (operator === '/') {\n            // bigint | number actually\n            res = (left.value as bigint) / (right.value as bigint);\n        } else {\n            // bigint | number actually\n            res = (left.value as bigint) % (right.value as bigint);\n        }\n    } else {\n        throw new Error(`Unsupported operation ${operator}`);\n    }\n\n    if (left.type === INTEGER) {\n        try {\n            res = roundInteger(ctx, res);\n            checkIntegerOverflow(ctx, res);\n        } catch (err: any) {\n            evalError(\n                `${valToPreview(left)} ${operator} ${valToPreview(right)}`,\n                err.message\n            );\n        }\n    }\n\n    return {\n        type: left.type,\n        value: res as any\n    };\n}\n\nfunction evalBinaryExpression(ctx: EvalContext, expr: BinaryExpression): EvalValue {\n    const operator = expr.operator;\n    let left = evalAny(ctx, expr.left);\n    let right = evalAny(ctx, expr.right);\n\n    if (\n        left.type === 'number' && right.type === 'integer' ||\n        left.type === 'integer' && right.type === 'number'\n    ) {\n        if (left.type === 'integer') {\n            left = integerToNumber(left);\n        } else if (right.type === 'integer') {\n            right = integerToNumber(right);\n        }\n    }\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(ctx, operator, left, right);\n    } else if (operator === '/' || operator === '*' || operator === '%') {\n        return evalBinaryFactor(ctx, operator, left, right);\n    }\n\n    throw new Error(`Unsupported operation ${operator}`);\n}\n\nfunction evalCallExpression(ctx: EvalContext, expr: CallExpression): EvalValue {\n    const funcName = expr.callee.name;\n\n    let func: Func | undefined;\n\n    let args = expr.arguments.map(arg => evalAny(ctx, arg));\n    const funcKey = funcName + ':' + args.map(arg => arg.type).join('#');\n    let findRes: FuncMatch | undefined;\n\n    if (ctx.customFunctions) {\n        findRes = findBestMatchedFunc(ctx.customFunctions, funcName, args);\n    }\n\n    if (!findRes || !('func' in findRes)) {\n        if (funcByArgs.has(funcKey)) {\n            findRes = {\n                func: funcByArgs.get(funcKey) as Func,\n                conversions: 0\n            };\n        } else {\n            const builtInFindRes = findBestMatchedFunc(funcs, funcName, args);\n\n            // Assign errors only there is no match error in user defined funcs\n            if ('func' in builtInFindRes || !findRes || findRes.type === 'missing') {\n                findRes = builtInFindRes;\n            }\n        }\n    }\n\n    if (findRes) {\n        if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n            logFunctionMatchError(funcName, args, findRes);\n        }\n        func = findRes.func;\n\n        if (findRes.conversions) {\n            args = convertArgs(func, args);\n        }\n    }\n\n    if (!func) {\n        throw new Error('Function not found');\n    }\n\n    try {\n        return func.cb(ctx, ...args);\n    } catch (err: any) {\n        if (err && err instanceof FuncError) {\n            throw err;\n        }\n\n        const prefix = `${funcName}(${argsToStr(args)})`;\n        evalError(prefix, err.message);\n    }\n}\n\nfunction evalMethodExpression(ctx: EvalContext, expr: MethodExpression): EvalValue {\n    const methodName = expr.method.name;\n\n    let func: Func | undefined;\n\n    let args = [expr.object, ...expr.arguments].map(arg => evalAny(ctx, arg));\n    const methodKey = methodName + ':' + args.map(arg => arg.type).join('#');\n\n    if (!methodByArgs.has(methodKey)) {\n        const findRes = findBestMatchedFunc(methods, methodName, args);\n        if ('expected' in findRes || 'type' in findRes && findRes.type === 'missing') {\n            const argsType = args.slice(1).map(arg => typeToString(arg.type)).join(', ');\n            const prefix = `${methodName}(${argsToStr(args.slice(1))})`;\n\n            if (findRes.type === 'few' && args.length === 1) {\n                evalError(prefix, 'Method requires non empty argument list.');\n            } else if (findRes.type === 'many') {\n                evalError(prefix, `Method has no matching overload for given argument types: ${argsType}.`);\n            } else if (findRes.type === 'few' || findRes.type === 'mismatch') {\n                evalError(prefix, `Method has no matching overload for given argument types: ${argsType}.`);\n            } else {\n                evalError(prefix, `Unknown method name: ${methodName}.`);\n            }\n        }\n        func = findRes.func;\n\n        if (findRes.conversions) {\n            args = convertArgs(func, args);\n        }\n    } else {\n        func = methodByArgs.get(methodKey);\n    }\n\n    if (!func) {\n        throw new Error('Method not found');\n    }\n\n    try {\n        return func.cb(ctx, ...args);\n    } catch (err: any) {\n        if (err && err instanceof FuncError) {\n            throw err;\n        }\n\n        const prefix = `${methodName}(${argsToStr(args.slice(1))})`;\n        evalError(prefix, err.message);\n    }\n}\n\nfunction evalVariable(ctx: EvalContext, expr: Variable): EvalValue {\n    const varName = expr.id.name;\n    const customFuncs = ctx.customFunctions?.get(varName);\n    if (customFuncs) {\n        return {\n            type: 'function',\n            value: customFuncs\n        };\n    }\n\n    const variable = ctx.variables.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    TryExpression: evalTry,\n    TemplateLiteral: evalTemplateLiteral,\n    LogicalExpression: evalLogicalExpression,\n    BinaryExpression: evalBinaryExpression,\n    CallExpression: evalCallExpression,\n    MethodExpression: evalMethodExpression,\n    Variable: evalVariable\n};\n\nexport function evalAny(ctx: EvalContext, expr: Node): EvalValue {\n    if (expr.type in EVAL_MAP) {\n        return EVAL_MAP[expr.type](ctx, expr as any);\n    }\n    throw new Error('Unsupported expression');\n}\n\nexport function evalExpression(\n    vars: VariablesMap,\n    customFunctions: CustomFunctions | undefined,\n    store: Store | undefined,\n    expr: Node,\n    opts?: {\n        weekStartDay?: number;\n    }\n): {\n    result: EvalResult;\n    warnings: WrappedError[];\n    usedVars?: Set<VariableInstance<any, VariableType, any>>;\n} {\n    try {\n        const ctx: EvalContext = {\n            variables: vars,\n            customFunctions,\n            warnings: [],\n            store,\n            weekStartDay: opts?.weekStartDay || 0\n        };\n\n        const result = evalAny(ctx, expr);\n\n        return {\n            result,\n            warnings: ctx.warnings,\n            usedVars: ctx.storeUsedVars\n        };\n    } catch (err: any) {\n        return {\n            result: {\n                type: 'error',\n                value: err.message\n            },\n            warnings: []\n        };\n    }\n}\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","import type { Readable } from 'svelte/store';\nimport type { Action, Direction, DisappearAction, DivBase, DivExtension, DivExtensionContext, TemplateContext, TypefaceProvider, VariableTrigger, VideoPlayerProvider, VisibilityAction } from '../../typings/common';\nimport type { DivBaseData } from '../types/base';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable } from '../expressions/variable';\nimport type { TintMode } from '../types/image';\nimport type { Customization } from '../../typings/common';\nimport type { CustomComponentDescription } from '../../typings/custom';\nimport type { ComponentContext } from '../types/componentContext';\nimport type { VariableType } from '../../typings/variables';\n\nexport const ROOT_CTX = Symbol('root');\n\nexport type Running = 'stateChange';\n\nexport interface ParentMethods {\n    replaceWith: (id: string, items?: DivBase[]) => void;\n    isSingleMode: boolean;\n}\n\nexport type ExecAnyActionsFunc = (actions: MaybeMissing<Action[]> | undefined, opts?: {\n    componentContext?: ComponentContext;\n    processUrls?: boolean;\n}) => Promise<void>;\n\nexport type NodeGetter = {\n    context: () => ComponentContext;\n    node: () => HTMLElement | null;\n};\n\nexport interface RootCtxValue {\n    logStat(type: string, action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void;\n    hasTemplate(templateName: string): boolean;\n    genId(key: string): string;\n    genClass(key: string): string;\n    processVariableTriggers(\n        componentContext: ComponentContext | undefined,\n        variableTriggers: MaybeMissing<VariableTrigger>[] | undefined\n    ): (() => void) | undefined;\n    isRunning(type: Running): boolean;\n    setRunning(type: Running, val: boolean): void;\n    registerInstance<T>(id: string, block: T, duplicateErrorLevel?: 'error' | 'warn'): void;\n    unregisterInstance(id: string): void;\n    registerParentOf(id: string, methods: ParentMethods): void;\n    unregisterParentOf(id: string): void;\n    onTooltipClose(internalId: number): void;\n    tooltipRoot: HTMLElement | undefined;\n    addSvgFilter(color: string, mode: TintMode): string;\n    removeSvgFilter(color: string | undefined, mode: TintMode): void;\n    registerId(id: string, getter: NodeGetter): () => void;\n    getComponentId(id: string): string;\n    preparePrototypeVariables(name: string, data: Record<string, unknown>, index: number): Map<string, Variable>;\n    getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined;\n    getBuiltinProtocols(): Set<string>;\n    getExtension(id: string, params: object | undefined): DivExtension | undefined;\n    getExtensionContext(componentContext: ComponentContext): DivExtensionContext;\n    registerTimeout(timeout: number): void;\n    isPointerFocus: Readable<boolean>;\n    typefaceProvider: TypefaceProvider;\n    isDesktop: Readable<boolean>;\n    direction: Readable<Direction>;\n    customComponents: Map<string, CustomComponentDescription> | undefined;\n    pagerChildrenClipEnabled: boolean;\n    pagerMouseDragEnabled: boolean;\n    videoPlayerProvider?: VideoPlayerProvider | undefined;\n    awaitGlobalVariable(variableName: string, variableType: VariableType, value: unknown): Variable;\n    findComponentById(id: string): ComponentContext | undefined;\n\n    // Devtool\n    componentDevtool?({\n        type,\n        node,\n        json,\n        origJson,\n        templateContext,\n        componentContext,\n        devapi\n    }: {\n        type: 'mount' | 'update' | 'destroy';\n        node: HTMLElement | null;\n        json: MaybeMissing<DivBaseData>;\n        origJson: MaybeMissing<DivBaseData> | undefined;\n        templateContext: TemplateContext;\n        componentContext: ComponentContext;\n        devapi?: object;\n    }): void;\n    devtoolCreateHierarchy?: 'lazy' | 'eager';\n}\n","/**\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 (Number.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","/**\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, '&amp;');\n    }\n    if (str2.indexOf('<') > -1) {\n        str2 = str2.replace(/</g, '&lt;');\n    }\n    if (str2.indexOf('>') > -1) {\n        str2 = str2.replace(/>/g, '&gt;');\n    }\n    if (str2.indexOf('\"') > -1) {\n        str2 = str2.replace(/\"/g, '&quot;');\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    GradientColorPoint\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>[], direction: 'ltr' | 'rtl'): {\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                    direction\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 colorMapToList(colorMap: MaybeMissing<GradientColorPoint[]>): string | undefined {\n    if (!colorMap.every(it => it.color && typeof it.position === 'number' && it.position >= 0 && it.position <= 1)) {\n        return;\n    }\n\n    const colors = colorMap as {\n        color: string;\n        position: number;\n    }[];\n\n    const sortedColors = colors.sort((a, b) => {\n        if (Math.abs(a.position - b.position) < 1e-6) {\n            return 0;\n        }\n        return a.position - b.position;\n    });\n\n    return sortedColors\n        .map(color => `${correctColor(color.color)} ${(color.position * 100).toFixed(2)}%`)\n        .join(',');\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) && !Array.isArray(opts.bg?.color_map)) {\n        return;\n    }\n\n    const colors = opts.bg.colors?.filter(Truthy);\n    if (!colors?.length && !opts.bg?.color_map) {\n        return;\n    }\n\n    let image: string;\n    if (opts.bg.color_map) {\n        const list = colorMapToList(opts.bg.color_map);\n        if (!list) {\n            return;\n        }\n\n        image = 'linear-gradient(' +\n            (90 - Number(opts.bg.angle || 0) + 'deg') +\n            ',' +\n            list +\n            ')';\n    } else {\n        if (!colors) {\n            return;\n        }\n\n        image = 'linear-gradient(' +\n            (90 - Number(opts.bg.angle || 0) + 'deg') +\n            ',' +\n            colors\n                .map(color => correctColor(color))\n                .join(',') +\n            ')';\n    }\n\n    return {\n        size: undefined,\n        pos: undefined,\n        image\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) && !Array.isArray(opts.bg?.color_map)) {\n        return;\n    }\n\n    const colors = opts.bg.colors?.filter(Truthy);\n    if (!colors?.length && !opts.bg?.color_map) {\n        return;\n    }\n\n    let list;\n    if (opts.bg.color_map) {\n        list = colorMapToList(opts.bg.color_map);\n    } else if (colors) {\n        list = colors\n            .map(color => correctColor(color))\n            .join(',');\n    }\n    if (!list) {\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            list +\n            ')'\n    };\n}\n\nfunction image(opts: {\n    bg: MaybeMissing<ImageBackground>;\n    direction: 'ltr' | 'rtl'\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, opts.direction),\n        image: 'url(\"' + htmlFilter(image) + '\")'\n    };\n}\n\nexport function imageSize(scale?: ImageScale): string {\n    if (scale === 'fit') {\n        return 'contain';\n    } else if (scale === 'stretch') {\n        return 'fill';\n    } else if (scale === 'no_scale') {\n        return 'none';\n    }\n\n    // 'fill' and default\n    return 'cover';\n}\n\nexport function objectFitToBackgroundSize(objectFit: string): string {\n    if (objectFit === 'none') {\n        return 'auto';\n    } else if (objectFit === 'fill') {\n        return '100% 100%';\n    }\n    return objectFit;\n}\n\nexport function imagePos(obj: {\n    content_alignment_horizontal?: AlignmentHorizontal;\n    content_alignment_vertical?: AlignmentVertical;\n}, direction: 'ltr' | 'rtl'): string {\n    let hpos: string;\n    let vpos: string;\n\n    if (\n        obj.content_alignment_horizontal === 'left' ||\n        direction === 'ltr' && obj.content_alignment_horizontal === 'start' ||\n        direction === 'rtl' && obj.content_alignment_horizontal === 'end'\n    ) {\n        hpos = '0%';\n    } else if (\n        obj.content_alignment_horizontal === 'right' ||\n        direction === 'ltr' && obj.content_alignment_horizontal === 'end' ||\n        direction === 'rtl' && obj.content_alignment_horizontal === 'start'\n    ) {\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 correctNonNegativeNumber(val: number | undefined, defaultVal: number): number {\n    const num = Number(val);\n    if (Number.isNaN(num) || num < 0) {\n        return defaultVal;\n    }\n    return num;\n}\n","import { derived, type Readable } from 'svelte/store';\nimport type { BooleanInt, DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { RootCtxValue } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { ComponentContext } from '../types/componentContext';\nimport { correctNonNegativeNumber } from '../utils/correctNonNegativeNumber';\n\ninterface CalcedAction {\n    index: number | undefined;\n    visibility_percentage: number | undefined;\n    visibility_duration: number | undefined;\n    log_limit: number | undefined;\n    is_enabled: BooleanInt | undefined;\n}\n\ninterface IndexedCalcedAction extends CalcedAction {\n    index: number;\n}\n\ninterface VisibilityStatus {\n    type: 'visibility' | 'disappear';\n    index: number;\n    action: MaybeMissing<VisibilityAction | DisappearAction>;\n    visible: boolean;\n    count: number;\n    finished: boolean;\n    timer?: ReturnType<typeof setTimeout>;\n}\n\nfunction checkPercentage(isVisibility: boolean, val: number | undefined, defaultVal: number): number {\n    if (typeof val === 'number') {\n        if (\n            isVisibility && val > 0 && val <= 100 ||\n            !isVisibility && val >= 0 && val < 100\n        ) {\n            return val;\n        }\n    }\n    return defaultVal;\n}\n\nfunction filterActions(it: CalcedAction): it is IndexedCalcedAction {\n    return it.is_enabled !== 0 && it.is_enabled !== false && it.index !== undefined;\n}\n\nexport function visibilityAction(node: HTMLElement, {\n    visibilityActions,\n    disappearActions,\n    rootCtx,\n    componentContext\n}: {\n    visibilityActions?: MaybeMissing<VisibilityAction>[];\n    disappearActions?: MaybeMissing<DisappearAction>[];\n    rootCtx: RootCtxValue;\n    componentContext: ComponentContext;\n}) {\n    const visibilityStatus: VisibilityStatus[] = [];\n\n    if (visibilityActions) {\n        visibilityActions.forEach(it => {\n            visibilityStatus.push({\n                type: 'visibility',\n                index: visibilityStatus.length,\n                action: it,\n                visible: false,\n                count: 0,\n                finished: false\n            });\n        });\n    }\n\n    if (disappearActions) {\n        disappearActions.forEach(it => {\n            visibilityStatus.push({\n                type: 'disappear',\n                index: visibilityStatus.length,\n                action: it,\n                // false, so disappear only works after the element becomes visible\n                visible: false,\n                count: 0,\n                finished: false\n            });\n        });\n    }\n\n    const calcedList: Readable<CalcedAction>[] = visibilityStatus.map((it, index) => {\n        const isVisibility = it.type === 'visibility';\n\n        return componentContext.getDerivedFromVars({\n            index,\n            visibility_percentage: it.action.visibility_percentage,\n            visibility_duration: isVisibility ?\n                (it.action as VisibilityAction).visibility_duration :\n                (it.action as DisappearAction).disappear_duration,\n            log_limit: it.action.log_limit,\n            is_enabled: it.action.is_enabled,\n        }, undefined, true) as Readable<CalcedAction>;\n    });\n\n    let observer: IntersectionObserver | undefined;\n    const cleanup = () => {\n        if (observer) {\n            observer.disconnect();\n        }\n\n        visibilityStatus.forEach(status => {\n            if (status.timer) {\n                clearTimeout(status.timer);\n            }\n        });\n    };\n\n    const totalStore = derived(calcedList, values => values);\n    let filtered: IndexedCalcedAction[];\n\n    const callAction = (status: VisibilityStatus) => {\n        const isVisibility = status.type === 'visibility';\n\n        componentContext.execAnyActions([status.action], {\n            logType: isVisibility ? 'visible' : 'disappear',\n            node,\n            processUrls: false\n        });\n    };\n\n    const unsubscribe = totalStore.subscribe(values => {\n        filtered = values.filter(filterActions);\n\n        const map: Record<number, IndexedCalcedAction> = {};\n        filtered.forEach(it => {\n            map[it.index] = it;\n        });\n\n        cleanup();\n\n        const thresholds = [...new Set(filtered.map(it => {\n            const isVisibility = visibilityStatus[it.index].type === 'visibility';\n\n            return checkPercentage(\n                isVisibility,\n                it.visibility_percentage,\n                isVisibility ? 50 : 0\n            ) / 100;\n        }))];\n\n        if (!thresholds.length) {\n            return;\n        }\n\n        const observerCallback = (entries: IntersectionObserverEntry[]): void => {\n            entries.forEach(entry => {\n                filtered.forEach(calcedParams => {\n                    const status = visibilityStatus[calcedParams.index];\n                    const isVisibility = status.type === 'visibility';\n                    const percentage = checkPercentage(\n                        isVisibility,\n                        calcedParams.visibility_percentage,\n                        isVisibility ? 50 : 0\n                    );\n\n                    let nowVisible;\n                    if (percentage === 0) {\n                        nowVisible = entry.intersectionRatio >= 1e-12;\n                    } else {\n                        nowVisible = entry.intersectionRatio >= (percentage / 100);\n                    }\n\n                    const shouldProc = isVisibility ?\n                        !status.visible && nowVisible :\n                        status.visible && !nowVisible;\n                    const shouldClear = isVisibility ?\n                        !nowVisible :\n                        nowVisible;\n\n                    if (shouldProc) {\n                        if (!status.finished) {\n                            status.timer = setTimeout(() => {\n                                ++status.count;\n\n                                const limit = calcedParams.log_limit === 0 ? Infinity : (calcedParams.log_limit || 1);\n                                if (status.count >= limit) {\n                                    status.finished = true;\n                                }\n\n                                callAction(status);\n                            }, correctNonNegativeNumber(calcedParams.visibility_duration, 800));\n                        }\n                    } else if (shouldClear) {\n                        if (status.timer) {\n                            clearTimeout(status.timer);\n                        }\n                    }\n                    status.visible = nowVisible;\n                });\n            });\n        };\n\n        observer = new IntersectionObserver(observerCallback, {\n            threshold: thresholds\n        });\n\n        observer.observe(node);\n    });\n\n    return {\n        destroy() {\n            filtered?.forEach(calcedAction => {\n                const status = visibilityStatus[calcedAction.index];\n\n                if (!status || status.type !== 'disappear' || !status.visible || status.finished) {\n                    return;\n                }\n\n                rootCtx.registerTimeout(window.setTimeout(() => {\n                    callAction(status);\n                }, calcedAction.visibility_duration));\n            });\n\n            cleanup();\n\n            unsubscribe();\n        }\n    };\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 { ComponentContext } from '../types/componentContext';\n\nexport interface DevtoolResult {\n    update(componentContext: ComponentContext): void;\n    destroy(): void;\n}\n\nfunction devtoolReal(\n    node: HTMLElement | null,\n    rootCtx: RootCtxValue,\n    componentContext: ComponentContext,\n    devapi?: object\n): DevtoolResult {\n    rootCtx.componentDevtool?.({\n        type: 'mount',\n        node,\n        json: componentContext.json,\n        origJson: componentContext.origJson,\n        templateContext: componentContext.templateContext,\n        componentContext,\n        devapi\n    });\n\n    return {\n        update(componentContext) {\n            rootCtx.componentDevtool?.({\n                type: 'update',\n                node,\n                json: componentContext.json,\n                origJson: componentContext.origJson,\n                templateContext: componentContext.templateContext,\n                componentContext\n            });\n        },\n        destroy() {\n            rootCtx.componentDevtool?.({\n                type: 'destroy',\n                node,\n                json: componentContext.json,\n                origJson: componentContext.origJson,\n                templateContext: componentContext.templateContext,\n                componentContext\n            });\n        }\n    };\n}\n\nexport const devtool = process.env.DEVTOOL ? devtoolReal : undefined;\n","import type { MaybeMissing } from '../expressions/json';\nimport type { AppearanceTransition, DivBaseData } from '../types/base';\nimport type { TransitionChange } from '../types/base';\nimport type { ComponentContext } from '../types/componentContext';\n\nexport const STATE_CTX = Symbol('state');\n\nexport interface StateInterface {\n    getChild(id: string): StateInterface | undefined;\n    setState(stateId: string): Promise<void>;\n}\n\nexport interface StateCtxValue {\n    registerChildWithTransitionIn(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement\n    ): Promise<void>;\n\n    registerChildWithTransitionOut(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement\n    ): Promise<void>;\n\n    registerChildWithTransitionChange(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<TransitionChange> | undefined,\n        node: HTMLElement\n    ): Promise<void>;\n\n    hasTransitionChange(id?: string): boolean;\n\n    runVisibilityTransition(\n        json: DivBaseData,\n        componentContext: ComponentContext,\n        transitions: MaybeMissing<AppearanceTransition>,\n        node: HTMLElement,\n        direction: 'in' | 'out',\n        bbox?: DOMRect | undefined\n    ): Promise<void>;\n\n    registerChild(id: string): void;\n    unregisterChild(id: string): void;\n}\n","import type { Direction } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport { pxToEm } from './pxToEm';\n\nexport function edgeInsertsToCss(\n    edgeInsets: MaybeMissing<EdgeInsets>,\n    direction: Direction\n): string {\n    const top = edgeInsets.top || 0;\n    const right = ((direction === 'ltr' ? edgeInsets.end : edgeInsets.start) ?? edgeInsets.right) || 0;\n    const bottom = edgeInsets.bottom || 0;\n    const left = ((direction === 'ltr' ? edgeInsets.start : edgeInsets.end) ?? edgeInsets.left) || 0;\n\n    if (top === 0 && right === 0 && bottom === 0 && left === 0) {\n        return '';\n    }\n\n    return pxToEm(top) +\n        ' ' +\n        pxToEm(right) +\n        ' ' +\n        pxToEm(bottom) +\n        ' ' +\n        pxToEm(left);\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 !Number.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 { Direction } from '../../typings/common';\nimport type { EdgeInsets } from '../types/edgeInserts';\nimport { edgeInsertsToCss } from './edgeInsertsToCss';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInserts(\n    edgeInsets: EdgeInsets | undefined,\n    direction: Direction,\n    defaultVal: string\n): string {\n    if (!edgeInsets) {\n        return defaultVal;\n    }\n\n    const list = [\n        edgeInsets.top,\n        (direction === 'ltr' ? edgeInsets.end : edgeInsets.start) ?? edgeInsets.right,\n        edgeInsets.bottom,\n        (direction === 'ltr' ? edgeInsets.start : edgeInsets.end) ?? 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, direction);\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","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 { 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 { Interpolation } from '../../typings/common';\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 (Number.isNaN(num)) {\n        return defaultVal;\n    }\n    return num;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { Animation, AnyAnimation } from '../types/animation';\n\nexport function flattenAnimation(animation: MaybeMissing<Animation>): MaybeMissing<AnyAnimation>[] {\n    const res: MaybeMissing<AnyAnimation>[] = [];\n\n    if (animation.name === 'set') {\n        (animation.items || []).forEach(item => {\n            res.push(...flattenAnimation(item));\n        });\n    } else {\n        res.push(animation as MaybeMissing<AnyAnimation>);\n    }\n\n    return res;\n}\n","import type { EdgeInsets } from '../types/edgeInserts';\nimport { isNonNegativeNumber } from './isNonNegativeNumber';\n\nexport function correctEdgeInsertsObject<T extends EdgeInsets | null>(\n    edgeInsets: EdgeInsets | undefined,\n    defaultVal: T\n): T {\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 as T;\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        'start',\n        'end'\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 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 { 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","import type { MaybeMissing } from '../expressions/json';\nimport type { Shadow } from '../types/border';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\n\n/**\n * Converts to box-shadow\n * @param shadow\n * @returns css style\n */\nexport function shadowToCssBoxShadow(shadow: MaybeMissing<Shadow>): string {\n    return 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}\n\n/**\n * Converts to filter drop-shadow\n * @param shadow\n * @param fontSize\n * @returns css style\n */\nexport function shadowToCssFilter(shadow: MaybeMissing<Shadow>, fontSize: number): string {\n    return 'drop-shadow(' +\n        correctColor(shadow.color || '#000000', shadow.alpha ?? 0.19) + ' ' +\n        pxToEm((shadow.offset?.x?.value || 0) * 10 / fontSize) + ' ' +\n        pxToEm((shadow.offset?.y?.value || 0) * 10 / fontSize) + ' ' +\n        pxToEm((shadow.blur ?? 2) * 10 / fontSize) + ')';\n}\n","let media: MediaQueryList | undefined;\n\nexport function isPrefersReducedMotion(): boolean {\n    if (typeof matchMedia === 'undefined') {\n        return false;\n    }\n\n    if (!media) {\n        media = window.matchMedia('(prefers-reduced-motion)');\n    }\n\n    return media.matches;\n}\n","import { tick } from 'svelte';\nimport type { ComponentContext } from '../types/componentContext';\nimport type { WrappedError } from '../../typings/common';\n\nconst MAX_ITERATIONS = 8;\n\nexport const layoutProvider = (\n    currentNode: HTMLElement,\n    componentContext: ComponentContext,\n    widthVariable: string | undefined,\n    heightVariable: string | undefined\n): ResizeObserver | undefined => {\n    let observer : ResizeObserver | undefined;\n\n    if ((widthVariable || heightVariable) && typeof ResizeObserver !== 'undefined') {\n        observer = new ResizeObserver(async() => {\n            let counter = 0;\n            const sizeHistory: Record<string, Set<number>> = {};\n\n            const setVariable = (variableName: string | undefined, value: number): boolean => {\n                if (variableName) {\n                    const instance = componentContext.getVariable(variableName, 'integer');\n                    if (instance) {\n                        value = Math.round(value);\n\n                        if (!sizeHistory[variableName]) {\n                            sizeHistory[variableName] = new Set();\n                        }\n                        if (!sizeHistory[variableName].has(value)) {\n                            instance.setValue(value);\n                            sizeHistory[variableName].add(value);\n                            return true;\n                        }\n                    } else {\n                        const err: WrappedError = new Error('Missing variable') as WrappedError;\n                        err.level = 'error';\n                        err.additional = {\n                            variableName\n                        };\n                        componentContext.logError(err);\n                    }\n                }\n\n                return false;\n            };\n\n            const recalcProps = () => {\n                if (!currentNode) {\n                    return false;\n                }\n\n                const bbox = currentNode.getBoundingClientRect();\n                const widthRes = setVariable(widthVariable, bbox.width);\n                const heightRes = setVariable(heightVariable, bbox.height);\n\n                return widthRes || heightRes;\n            };\n\n            while (recalcProps()) {\n                if (++counter > MAX_ITERATIONS) {\n                    const err: WrappedError = new Error('Recursive layout in size_provider') as WrappedError;\n                    err.level = 'warn';\n                    err.additional = {\n                        widthVariableName: widthVariable,\n                        heightVariableName: heightVariable\n                    };\n                    componentContext.logError(err);\n                    break;\n                }\n                await tick();\n            }\n        });\n        observer.observe(currentNode);\n    }\n\n    return observer;\n};\n","import type { Readable } from 'svelte/store';\n\nexport const ENABLED_CTX = Symbol('enabled');\n\nexport interface EnabledCtxValue {\n    isEnabled: Readable<boolean>;\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","import type { MaybeMissing } from '../expressions/json';\nimport type { Accessibility } from '../types/base';\n\nexport function composeAccessibilityDescription(accessibility: MaybeMissing<Accessibility>): string {\n    return [\n        accessibility.state_description,\n        accessibility.description,\n        accessibility.hint\n    ].filter(Boolean).join(', ');\n}\n","export const componentFakeAnimation = 1;\nexport const componentFakePagerDuplicate = 2;\n","import type { MaybeMissing } from '../expressions/json';\nimport type { PivotValue, Transformation, Translation } from '../types/base';\nimport { pxToEm } from './pxToEm';\n\nfunction translationToCss(\n    translation: MaybeMissing<Translation> | undefined,\n    multiplier = 1\n): string | undefined {\n    if (!translation || typeof translation.value !== 'number') {\n        return;\n    }\n\n    if (translation.type === 'translation-fixed'\n    ) {\n        return pxToEm(translation.value * multiplier);\n    } else if (translation.type === 'translation-percentage'\n    ) {\n        return `${translation.value * multiplier}%`;\n    }\n}\n\nfunction pivotToCss(\n    pivot: MaybeMissing<PivotValue> | undefined,\n    multiplier = 1\n): string | undefined {\n    if (!pivot || typeof pivot.value !== 'number') {\n        return;\n    }\n\n    if (pivot.type === 'pivot-fixed') {\n        return pxToEm(pivot.value * multiplier);\n    } else if (pivot.type === 'pivot-percentage') {\n        return `${pivot.value * multiplier}%`;\n    }\n}\n\nexport function transformationsToTransform(transformations: MaybeMissing<Transformation[]>): string {\n    return transformations.map(it => {\n        if (it.type === 'rotation') {\n            if (typeof it.angle === 'number') {\n                const pivotX = pivotToCss(it.pivot_x) || '50%';\n                const pivotY = pivotToCss(it.pivot_y) || '50%';\n                const reversePivotX = pivotToCss(it.pivot_x, -1) || '-50%';\n                const reversePivotY = pivotToCss(it.pivot_y, -1) || '-50%';\n\n                return `translate(${pivotX}, ${pivotY}) rotate(${it.angle}deg) translate(${reversePivotX}, ${reversePivotY})`;\n            }\n        } else if (it.type === 'translation') {\n            const x = translationToCss(it.x) || 0;\n            const y = translationToCss(it.y) || 0;\n\n            return `translate(${x}, ${y})`;\n        }\n    }).filter(Boolean).join(' ');\n}\n","import type { Readable } from 'svelte/store';\n\nexport const VISIBILITY_CTX = Symbol('visibility');\n\nexport interface VisibilityCtxValue {\n    visible: Readable<boolean>;\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 function getUrlSchema(url: string): string {\n    if (url.startsWith('tel:')) {\n        return 'tel';\n    }\n\n    if (url.startsWith('/')) {\n        return 'https';\n    }\n\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","<script lang=\"ts\" context=\"module\">\n    const MIN_SWIPE_PX = 8;\n    const MIN_LONG_TAP_DURATION = 400;\n    const MAX_DOUBLE_TAP_DURATION = 400;\n\n    const SUPPORTED_ACCESSIBILITY_TYPES = new Set([\n        'button',\n        'image',\n        'checkbox',\n        'radio',\n        'header'\n    ]);\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, setContext } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Actionable.module.css';\n\n    import type { Action } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { Accessibility } from '../../types/base';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { doNothing } from '../../utils/doNothing';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { wrapError } from '../../utils/wrapError';\n    import { getUrlSchema, isBuiltinSchema } from '../../utils/url';\n    import type { Coords } from '../../utils/getTouchCoords';\n    import { componentFakePagerDuplicate } from '../../utils/componentContext';\n\n    export let componentContext: ComponentContext;\n    export let id = '';\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 pressStartActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let pressEndActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let hoverStartActions: MaybeMissing<Action[]> | undefined = undefined;\n    export let hoverEndActions: 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    export let hasInnerFocusable = false;\n    export let customAccessibility: MaybeMissing<Accessibility> | undefined = undefined;\n    export let captureFocusOnAction = 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 || customAccessibility?.mode === 'exclude');\n        }\n    });\n\n    let node: HTMLElement;\n    let href = '';\n    let target: string | undefined = undefined;\n    let startTs = -1;\n    let clickTs = -1;\n    let startCoords: Coords | null = null;\n    let isChanged = false;\n    let hasJSAction = false;\n    let hasAnyActions = false;\n    let longtapTimer: number;\n    let clickTimer: number;\n    let role: string | undefined;\n    let isChecked: boolean | undefined;\n    let ariaHidden = false;\n\n    $: {\n        ariaHidden = customAccessibility?.mode === 'exclude';\n    }\n\n    $: processedActions = componentContext.getDerivedFromVars(actions, undefined, true);\n\n    $: {\n        if (Array.isArray($processedActions) && $processedActions?.length) {\n            for (let i = 0; i < $processedActions.length; ++i) {\n                const url = $processedActions[i].url;\n\n                if (url) {\n                    href = url;\n                    target = $processedActions[i].target || undefined;\n                    break;\n                }\n            }\n        }\n\n        hasJSAction = Boolean(customAction);\n        if (\n            (href || Array.isArray($processedActions) && $processedActions?.length) &&\n            (actionCtx.hasAction() || ariaHidden)\n        ) {\n            href = '';\n            componentContext.logError(wrapError(new Error('Actionable element is forbidden inside other actionable element or inside accessibility mode=exlucde'), {\n                level: 'warn',\n                additional: {\n                    actions: $processedActions\n                }\n            }));\n        } else if (href && !isBuiltinSchema(getUrlSchema(href), rootCtx.getBuiltinProtocols())) {\n            href = '';\n            hasJSAction = true;\n        } else if (!href && Array.isArray($processedActions) && $processedActions?.length) {\n            hasJSAction = true;\n            if (!$processedActions.some(action => action.url || action.typed || action.menu_items)) {\n                componentContext.logError(wrapError(new Error('The component has a list of actions, but does not have a real action'), {\n                    level: 'warn',\n                    additional: {\n                        actions: $processedActions\n                    }\n                }));\n            }\n        }\n    }\n\n    $: {\n        if (customAccessibility?.type && SUPPORTED_ACCESSIBILITY_TYPES.has(customAccessibility.type)) {\n            if (customAccessibility.type === 'header') {\n                role = 'heading';\n            } else if (customAccessibility.type === 'image') {\n                role = 'img';\n            } else {\n                role = customAccessibility.type;\n            }\n        } else if (href) {\n            role = undefined;\n        } else if (hasJSAction) {\n            role = 'button';\n        }\n\n        if ((role === 'checkbox' || role === 'radio') && typeof customAccessibility?.is_checked === 'boolean') {\n            isChecked = customAccessibility.is_checked;\n        } else {\n            isChecked = undefined;\n        }\n    }\n\n    $: if (node) {\n        if (href || hasJSAction || doubleTapActions?.length) {\n            node.addEventListener('click', onClick);\n        } else {\n            node.removeEventListener('click', onClick);\n        }\n\n        if (\n            doubleTapActions?.length ||\n            longTapActions?.length ||\n            pressStartActions?.length ||\n            pressEndActions?.length\n        ) {\n            node.addEventListener('pointerdown', onPointerDown, {\n                passive: true\n            });\n            window.addEventListener('pointermove', onPointerMove, {\n                passive: true\n            });\n            window.addEventListener('pointerup', onPointerUp, {\n                passive: true\n            });\n            window.addEventListener('pointercancel', onPointerUp, {\n                passive: true\n            });\n        } else {\n            node.removeEventListener('pointerdown', onPointerDown);\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointermove', onPointerMove);\n            window.removeEventListener('pointercancel', onPointerUp);\n        }\n        if (hoverStartActions?.length) {\n            node.addEventListener('pointerenter', onPointerEnter);\n        } else {\n            node.removeEventListener('pointerenter', onPointerEnter);\n        }\n        if (hoverEndActions?.length) {\n            node.addEventListener('pointerleave', onPointerLeave);\n        } else {\n            node.removeEventListener('pointerleave', onPointerLeave);\n        }\n\n        if (captureFocusOnAction === false) {\n            node.addEventListener('mousedown', onMousedown);\n        } else {\n            node.removeEventListener('mousedown', onMousedown);\n        }\n\n        hasAnyActions = Boolean(\n            href ||\n            hasJSAction ||\n            doubleTapActions?.length ||\n            longTapActions?.length ||\n            pressStartActions?.length ||\n            pressEndActions?.length ||\n            hoverStartActions?.length ||\n            hoverEndActions?.length\n        );\n    }\n\n    function hasCustomAction(): boolean {\n        return $processedActions?.some(action => {\n            if (action?.typed) {\n                return true;\n            }\n\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        }) || false;\n    }\n\n    async function processClick(event: MouseEvent | undefined, processUrls: boolean): Promise<void> {\n        if (actions) {\n            if (event && hasCustomAction()) {\n                event.preventDefault();\n            }\n            componentContext.execAnyActions(actions, {\n                node,\n                processUrls\n            });\n        }\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 now = Date.now();\n\n        if (startTs > 0 && now > startTs + MIN_LONG_TAP_DURATION) {\n            // Long tap action\n            event.preventDefault();\n            return;\n        }\n\n        if (doubleTapActions?.length && clickTs > 0 && now - clickTs < MAX_DOUBLE_TAP_DURATION) {\n            event.preventDefault();\n            componentContext.execAnyActions(doubleTapActions, { processUrls: true, node });\n            clickTs = -1;\n            return;\n        }\n\n        clickTs = now;\n\n        if (doubleTapActions?.length && startTs > 0 && now < startTs + MAX_DOUBLE_TAP_DURATION) {\n            // Disable clicks and wait for double clicks\n            event.preventDefault();\n\n            clearTimeout(clickTimer);\n            clickTimer = window.setTimeout(() => {\n                processClick(undefined, true);\n            }, MAX_DOUBLE_TAP_DURATION);\n            return;\n        }\n\n        const cancelled = customAction?.(event) === false;\n\n        if (cancelled) {\n            event.preventDefault();\n        } else {\n            processClick(event, false);\n        }\n    }\n\n    function onPointerDown(event: PointerEvent): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        startCoords = {\n            x: event.clientX,\n            y: event.clientY\n        };\n        isChanged = false;\n        startTs = Date.now();\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n\n        clearTimeout(clickTimer);\n\n        componentContext.execAnyActions(pressStartActions, { node });\n    }\n\n    function onPointerMove(event: PointerEvent): void {\n        if (!startCoords) {\n            return;\n        }\n\n        if (\n            Math.abs(startCoords.x - event.clientX) > MIN_SWIPE_PX ||\n            Math.abs(startCoords.y - event.clientY) > MIN_SWIPE_PX\n        ) {\n            isChanged = true;\n        }\n    }\n\n    function onPointerUp(event: PointerEvent): void {\n        if (actionCtx.hasAction() || !startCoords || startTs < 0) {\n            return;\n        }\n\n        if (!isChanged && (Date.now() - startTs) >= MIN_LONG_TAP_DURATION) {\n            event.stopImmediatePropagation();\n            componentContext.execAnyActions(longTapActions, { processUrls: true, node });\n        }\n\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n        longtapTimer = window.setTimeout(() => {\n            startCoords = null;\n            startTs = -1;\n        }, 100);\n\n        componentContext.execAnyActions(pressEndActions, { node });\n    }\n\n    function onPointerEnter(): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        componentContext.execAnyActions(hoverStartActions, { node });\n    }\n\n    function onPointerLeave(): void {\n        if (actionCtx.hasAction()) {\n            return;\n        }\n\n        componentContext.execAnyActions(hoverEndActions, { node });\n    }\n\n    function onMousedown(event: MouseEvent): void {\n        // prevent focus blur\n        event.preventDefault();\n    }\n\n    function onKeydown(event: KeyboardEvent): void {\n        // todo check event.target is not inside current element\n\n        const target = event.target;\n        if (target instanceof HTMLElement) {\n            if (target.tagName === 'INPUT' || target.contentEditable === 'true') {\n                return;\n            }\n        }\n\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            componentContext.execAnyActions(actions);\n            event.preventDefault();\n        }\n    }\n\n    onMount(() => {\n        if (id && !hasInnerFocusable) {\n            componentContext.attachViewInfo('focus', () => {\n                if (node && (href || hasJSAction)) {\n                    node.focus();\n                }\n            });\n        }\n    });\n\n    onDestroy(() => {\n        if (typeof window !== 'undefined') {\n            window.removeEventListener('pointermove', onPointerMove);\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointercancel', onPointerUp);\n        }\n\n        if (id && !hasInnerFocusable) {\n            componentContext.detachViewInfo('focus');\n        }\n        if (longtapTimer) {\n            clearTimeout(longtapTimer);\n        }\n        if (clickTimer) {\n            clearTimeout(clickTimer);\n        }\n    });\n</script>\n\n{#if href}\n    <a\n        bind:this={node}\n        use:use\n        {href}\n        {target}\n        {style}\n        {role}\n        aria-checked={isChecked}\n        class=\"{cls} {rootCss['root__any-actions']} {isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n        tabindex={componentContext.fakeElement === componentFakePagerDuplicate ? -1 : null}\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        on:pointerdown\n        on:wheel\n        {...attrs}\n    >\n        <slot />\n    </a>\n{:else if hasJSAction}\n    <button\n        bind:this={node}\n        use:use\n        class=\"{cls} {css.actionable__button} {rootCss['root__any-actions']}{` ${isNativeActionAnimation ? rootCss.root__clickable : rootCss['root__clickable-no-transition']} ${rootCss.root__unselectable}` } {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''}\"\n        {style}\n        {role}\n        aria-checked={isChecked}\n        type=\"button\"\n        tabindex={componentContext.fakeElement === componentFakePagerDuplicate ? -1 : null}\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        on:pointerdown\n        on:wheel\n        {...attrs}\n    >\n        <slot />\n    </button>\n{:else}\n    <span\n        bind:this={node}\n        use:use\n        class=\"{cls} {longTapActions?.length ? rootCss['root_disabled-context-menu'] : ''} {hasAnyActions ? rootCss['root__any-actions'] : ''}\"\n        {style}\n        {role}\n        aria-checked={isChecked}\n        aria-hidden={ariaHidden || undefined}\n        on:click\n        on:keydown={onKeydown}\n        on:focus\n        on:blur\n        on:pointerdown\n        on:wheel\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 { type LogError, wrapError } from './wrapError';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { pxToEmWithUnits } from './pxToEm';\n\nexport function getCssFilter(\n    filters: MaybeMissing<Filter>[],\n    logError: LogError\n): string {\n    return filters.map(filter => {\n        if (!filter) {\n            logError(wrapError(new Error('Incorrect filter'), {\n                level: 'warn'\n            }));\n            return;\n        }\n        if (filter.type === 'blur') {\n            if (isPositiveNumber(filter.radius)) {\n                return `blur(${pxToEmWithUnits(filter.radius / 2)})`;\n            }\n        } else if (filter.type === 'rtl_mirror') {\n            // processed in component\n            return;\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","<script lang=\"ts\">\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 type { Direction } from '../../../typings/common';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { getBackground } from '../../utils/background';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { getCssFilter } from '../../utils/filters';\n\n    export let direction: Direction;\n    export let componentContext: ComponentContext;\n    export let background: MaybeMissing<Background[]> = [];\n    export let radius = '';\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], direction);\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, componentContext.logError);\n\n                    if (direction === 'rtl' && bg.filters.some(it => it.type === 'rtl_mirror')) {\n                        stl.transform = 'scale(-1,1)';\n                    }\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\" context=\"module\">\n    const HORIZONTAL_ALIGN_TO_GENERAL_LTR = {\n        left: 'start',\n        center: 'center',\n        right: 'end',\n        start: 'start',\n        end: 'end'\n    };\n\n    const HORIZONTAL_ALIGN_TO_GENERAL_RTL = {\n        left: 'end',\n        center: 'center',\n        right: 'start',\n        start: 'start',\n        end: '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 stateChangeErrorMessage = (prop: string) =>\n        `The component id with the \"${prop}\" property for state change is missing. Either specify the id, or specify the \"transition_trigger\" property without \"state_change\" value.`;\n</script>\n\n<script lang=\"ts\">\n    import { afterUpdate, getContext, onDestroy, setContext, tick } from 'svelte';\n    import { derived, get, writable, type Readable } from 'svelte/store';\n\n    import css from './Outer.module.css';\n\n    import type { DivBaseData, Extension, Transformation } from '../../types/base';\n    import type { Mods, Style } from '../../types/general';\n    import type { DivActionableData } from '../../types/actionable';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { BooleanInt, DivExtension } from '../../../typings/common';\n    import type { Visibility } from '../../types/base';\n    import type { Action, DivBase } 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 { FixedSize, MatchParentSize, WrapContentSize } from '../../types/sizes';\n    import type { Background } from '../../types/background';\n    import type { Animation, AnyAnimation } from '../../types/animation';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { getBackground } from '../../utils/background';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { visibilityAction } from '../../use/visibilityAction';\n    import { genClassName } from '../../utils/genClassName';\n    import { devtool, type DevtoolResult } from '../../use/devtool';\n    import { STATE_CTX, type 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 { Truthy } from '../../utils/truthy';\n    import { shadowToCssBoxShadow } from '../../utils/shadow';\n    import { isDeepEqual } from '../../utils/isDeepEqual';\n    import { isPrefersReducedMotion } from '../../utils/isPrefersReducedMotion';\n    import { layoutProvider } from '../../use/layoutProvider';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../../context/enabled';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import { componentFakePagerDuplicate } from '../../utils/componentContext';\n    import { transformationsToTransform } from '../../utils/transformationsToTransform';\n    import { VISIBILITY_CTX, type VisibilityCtxValue } from '../../context/visibility';\n    import Actionable from './Actionable.svelte';\n    import OuterBackground from './OuterBackground.svelte';\n\n    export let componentContext: ComponentContext<DivBaseData & DivActionableData>;\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    export let heightByAspect = false;\n    export let parentOf: {\n        json: MaybeMissing<DivBaseData> | undefined;\n        id: string | undefined;\n    }[] | undefined = undefined;\n    export let parentOfSimpleMode: boolean | undefined = undefined;\n    export let replaceItems: ((items: (MaybeMissing<DivBaseData> | undefined)[]) => void) | undefined = undefined;\n    export let hasInnerFocusable = false;\n    export let alwaysCustomFocus = false;\n    export let devapi: object | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const stateCtx = getContext<StateCtxValue>(STATE_CTX);\n    const { isEnabled } = getContext<EnabledCtxValue>(ENABLED_CTX);\n    const visibilityCtx = getContext<VisibilityCtxValue>(VISIBILITY_CTX);\n    const direction = rootCtx.direction;\n\n    let currentNode: HTMLElement;\n    let attrs: Record<string, string> | undefined;\n    let extensions: DivExtension[] | null = null;\n    let extensionStore: Readable<{\n        isEnabled?: BooleanInt;\n    }[]>;\n    let prevExtensionsVal: MaybeMissing<Extension>[] | undefined = undefined;\n\n    let prevChilds: string[] = [];\n\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 selfPadding: EdgeInsets | null = null;\n    let margin = '';\n\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 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 alpha = 1;\n    let opacity: number | undefined;\n\n    let background: MaybeMissing<Background[]> | undefined;\n    let backgroundStyle: Style;\n    let hasSeparateBg: boolean;\n\n    let jsonTransitionTriggers = [];\n    let hasStateChangeTrigger = false;\n    let hasVisibilityChangeTrigger = false;\n\n    let stateChangingInProgress: boolean | undefined;\n    let visibilityChangingInProgress: boolean | undefined;\n    let transitionChangeInProgress: boolean | undefined;\n\n    let actions: MaybeMissing<Action>[] = [];\n    let doubleTapActions: MaybeMissing<Action>[] = [];\n    let longTapActions: MaybeMissing<Action>[] = [];\n    let focusActions: MaybeMissing<Action>[] = [];\n    let blurActions: MaybeMissing<Action>[] = [];\n    let pressStartActions: MaybeMissing<Action>[] = [];\n    let pressEndActions: MaybeMissing<Action>[] = [];\n    let hoverStartActions: MaybeMissing<Action>[] = [];\n    let hoverEndActions: MaybeMissing<Action>[] = [];\n\n    let actionAnimationList: MaybeMissing<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    let isVisibilityInited = false;\n    let visibility: Visibility = 'visible';\n\n    let transform: string | undefined;\n\n    let layoutProviderResizeObserver: ResizeObserver | undefined;\n\n    let hasCustomFocus = false;\n    let captureFocusOnAction = true;\n\n    let prevTriggersUnsubscribe: (() => void) | undefined = undefined;\n\n    let registred: {\n        destroy(): void;\n    } | undefined;\n    let dev: DevtoolResult | null = null;\n    let idUnregister: (() => void) | undefined;\n\n    let visAction: {\n        destroy(): void;\n    } | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        selfPadding = null;\n        margin = '';\n        alpha = 1;\n        isVisibilityInited = false;\n        visibility = 'visible';\n        transform = undefined;\n        captureFocusOnAction = true;\n\n        jsonTransitionTriggers = componentContext.fakeElement ?\n            [] :\n            (componentContext.json.transition_triggers || ['state_change', 'visibility_change']);\n        hasStateChangeTrigger = Boolean(jsonTransitionTriggers.indexOf('state_change') !== -1);\n        hasVisibilityChangeTrigger = Boolean(jsonTransitionTriggers.indexOf('visibility_change') !== -1);\n\n        if (currentNode) {\n            useAction(currentNode);\n        }\n\n        prevTriggersUnsubscribe?.();\n        if ($isEnabled) {\n            prevTriggersUnsubscribe = rootCtx.processVariableTriggers(\n                componentContext,\n                componentContext.json.variable_triggers\n            );\n        }\n    }\n\n    // If origJson is same, than the component itself is the same\n    // componentContext could be changed\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if ($isEnabled) {\n        prevTriggersUnsubscribe?.();\n        prevTriggersUnsubscribe = rootCtx.processVariableTriggers(\n            componentContext,\n            componentContext.json.variable_triggers\n        );\n    } else {\n        prevTriggersUnsubscribe?.();\n    }\n\n    $: jsonFocus = componentContext.getDerivedFromVars(componentContext.json.focus);\n    $: jsonBorder = componentContext.getDerivedFromVars(componentContext.json.border);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonMargins = componentContext.getDerivedFromVars(componentContext.json.margins);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonAlignmentHorizontal = componentContext.getDerivedFromVars(componentContext.json.alignment_horizontal);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonAlignmentVertical = componentContext.getDerivedFromVars(componentContext.json.alignment_vertical);\n    $: jsonAlpha = componentContext.getDerivedFromVars(componentContext.json.alpha);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonBackground = componentContext.getDerivedFromVars(componentContext.json.background);\n    $: jsonActionAnimation = componentContext.getDerivedFromVars(componentContext.json.action_animation);\n    $: jsonVisibility = componentContext.getDerivedFromVars(componentContext.json.visibility);\n    $: jsonTransform = componentContext.getDerivedFromVars(componentContext.json.transform);\n    $: jsonTransformations = componentContext.getDerivedFromVars(componentContext.json.transformations);\n    $: jsonCaptureFocusOnAction = componentContext.getDerivedFromVars(componentContext.json.capture_focus_on_action);\n\n    $: {\n        prevChilds.forEach(id => {\n            rootCtx.unregisterParentOf(id);\n        });\n        prevChilds = [];\n        if (parentOf) {\n            parentOf.forEach(item => {\n                if (item?.id) {\n                    prevChilds.push(item.id);\n                    rootCtx.registerParentOf(item.id, {\n                        replaceWith,\n                        isSingleMode: Boolean(parentOfSimpleMode)\n                    });\n                }\n            });\n        }\n    }\n\n    function replaceWith(id: string, items?: DivBase[]): void {\n        if (!Array.isArray(parentOf) || !replaceItems) {\n            return;\n        }\n\n        if (parentOfSimpleMode) {\n            const newItemsLen = Array.isArray(items) ? items.length : 0;\n            if (newItemsLen !== 1) {\n                return;\n            }\n        }\n\n        const index = parentOf.findIndex(item => item?.id === id);\n        const newItems = parentOf.slice();\n        newItems.splice(index, 1, ...(items || [] as DivBase[]).map(it => ({\n            json: it,\n            id: it?.id as string | undefined\n        })));\n\n        parentOf = newItems;\n\n        replaceItems(newItems.map(it => it?.json));\n    }\n\n    $: {\n        const border = hasCustomFocus && $jsonFocus?.border ? $jsonFocus.border : $jsonBorder;\n        let newBorderStyle: Style = {};\n        let newBorderElemStyle: Style = {};\n        let newHasBorder = false;\n        let newBackgroundRadius = '';\n\n        if (border) {\n            if (correctBooleanInt(border.has_shadow, false)) {\n                const shadow = border.shadow;\n                if (shadow) {\n                    newBorderStyle['box-shadow'] = shadowToCssBoxShadow(shadow);\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 (border.stroke) {\n                newHasBorder = true;\n                strokeWidth = correctNonNegativeNumber(border.stroke.width, strokeWidth);\n                strokeColor = correctColor(border.stroke.color, 1, strokeColor);\n                const strokeStyle = border.stroke.style?.type === 'dashed' ? 'dashed' : 'solid';\n                newBorderElemStyle['--divkit-border'] = `${pxToEm(strokeWidth + 1)} ${strokeStyle} ${strokeColor}`;\n            }\n            if (border.corners_radius && typeof border.corners_radius === 'object') {\n                cornersRadius = correctBorderRadiusObject(border.corners_radius, cornersRadius);\n                newBorderStyle['border-radius'] = borderRadius(cornersRadius);\n                const biasedRadius: CornersRadius = {};\n                ([\n                    'top-left',\n                    'top-right',\n                    'bottom-right',\n                    'bottom-left'\n                ] as const).forEach(corner => {\n                    biasedRadius[corner] = (cornersRadius[corner] || 0) + 1;\n                });\n                newBorderElemStyle['--divkit-border-radius'] = borderRadius(biasedRadius);\n            } else if (border.corner_radius) {\n                cornerRadius = correctNonNegativeNumber(border.corner_radius, cornerRadius);\n                cornersRadius = {\n                    'top-left': cornerRadius,\n                    'top-right': cornerRadius,\n                    'bottom-right': cornerRadius,\n                    'bottom-left': cornerRadius\n                };\n                newBorderStyle['border-radius'] = pxToEm(cornerRadius);\n                newBorderElemStyle['--divkit-border-radius'] = pxToEm(cornerRadius + 1);\n            }\n\n            // Clip browser rendering artifacts by border-radius + border-width/2\n            if (newHasBorder && strokeWidth && (border.corners_radius || border.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    $: {\n        selfPadding = correctEdgeInsertsObject(\n            ($jsonPaddings && !customPaddings) ?\n                $jsonPaddings :\n                undefined,\n            selfPadding\n        );\n    }\n\n    $: padding = edgeInsertsToCss(sumEdgeInsets(selfPadding, additionalPaddings), $direction);\n\n    $: {\n        margin = correctEdgeInserts($jsonMargins, $direction, margin);\n    }\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 = componentContext.json.width?.type;\n\n        if (type === 'fixed') {\n            widthNum = correctNonNegativeNumber(($jsonWidth as FixedSize)?.value, widthNum);\n            newWidth = pxToEm(widthNum);\n        } else if (\n            type === 'wrap_content' ||\n            (type === 'match_parent' || !type) && layoutParams.parentHorizontalWrapContent\n        ) {\n            widthType = 'content';\n            if (\n                type === 'wrap_content' && ($jsonWidth as WrapContentSize)?.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 === 'match_parent' || !type) {\n                componentContext.logError(wrapError(new Error('Incorrect child size. Container with wrap_content size contains child with match_parent size along the main axis'), {\n                    level: 'warn'\n                }));\n            }\n        } else {\n            widthType = 'parent';\n            if (layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerWrap) {\n                newWidthError = true;\n                componentContext.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n                    level: 'error'\n                }));\n            }\n            if (\n                layoutParams.parentContainerOrientation === 'vertical' && layoutParams.parentContainerKnownWidth ||\n                layoutParams.stretchWidth ||\n                layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.treatMatchParentAs100\n            ) {\n                const leftMargin = ($direction === 'ltr' ? $jsonMargins?.start : $jsonMargins?.end) ??\n                    $jsonMargins?.left ??\n                    0;\n                const rightMargin = ($direction === 'ltr' ? $jsonMargins?.end : $jsonMargins?.start) ??\n                    $jsonMargins?.right ??\n                    0;\n                const totalWidth = `calc(100% - ${pxToEmWithUnits(leftMargin + rightMargin)})`;\n\n                if (layoutParams.stretchWidth) {\n                    // force preferred width to 0\n                    newWidth = '0';\n                    newWidthMin = totalWidth;\n                } else {\n                    newWidth = totalWidth;\n                }\n                // if (layoutParams.parentContainerOrientation === 'horizontal') {\n                //     newWidthFill = true;\n                // }\n            } else if (layoutParams.parentContainerOrientation === 'horizontal') {\n                newFlexGrow = ($jsonWidth && 'weight' in $jsonWidth && $jsonWidth.weight || 1) *\n                    (layoutParams.multiplyGrow || 1);\n                if (layoutParams.parentContainerWrap) {\n                    newWidthFill = true;\n                }\n            }\n        }\n\n        if (type === 'wrap_content' || type === 'match_parent') {\n            const width = $jsonWidth as (WrapContentSize | MatchParentSize);\n            let min;\n            let max;\n            if (width.min_size && isNonNegativeNumber(width.min_size.value)) {\n                min = width.min_size.value;\n            }\n            if (width.max_size && isNonNegativeNumber(width.max_size.value)) {\n                max = width.max_size.value;\n            }\n            if (min !== undefined && max !== undefined && min > max) {\n                componentContext.logError(wrapError(new Error('Element has incorrect width constraints (min size is bigger than max size).'), {\n                    additional: {\n                        id: componentContext.json.id,\n                        minSize: min + 'dp',\n                        maxSize: max + 'dp'\n                    }\n                }));\n                min = max = undefined;\n            }\n            if (min !== undefined) {\n                newWidthMin = pxToEm(min);\n            }\n            if (max !== undefined) {\n                newWidthMax = pxToEm(max);\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' || align === 'start' || align === 'end') {\n                newWidthMods['halign-self'] = (\n                    $direction === 'ltr' ?\n                        HORIZONTAL_ALIGN_TO_GENERAL_LTR :\n                        HORIZONTAL_ALIGN_TO_GENERAL_RTL\n                )[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    $: {\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 = componentContext.json.height?.type;\n\n        if (heightByAspect) {\n            // auto height\n            // no special css needed, so no special heightType\n        } else if (type === 'fixed') {\n            heightNum = correctNonNegativeNumber(($jsonHeight as FixedSize)?.value, heightNum);\n            newHeight = pxToEm(heightNum);\n        } else if (type === 'match_parent' && !layoutParams.parentVerticalWrapContent) {\n            heightType = 'parent';\n            if (layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerWrap) {\n                newHeightError = true;\n                componentContext.logError(wrapError(new Error('Cannot place a match_parent items on the cross-axis of wrap'), {\n                    level: 'error'\n                }));\n            }\n            if (\n                layoutParams.parentContainerOrientation === 'horizontal' && layoutParams.parentContainerKnownHeight ||\n                layoutParams.stretchHeight ||\n                layoutParams.parentContainerOrientation === 'vertical' && layoutParams.treatMatchParentAs100\n            ) {\n                const topMargin = $jsonMargins?.top ?? 0;\n                const bottomMargin = $jsonMargins?.bottom ?? 0;\n                const totalHeight = `calc(100% - ${pxToEmWithUnits(topMargin + bottomMargin)})`;\n\n                if (layoutParams.stretchHeight) {\n                    // force preferred height to 0\n                    newHeight = '0';\n                    newHeightMin = totalHeight;\n                } else {\n                    newHeight = totalHeight;\n                }\n                // if (layoutParams.parentContainerOrientation === 'vertical') {\n                //     newHeightFill = true;\n                // }\n            } else if (layoutParams.parentContainerOrientation === 'vertical') {\n                newFlexGrow = (($jsonHeight as MatchParentSize)?.weight || 1) *\n                    (layoutParams.multiplyGrow || 1);\n                if (layoutParams.parentContainerWrap) {\n                    newHeightFill = true;\n                }\n            }\n        } else {\n            heightType = 'content';\n            if (\n                type === 'wrap_content' && ($jsonHeight as WrapContentSize)?.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 === 'match_parent') {\n                componentContext.logError(wrapError(new Error('Incorrect child size. Container with wrap_content size contains child with match_parent size along the main axis'), {\n                    level: 'warn'\n                }));\n            }\n        }\n\n        if (!heightByAspect && (type === 'match_parent' || type === 'wrap_content')) {\n            const height = $jsonHeight as (WrapContentSize | MatchParentSize);\n            let min;\n            let max;\n            if (height.min_size && isNonNegativeNumber(height.min_size.value)) {\n                min = height.min_size.value;\n            }\n            if (height.max_size && isNonNegativeNumber(height.max_size.value)) {\n                max = height.max_size.value;\n            }\n            if (min !== undefined && max !== undefined && min > max) {\n                componentContext.logError(wrapError(new Error('Element has incorrect height constraints (min size is bigger than max size).'), {\n                    additional: {\n                        id: componentContext.json.id,\n                        minSize: min + 'dp',\n                        maxSize: max + 'dp'\n                    }\n                }));\n                min = max = undefined;\n            }\n            if (min !== undefined) {\n                newHeightMin = pxToEm(min);\n            }\n            if (max !== undefined) {\n                newHeightMax = pxToEm(max);\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    $: gridArea = layoutParams.gridArea ?\n        `${layoutParams.gridArea.y + 1}/${layoutParams.gridArea.x + 1}/span ${layoutParams.gridArea.rowSpan}/span ${layoutParams.gridArea.colSpan}` :\n        undefined;\n\n    $: {\n        alpha = correctAlpha($jsonAlpha, alpha);\n        opacity = alpha === 1 ? undefined : alpha;\n    }\n\n    $: {\n        attrs = undefined;\n        if ($jsonAccessibility && !customDescription) {\n            const descr = composeAccessibilityDescription($jsonAccessibility);\n            if (descr) {\n                attrs = {};\n                attrs['aria-label'] = descr;\n            }\n        }\n    }\n\n    $: {\n        background = hasCustomFocus && $jsonFocus?.background ? $jsonFocus.background : $jsonBackground;\n        backgroundStyle = {};\n        hasSeparateBg = false;\n        if (Array.isArray(background)) {\n            hasSeparateBg =\n                background.some(it => it.type === 'image' || it.type === 'nine_patch_image') ||\n                Boolean(backgroundRadius);\n\n            if (!hasSeparateBg) {\n                const res = getBackground(background, $direction);\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    $: {\n        stateChangingInProgress = undefined;\n        if (hasStateChangeTrigger && componentContext.id && componentContext.json.transition_in && rootCtx.isRunning('stateChange')) {\n            stateChangingInProgress = true;\n        }\n    }\n    $: {\n        transitionChangeInProgress = undefined;\n        if (\n            hasStateChangeTrigger &&\n            componentContext.id &&\n            rootCtx.isRunning('stateChange') && stateCtx.hasTransitionChange(componentContext.id)\n        ) {\n            transitionChangeInProgress = true;\n        }\n    }\n\n    $: {\n        const json = componentContext.json;\n        let newActions = json.actions || json.action && [json.action] || [];\n        let newDoubleTapActions = json.doubletap_actions || [];\n        let newLongTapActions = json.longtap_actions || [];\n        let newFocusActions = json.focus?.on_focus || [];\n        let newBlurActions = json.focus?.on_blur || [];\n        let newPressStartActions = json.press_start_actions || [];\n        let newPressEndActions = json.press_end_actions || [];\n        let newHoverStartActions = json.hover_start_actions || [];\n        let newHoverEndActions = json.hover_end_actions || [];\n\n        if (componentContext.fakeElement && componentContext.fakeElement !== componentFakePagerDuplicate) {\n            newActions = [];\n            newDoubleTapActions = [];\n            newLongTapActions = [];\n            newFocusActions = [];\n            newBlurActions = [];\n        } else {\n            if (!Array.isArray(newActions)) {\n                newActions = [];\n                componentContext.logError(wrapError(new Error('Actions should be array')));\n            }\n            if (!Array.isArray(newDoubleTapActions)) {\n                newDoubleTapActions = [];\n                componentContext.logError(wrapError(new Error('DoubleTapActions should be array')));\n            }\n            if (!Array.isArray(newLongTapActions)) {\n                newLongTapActions = [];\n                componentContext.logError(wrapError(new Error('LongTapActions should be array')));\n            }\n            if (!Array.isArray(newFocusActions)) {\n                newFocusActions = [];\n                componentContext.logError(wrapError(new Error('FocusActions should be array')));\n            }\n            if (!Array.isArray(newBlurActions)) {\n                newBlurActions = [];\n                componentContext.logError(wrapError(new Error('BlurActions should be array')));\n            }\n            if (!Array.isArray(newPressStartActions)) {\n                newPressStartActions = [];\n                componentContext.logError(wrapError(new Error('PressStartActions should be array')));\n            }\n            if (!Array.isArray(newPressEndActions)) {\n                newPressEndActions = [];\n                componentContext.logError(wrapError(new Error('PressEndActions should be array')));\n            }\n            if (!Array.isArray(newHoverStartActions)) {\n                newHoverStartActions = [];\n                componentContext.logError(wrapError(new Error('HoverStartActions should be array')));\n            }\n            if (!Array.isArray(newHoverEndActions)) {\n                newHoverEndActions = [];\n                componentContext.logError(wrapError(new Error('HoverEndActions should be array')));\n            }\n        }\n\n        if ((\n            newActions.length ||\n            newDoubleTapActions.length ||\n            newLongTapActions.length ||\n            newPressStartActions.length ||\n            newPressEndActions.length ||\n            newHoverStartActions.length ||\n            newHoverEndActions.length\n        ) && customActions) {\n            newActions = [];\n            newDoubleTapActions = [];\n            newLongTapActions = [];\n            newPressStartActions = [];\n            newPressEndActions = [];\n            newHoverStartActions = [];\n            newHoverEndActions = [];\n        }\n\n        // todo check parent actions with customActions\n        actions = newActions;\n        doubleTapActions = newDoubleTapActions;\n        longTapActions = newLongTapActions;\n        focusActions = newFocusActions;\n        blurActions = newBlurActions;\n        pressStartActions = newPressStartActions;\n        pressEndActions = newPressEndActions;\n        hoverStartActions = newHoverStartActions;\n        hoverEndActions = newHoverEndActions;\n    }\n\n    $: {\n        if ($jsonActionAnimation) {\n            actionAnimationList = flattenAnimation($jsonActionAnimation as Animation);\n            actionAnimationTransition = actionAnimationList.map(parseActionAnimation).filter(Boolean).join(', ');\n        }\n    }\n\n    $: if (typeof $jsonCaptureFocusOnAction === 'boolean') {\n        captureFocusOnAction = $jsonCaptureFocusOnAction;\n    }\n\n    function hasNativeAnimation(list: MaybeMissing<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 = isPrefersReducedMotion() ? 0 : 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                componentContext.logError(wrapError(new Error('Unknown action_animation name'), {\n                    additional: {\n                        animation: animation.name\n                    }\n                }));\n                return '';\n        }\n    }\n\n    $: {\n        const prevVisibility = visibility;\n        const nextVisibility = correctVisibility($jsonVisibility, visibility);\n\n        if (prevVisibility !== nextVisibility) {\n            if (isVisibilityInited && (visibility === 'visible' || nextVisibility === 'visible')) {\n                visibility = nextVisibility;\n                onVisibilityChange(nextVisibility);\n            } else {\n                visibility = nextVisibility;\n            }\n        }\n\n        if (!isVisibilityInited) {\n            isVisibilityInited = true;\n        }\n    }\n\n    const parentVisibilityStore = visibilityCtx.visible;\n    $: isVisible = $parentVisibilityStore && visibility !== 'gone' && visibility !== 'invisible';\n    const selfVisibilityStore = writable(isVisible);\n\n    $: {\n        selfVisibilityStore.set(isVisible);\n    }\n\n    setContext<VisibilityCtxValue>(VISIBILITY_CTX, {\n        visible: selfVisibilityStore\n    });\n\n    async function onVisibilityChange(nextVisibility: Visibility) {\n        const direction = nextVisibility === 'visible' ? 'in' : 'out';\n        const transition = direction === 'in' ? componentContext.json.transition_in : componentContext.json.transition_out;\n\n        if (\n            hasVisibilityChangeTrigger &&\n            transition\n        ) {\n            let bbox: DOMRect | undefined;\n            if (nextVisibility === 'gone') {\n                bbox = currentNode.getBoundingClientRect();\n            }\n\n            await tick();\n\n            if (direction === 'in') {\n                visibilityChangingInProgress = true;\n            }\n            stateCtx.runVisibilityTransition(\n                {\n                    ...componentContext.json,\n                    visibility: 'visible'\n                } as DivBaseData,\n                componentContext,\n                transition,\n                currentNode,\n                direction,\n                bbox\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    function unmountExtensions(): void {\n        if (extensions && currentNode) {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            extensions.forEach(it => {\n                it.unmountView?.(currentNode, ctx);\n            });\n            extensions = null;\n        }\n    }\n\n    $: if (componentContext.json && currentNode && !isDeepEqual(componentContext.json.extensions, prevExtensionsVal)) {\n        let exts = prevExtensionsVal = componentContext.json.extensions;\n\n        let list: Readable<{\n            isEnabled?: BooleanInt;\n        }>[] = [];\n        if (Array.isArray(exts)) {\n            exts.forEach(ext => {\n                list.push(componentContext.getDerivedFromVars({\n                    isEnabled: ext.is_enabled\n                }));\n            });\n        }\n\n        // Create a new array every time so it is not equal to the previous one\n        extensionStore = derived(list, val => [...val]);\n    }\n\n    $: {\n        const isEnabledList = $extensionStore;\n        let exts = prevExtensionsVal;\n\n        tick().then(() => {\n            if (exts !== prevExtensionsVal || !currentNode) {\n                return;\n            }\n\n            unmountExtensions();\n\n            if (Array.isArray(prevExtensionsVal)) {\n                const ctx = rootCtx.getExtensionContext(componentContext);\n                extensions = prevExtensionsVal.map((it, index) => {\n                    const id = it.id;\n                    if (!id) {\n                        return;\n                    }\n                    if (isEnabledList[index].isEnabled === false || isEnabledList[index].isEnabled === 0) {\n                        return;\n                    }\n\n                    const instance = rootCtx.getExtension(id, it.params);\n\n                    if (instance) {\n                        instance.mountView?.(currentNode, ctx);\n                    }\n\n                    return instance;\n                }).filter(Truthy);\n            }\n        });\n    }\n\n    function afterInstanceUpdate(): void {\n        if (extensions?.length) {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            extensions.forEach(instance => {\n                instance.updateView?.(currentNode, ctx);\n            });\n        }\n        if (dev) {\n            dev.update(componentContext);\n        }\n    }\n\n    $: mods = {\n        ...widthMods,\n        ...heightMods,\n        'parent-overlap': parentOverlapMod,\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        'has-custom-focus': Boolean(hasCustomFocus && componentContext.json.focus)\n    };\n\n    $: {\n        let transformations;\n        if (Array.isArray($jsonTransformations)) {\n            transformations = $jsonTransformations;\n        } else if ($jsonTransform && $jsonTransform.rotation !== undefined) {\n            transformations = [{\n                type: 'rotation',\n                angle: $jsonTransform.rotation,\n                pivot_x: $jsonTransform.pivot_x,\n                pivot_y: $jsonTransform.pivot_y\n            }] as MaybeMissing<Transformation[]>;\n        }\n\n        if (transformations) {\n            transform = transformationsToTransform(transformations);\n        } else {\n            transform = undefined;\n        }\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: flexBasis = (widthFill || heightFill) ?\n        '100%' :\n        (\n            (\n                (widthFlexGrow || heightFlexGrow) &&\n                !(layoutParams?.parentContainerOrientation === 'horizontal' && layoutParams?.insideParentWithContentWidth) &&\n                !(layoutParams?.parentContainerOrientation === 'vertical' && layoutParams?.insideParentWithContentHeight)\n            ) ?\n                0 :\n                undefined\n        );\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': transform ? '0 0' : undefined,\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        registred?.destroy();\n\n        currentNode = node;\n        if (hasStateChangeTrigger && componentContext.json.transition_in) {\n            if (componentContext.id) {\n                stateCtx.registerChildWithTransitionIn(\n                    componentContext.json as DivBaseData,\n                    componentContext,\n                    componentContext.json.transition_in,\n                    node\n                ).then(() => {\n                    stateChangingInProgress = false;\n                }).catch(e => {\n                    stateChangingInProgress = false;\n                    throw e;\n                });\n            } else {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_in')), {\n                    level: 'warn'\n                }));\n            }\n        }\n        if (hasStateChangeTrigger && componentContext.json.transition_out) {\n            if (componentContext.id) {\n                stateCtx.registerChildWithTransitionOut(\n                    componentContext.json as DivBaseData,\n                    componentContext,\n                    componentContext.json.transition_out,\n                    node\n                );\n            } else {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_out')), {\n                    level: 'warn'\n                }));\n            }\n        }\n        if (!componentContext.fakeElement) {\n            if (componentContext.json.transition_change && !componentContext.id) {\n                componentContext.logError(wrapError(new Error(stateChangeErrorMessage('transition_change')), {\n                    level: 'warn'\n                }));\n            }\n            stateCtx.registerChildWithTransitionChange(\n                componentContext.json as DivBaseData,\n                componentContext,\n                componentContext.json.transition_change,\n                node\n            ).then(() => {\n                transitionChangeInProgress = false;\n            }).catch(e => {\n                transitionChangeInProgress = false;\n                throw e;\n            });\n        }\n\n        const id = componentContext.id;\n        if (id) {\n            idUnregister?.();\n            idUnregister = rootCtx.registerId(id, {\n                context: () => componentContext,\n                node: () => currentNode\n            });\n            stateCtx.registerChild(id);\n        }\n\n        if (componentContext.json.tooltips) {\n            componentContext.attachViewInfo('tooltips', componentContext.json.tooltips);\n        }\n\n        if (layoutProviderResizeObserver) {\n            layoutProviderResizeObserver.disconnect();\n            layoutProviderResizeObserver = undefined;\n        }\n        layoutProviderResizeObserver = layoutProvider(\n            currentNode,\n            componentContext,\n            componentContext.json.layout_provider?.width_variable_name,\n            componentContext.json.layout_provider?.height_variable_name\n        );\n\n        if (devtool && !componentContext.fakeElement) {\n            dev = devtool(node, rootCtx, componentContext, devapi);\n        }\n\n        componentContext.attachViewInfo('node', () => node);\n        registred = {\n            destroy() {\n                componentContext.detachViewInfo('node');\n                if (idUnregister) {\n                    idUnregister();\n                    idUnregister = undefined;\n                }\n                if (id) {\n                    stateCtx.unregisterChild(id);\n                }\n                if (visAction) {\n                    visAction.destroy();\n                }\n                if (dev) {\n                    dev.destroy();\n                }\n            }\n        };\n\n        return registred;\n    }\n\n    function runVisibilityActions(): void {\n        visAction?.destroy();\n\n        const isVisibilityActionsEnabled = (\n            !componentContext.fakeElement ||\n            componentContext.fakeElement === componentFakePagerDuplicate\n        );\n\n        const visibilityActions = isVisibilityActionsEnabled ?\n            (\n                componentContext.json.visibility_actions ||\n                componentContext.json.visibility_action && [componentContext.json.visibility_action]\n            ) :\n            [];\n\n        const disappearActions = isVisibilityActionsEnabled ? componentContext.json.disappear_actions : [];\n\n        if (\n            Array.isArray(visibilityActions) && visibilityActions.length ||\n            Array.isArray(disappearActions) && disappearActions.length\n        ) {\n            visAction = visibilityAction(currentNode, {\n                visibilityActions,\n                disappearActions,\n                rootCtx,\n                componentContext\n            });\n        } else {\n            visAction = undefined;\n        }\n    }\n\n    $: componentPath = componentContext.path.join('.');\n    $: if (componentPath && currentNode && isVisible) {\n        // componentContext because it should work when the component is reused\n        runVisibilityActions();\n    } else {\n        visAction?.destroy();\n        visAction = undefined;\n    }\n\n    function focusHandler() {\n        if (!componentContext.json.focus) {\n            return;\n        }\n\n        if (alwaysCustomFocus || !get(rootCtx.isPointerFocus)) {\n            hasCustomFocus = true;\n        }\n\n        componentContext.execAnyActions(focusActions);\n    }\n\n    function blurHandler() {\n        if (!componentContext.json.focus) {\n            return;\n        }\n\n        hasCustomFocus = false;\n        componentContext.execAnyActions(blurActions);\n    }\n\n    afterUpdate(afterInstanceUpdate);\n\n    onDestroy(() => {\n        prevChilds.forEach(id => {\n            rootCtx.unregisterParentOf(id);\n        });\n        prevChilds = [];\n\n        if (layoutProviderResizeObserver) {\n            layoutProviderResizeObserver.disconnect();\n            layoutProviderResizeObserver = undefined;\n        }\n\n        componentContext.detachViewInfo('tooltips');\n\n        prevTriggersUnsubscribe?.();\n\n        unmountExtensions();\n    });\n</script>\n\n{#if !hasWidthError && !hasHeightError}\n    <Actionable\n        {componentContext}\n        id={componentContext.json.id}\n        use={useAction}\n        cls=\"{cls} {genClassName('outer', css, mods)}\"\n        style={makeStyle(stl)}\n        {actions}\n        {doubleTapActions}\n        {longTapActions}\n        {pressStartActions}\n        {pressEndActions}\n        {hoverStartActions}\n        {hoverEndActions}\n        {attrs}\n        {hasInnerFocusable}\n        isNativeActionAnimation={!actionAnimationList.length || hasNativeAnimation(actionAnimationList)}\n        customAccessibility={$jsonAccessibility}\n        {captureFocusOnAction}\n        on:focus={focusHandler}\n        on:blur={blurHandler}\n        on:pointerdown\n        on:wheel\n    >\n        <!-- eslint-disable-next-line max-len -->\n        {#if hasSeparateBg}<OuterBackground {componentContext} direction={$direction} background={background} radius={backgroundRadius} />{/if}<slot {focusHandler} {blurHandler} {hasCustomFocus} {widthMin} {widthMax} {heightMin} {heightMax} />{#if hasBorder}<span class={css.outer__border} style={makeStyle(borderElemStyle)}></span>{/if}\n    </Actionable>\n{/if}\n","export function correctPositiveNumber(val: number | undefined, defaultVal: number): number {\n    const num = Number(val);\n    if (Number.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    fontWeightValue: number | undefined,\n    defaultVal: number | undefined\n): number | undefined {\n    if (typeof fontWeightValue === 'number' && fontWeightValue > 0) {\n        return fontWeightValue;\n    }\n    return fontWeightToCss(fontWeight) || defaultVal;\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { EdgeInsets } from '../types/edgeInserts';\n\nexport function edgeInsertsMultiply(\n    edgeInsets: MaybeMissing<EdgeInsets>,\n    multiply: number\n): MaybeMissing<EdgeInsets> {\n    if (!edgeInsets) {\n        return {};\n    }\n\n    const res: EdgeInsets = {};\n\n    for (const key of ['left', 'top', 'right', 'bottom', 'start', 'end'] as const) {\n        const val = edgeInsets[key];\n        if (val) {\n            res[key] = val * multiply;\n        }\n    }\n\n    return res;\n}\n","import type { MaybeMissing } from '../expressions/json';\n\nexport function variationSettingsToString(variationSettings: MaybeMissing<Record<string, string>> | undefined): string {\n    if (variationSettings && typeof variationSettings === 'object') {\n        const vals: string[] = [];\n        for (const key in variationSettings) {\n            const val = variationSettings[key];\n            vals.push(`\"${key}\" ${val}`);\n        }\n        return vals.join(', ');\n    }\n\n    return '';\n}\n","<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import css from './TextRange.module.css';\n\n    import type { CloudBackground, DivTextData, TextRange } from '../../types/text';\n    import type { Action } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\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, correctColorWithAlpha, parseColor } from '../../utils/correctColor';\n    import { getBackground } from '../../utils/background';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { shadowToCssFilter } from '../../utils/shadow';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { edgeInsertsMultiply } from '../../utils/edgeInsetsMultiply';\n    import { variationSettingsToString } from '../../utils/variationSettings';\n    import { isNumber } from '../../utils/isNumber';\n\n    export let componentContext: ComponentContext<DivTextData>;\n    export let text: string;\n    export let rootFontSize: number;\n    export let textStyles: MaybeMissing<Partial<TextRange>> = {};\n    export let singleline = false;\n    export let actions: MaybeMissing<Action[]> | undefined = undefined;\n    export let cloudBg = false;\n    export let cloudBgId = '';\n    export let customLineHeight: number | null = null;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const direction = rootCtx.direction;\n\n    const cloudFilterId = cloudBg && cloudBgId || rootCtx.genId('text-range') || '';\n\n    let decoration = 'none';\n    let fontSize = 12;\n    let lineHeight = 1.25;\n    let letterSpacing = '';\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let fontVariationSettings = '';\n    let color = '';\n    let colorOverride: string | undefined;\n    let border: {\n        color: string;\n        width: number;\n        corner_radius?: number;\n    } | null = null;\n    let verticalAlign: number | undefined = undefined;\n    let background: string | undefined;\n    let maskAnimated = false;\n    let maskColor: string | undefined;\n    let maskSize: string | undefined;\n    let maskDensity: string | undefined;\n\n    $: if (componentContext.json) {\n        decoration = 'none';\n        fontSize = 12;\n        lineHeight = 1.25;\n        letterSpacing = '';\n        fontWeight = undefined;\n        fontFamily = '';\n        fontVariationSettings = '';\n        color = '';\n        colorOverride = undefined;\n        border = null;\n        verticalAlign = undefined;\n        background = undefined;\n        maskAnimated = false;\n        maskColor = undefined;\n        maskSize = undefined;\n        maskDensity = undefined;\n    }\n\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    $: {\n        fontSize = correctPositiveNumber(textStyles.font_size, fontSize);\n    }\n\n    $: {\n        if (isPositiveNumber(textStyles.line_height)) {\n            lineHeight = Number(textStyles.line_height) / fontSize;\n        }\n    }\n\n    $: {\n        if (isNumber(textStyles.letter_spacing)) {\n            letterSpacing = pxToEm(textStyles.letter_spacing);\n        }\n    }\n\n    $: {\n        fontWeight = correctFontWeight(textStyles.font_weight, textStyles.font_weight_value, fontWeight);\n        if (typeof textStyles.font_family === 'string' && textStyles.font_family) {\n            fontFamily = rootCtx.typefaceProvider(textStyles.font_family, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        const newVal = variationSettingsToString(textStyles.font_variation_settings);\n        if (newVal !== fontVariationSettings) {\n            fontVariationSettings = newVal;\n        }\n    }\n\n    $: {\n        color = correctColor(textStyles.text_color, 1, color);\n    }\n\n    $: topOffset = textStyles.top_offset ? pxToEm(textStyles.top_offset) : '';\n\n    $: hasCloudBg = textStyles.background?.type === 'cloud';\n\n    $: cloudPadding = textStyles.background?.type === 'cloud' ? textStyles.background.paddings : undefined;\n\n    $: {\n        const mask = textStyles.mask;\n        const hasMask = Boolean(\n            mask &&\n            (mask.type === 'solid' || mask.type === 'particles') &&\n            mask.is_enabled !== false && mask.color\n        );\n\n        if (cloudBg || hasMask) {\n            colorOverride = 'transparent';\n        } else {\n            colorOverride = undefined;\n        }\n\n        maskAnimated = false;\n        maskColor = undefined;\n        maskSize = undefined;\n        maskDensity = undefined;\n        if (cloudBg) {\n            if (hasCloudBg) {\n                background = correctColorWithAlpha((textStyles.background as CloudBackground).color, 255, 'transparent');\n            } else {\n                background = undefined;\n            }\n        } else if (mask && hasMask) {\n            if (mask.type === 'solid') {\n                background = correctColor(mask.color);\n            } else if (mask.type === 'particles') {\n                const size = correctPositiveNumber(mask.particle_size?.value, 1);\n                const sizeEm = pxToEm(size * 10 / fontSize);\n                const density = correctPositiveNumber(mask.density, .8);\n                const color = correctColor(mask.color);\n\n                background = undefined;\n                maskColor = color;\n                maskSize = sizeEm;\n                maskDensity = String(density);\n                maskAnimated = mask.is_animated === true;\n            }\n        } else if (textStyles.background?.type === 'solid') {\n            background = getBackground([textStyles.background], $direction).color;\n        } else {\n            background = undefined;\n        }\n    }\n\n    $: if (\n        textStyles.border?.stroke &&\n        textStyles.border.stroke.color &&\n        correctColor(textStyles.border.stroke.color) !== 'transparent' &&\n        isPositiveNumber(textStyles.border.stroke.width) &&\n        textStyles.background?.type !== 'cloud'\n    ) {\n        border = {\n            color: textStyles.border.stroke.color,\n            width: textStyles.border.stroke.width,\n            corner_radius: textStyles.border.corner_radius\n        };\n    } else {\n        border = null;\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: borderRadius = cloudBg ?\n        (hasCloudBg ? (textStyles.background as CloudBackground).corner_radius || 0 : 0) :\n        (border ? correctPositiveNumber(border.corner_radius, 0) : 0);\n\n    $: shadow = textStyles.text_shadow ? shadowToCssFilter(textStyles.text_shadow, fontSize) : undefined;\n\n    $: {\n        if (typeof textStyles.baseline_offset === 'number') {\n            verticalAlign = textStyles.baseline_offset;\n        }\n    }\n\n    $: customVerticalAlign = typeof textStyles.baseline_offset === 'number' ? undefined : textStyles.alignment_vertical;\n\n    $: mods = {\n        singleline,\n        decoration,\n        align: customVerticalAlign,\n        cloud: hasCloudBg,\n        'relative-vertical-align': Boolean(customLineHeight && verticalAlign),\n        'has-particles-mask': Boolean(maskColor),\n        'mask-animated': maskAnimated\n    };\n\n    $: style = {\n        'font-size': pxToEm((fontSize * 10) / rootFontSize),\n        'line-height': customVerticalAlign ? 'normal' : lineHeight,\n        'letter-spacing': letterSpacing,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        'vertical-align': (customLineHeight || verticalAlign === undefined) ? undefined : pxToEm(verticalAlign * 10 / fontSize),\n        top: (customLineHeight && verticalAlign !== undefined) ? pxToEm(-verticalAlign * 10 / fontSize) : undefined,\n        margin: cloudPadding ?\n            edgeInsertsToCss(edgeInsertsMultiply(cloudPadding, -10 / fontSize), $direction) :\n            undefined,\n        padding: cloudPadding ?\n            edgeInsertsToCss(edgeInsertsMultiply(cloudPadding, 10 / fontSize), $direction) :\n            undefined,\n        filter: cloudBg && hasCloudBg && !cloudBgId ? `url(#${cloudFilterId})` : shadow,\n        color: colorOverride || color,\n        background,\n        opacity: cloudBg && hasCloudBg && !cloudBgId ?\n            (parseColor((textStyles.background as CloudBackground).color)?.a ?? 255) / 255 :\n            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 * 10 / fontSize)} ${border.color}` : undefined,\n        'border-radius': borderRadius ? pxToEm(borderRadius * 10 / fontSize) : undefined,\n        'font-feature-settings': textStyles.font_feature_settings || undefined,\n        'font-variation-settings': fontVariationSettings || undefined,\n        '--divkit-text-mask-color': maskColor,\n        '--divkit-text-mask-size': maskSize,\n        '--divkit-text-mask-density': maskDensity,\n    };\n</script>\n\n{#if cloudBg && hasCloudBg}<svg class={css['text-range__cloud-svg']}><defs><filter id={cloudFilterId}><feGaussianBlur in=\"SourceGraphic\" result=\"blurred\" stdDeviation=\"3\"></feGaussianBlur><feColorMatrix in=\"blurred\" result=\"withMatrix\" type=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 {2 * borderRadius} -{borderRadius}\"></feColorMatrix><feBlend in=\"SourceGraphic\" in2=\"withMatrix\"></feBlend></filter></defs>\n</svg>{/if}{#if topOffset}<span class={css['text-range__top-offset']} style:margin-top={topOffset}></span>{/if}<Actionable\n    {componentContext}\n    cls={genClassName('text-range', css, mods)}\n    {actions}\n    style={makeStyle(style)}\n><!-- zero-width space as default -->{#if maskColor}<div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div><div class={css['text-range__mask-animation']}></div>{/if}{text || '​'}</Actionable>\n","import type { Direction } from '../../typings/common';\nimport type { AlignmentHorizontal } from '../types/alignment';\n\nexport function correctAlignmentHorizontal(\n    orientation: string | undefined,\n    direction: Direction,\n    defaultVal: AlignmentHorizontal\n): AlignmentHorizontal {\n    if (\n        orientation === 'left' ||\n        orientation === 'center' ||\n        orientation === 'right' ||\n        orientation === 'start' ||\n        orientation === 'end'\n    ) {\n        if (orientation === 'left') {\n            return direction === 'ltr' ? 'start' : 'end';\n        } else if (orientation === 'right') {\n            return direction === 'ltr' ? 'end' : 'start';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","export type AlignmentVerticalMapped = 'start' | 'end' | 'center' | 'baseline';\n\nexport function correctAlignmentVertical(\n    orientation: string | undefined,\n    defaultVal: AlignmentVerticalMapped\n): AlignmentVerticalMapped {\n    if (\n        orientation === 'top' ||\n        orientation === 'center' ||\n        orientation === 'bottom' ||\n        orientation === 'baseline'\n    ) {\n        if (orientation === 'top') {\n            return 'start';\n        } else if (orientation === 'bottom') {\n            return 'end';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { VariableValue } from '../expressions/variable';\n\nexport function propToString(val: VariableValue | undefined): string {\n    const valToString = String(val ?? '');\n\n    return valToString;\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","import type { Action, DisappearAction, VisibilityAction } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nexport function filterEnabledActions(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): boolean {\n    return action.is_enabled !== 0 && action.is_enabled !== false;\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","import type { BooleanInt } from '../../typings/common';\nimport { debounce } from '../utils/debounce';\n\nexport interface AutoEllipsizeOptions {\n    enabled: BooleanInt | undefined;\n    lineClamp: number | undefined;\n    maxLines: number | undefined;\n}\n\nexport function autoEllipsize(node: HTMLElement, opts: AutoEllipsizeOptions) {\n    let resizeObserver: ResizeObserver | null = null;\n\n    const recalc = () => {\n        const computedStyle = getComputedStyle(node);\n        const lineHeight = parseFloat(computedStyle.lineHeight);\n\n        node.style.webkitLineClamp = '';\n        node.style.maxHeight = '';\n\n        const offsetHeight = node.offsetHeight;\n        const scrollHeight = node.scrollHeight;\n\n        let lines = Math.max(1, Math.floor(offsetHeight / lineHeight));\n        if (opts.maxLines && opts.maxLines < lines) {\n            lines = opts.maxLines;\n        }\n\n        const shouldLimit = scrollHeight > lines * lineHeight + 1e-9;\n\n        if (shouldLimit) {\n            node.style.webkitLineClamp = String(lines);\n            node.style.maxHeight = lineHeight * lines + 'px';\n        }\n    };\n    const debouncedRecalc = debounce(recalc, 50);\n\n    const cleanup = () => {\n        if (resizeObserver) {\n            resizeObserver.disconnect();\n            resizeObserver = null;\n        }\n    };\n\n    const update = () => {\n        cleanup();\n\n        if (opts.enabled) {\n            recalc();\n\n            if (typeof ResizeObserver !== 'undefined') {\n                resizeObserver = new ResizeObserver(debouncedRecalc);\n                const parent = node.parentElement;\n                if (parent) {\n                    resizeObserver.observe(parent);\n                }\n            }\n        } else {\n            node.style.webkitLineClamp = String(opts.lineClamp || '');\n        }\n    };\n\n    update();\n\n    return {\n        update(newOpts: AutoEllipsizeOptions) {\n            opts = newOpts;\n            update();\n        },\n        destroy() {\n            cleanup();\n        }\n    };\n}\n","import type { Readable } from 'svelte/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\nexport const constUndefStore = constStore(undefined);\n","import type { RootCtxValue } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Variable } from '../expressions/variable';\nimport type { DivBaseData } from '../types/base';\nimport type { ComponentContext, ComponentKey } from '../types/componentContext';\nimport type { CollectionItemBuilder } from '../types/itemBuilder';\nimport type { ImageBuilder, RangeBuilder, TextImage, TextRange } from '../types/text';\n\nexport function getItemsFromItemBuilder(\n    data: MaybeMissing<object[]>,\n    rootCtx: RootCtxValue,\n    componentContext: ComponentContext,\n    builder: MaybeMissing<CollectionItemBuilder>\n) {\n    const items: {\n        div: MaybeMissing<DivBaseData>;\n        id?: string | undefined;\n        vars?: Map<string, Variable> | undefined;\n        key: ComponentKey;\n    }[] = [];\n    const prototypes = builder.prototypes;\n\n    if (prototypes) {\n        data.forEach((it, index) => {\n            if (it === null || typeof it !== 'object') {\n                return;\n            }\n            const additionalVars = rootCtx.preparePrototypeVariables(builder.data_element_name || 'it', it as Record<string, unknown>, index);\n\n            let div: MaybeMissing<DivBaseData> | undefined;\n            let id: string | undefined;\n            for (let i = 0; i < prototypes.length; ++i) {\n                const prototype = prototypes[i];\n                if (!prototype.div) {\n                    continue;\n                }\n                if (prototype.selector === undefined) {\n                    div = prototype.div;\n                    id = componentContext.getJsonWithVars(prototype.id, additionalVars);\n                    break;\n                }\n\n                const selectorVal = componentContext.getJsonWithVars(prototype.selector, additionalVars);\n                if (selectorVal) {\n                    div = prototype.div;\n                    id = componentContext.getJsonWithVars(prototype.id, additionalVars);\n                    break;\n                }\n            }\n\n            if (div) {\n                items.push({\n                    div,\n                    id,\n                    vars: additionalVars,\n                    key: id || { index, data: it }\n                });\n            }\n        });\n    }\n\n    return items;\n}\n\nexport function getElementsFromItemBuilder<B extends RangeBuilder | ImageBuilder, T extends TextRange | TextImage>(\n    data: MaybeMissing<object[]>,\n    rootCtx: RootCtxValue,\n    componentContext: ComponentContext,\n    builder: MaybeMissing<B>,\n    field: string\n) {\n    const items: MaybeMissing<T>[] = [];\n    const prototypes = builder.prototypes;\n\n    if (prototypes) {\n        data.forEach((it, index) => {\n            if (it === null || typeof it !== 'object') {\n                return;\n            }\n            const additionalVars = rootCtx.preparePrototypeVariables(builder.data_element_name || 'it', it as Record<string, unknown>, index);\n\n            let element: MaybeMissing<T> | undefined;\n            for (let i = 0; i < prototypes.length; ++i) {\n                const prototype = prototypes[i];\n                const item = prototype[field as keyof typeof prototype] as T;\n                if (!item) {\n                    continue;\n                }\n                if (prototype.selector === undefined) {\n                    element = item;\n                    break;\n                }\n\n                const selectorVal = componentContext.getJsonWithVars(prototype.selector, additionalVars);\n                if (selectorVal) {\n                    element = item;\n                    break;\n                }\n            }\n\n            if (element) {\n                items.push(componentContext.getJsonWithVars(element, additionalVars) as T);\n            }\n        });\n    }\n\n    return items;\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 { CloudBackground, DivTextData, TextImage, TextRange, TextStyles, TextVerticalAlignment } from '../../types/text';\n    import type { Style } from '../../types/general';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { Action } from '../../../typings/common';\n    import type { TintMode } from '../../types/image';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type 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 { 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 { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { correctColor, parseColor } from '../../utils/correctColor';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { propToString } from '../../utils/propToString';\n    import { correctTintMode } from '../../utils/correctTintMode';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { autoEllipsize } from '../../use/autoEllipsize';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsMultiply } from '../../utils/edgeInsetsMultiply';\n    import { wrapError } from '../../utils/wrapError';\n    import { constStore } from '../../utils/constStore';\n    import { getElementsFromItemBuilder } from '../../utils/itemBuilder';\n\n    export let componentContext: ComponentContext<DivTextData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let text = '';\n    let fontSize = 12;\n    let lineHeight = 1.25;\n    let customLineHeight: number | null = null;\n    let maxHeight = '';\n    let maxLines: number | undefined;\n    let lineClamp: string | number = '';\n    let multiline = false;\n    let halign: AlignmentHorizontal = 'start';\n    let valign: AlignmentVerticalMapped = 'start';\n    let rootTextColor = '';\n    let focusTextColor = '';\n    let gradient = '';\n    let selectable = false;\n\n    interface RenderItemText {\n        text: string;\n        textStyles: TextRange;\n        actions?: MaybeMissing<Action[]>;\n    }\n\n    interface RenderItemImage {\n        image: {\n            url: string;\n            width: string;\n            height: string;\n            wrapperStyle: Style;\n            svgFilterId: string;\n            preloadRequired: boolean;\n            verticalAlign: TextVerticalAlignment | undefined;\n            baselineOffset: string | undefined;\n            top: string | undefined;\n            description: string;\n            a11yAttrs?: Record<string, unknown>;\n        };\n    }\n\n    let renderList: (RenderItemText | RenderItemImage)[] = [];\n    let hasCloudBg = false;\n    let wholeTextCloudBgId = '';\n    let wholeTextCloudBgOpacity: number | undefined;\n    let usedTintColors: [string, TintMode][] = [];\n    let rootTextStyles: typeof $jsonRootTextStyles = {};\n    let ranges: MaybeMissing<TextRange[] | undefined>;\n    let images: MaybeMissing<TextImage[] | undefined>;\n\n    $: if (componentContext.json) {\n        fontSize = 12;\n        lineHeight = 1.25;\n        customLineHeight = null;\n        maxHeight = '';\n        maxLines = undefined;\n        lineClamp = '';\n        multiline = false;\n        halign = 'start';\n        valign = 'start';\n        rootTextColor = '';\n        gradient = '';\n        selectable = false;\n    }\n\n    $: jsonText = componentContext.getDerivedFromVars(componentContext.json.text);\n    $: jsonRanges = componentContext.getDerivedFromVars(\n        componentContext.json.ranges,\n        undefined,\n        true,\n        3\n    );\n    $: jsonImages = componentContext.getDerivedFromVars(componentContext.json.images);\n    $: jsonRootTextStyles = componentContext.getDerivedFromVars({\n        font_size: componentContext.json.font_size,\n        letter_spacing: componentContext.json.letter_spacing,\n        font_weight: componentContext.json.font_weight,\n        font_weight_value: componentContext.json.font_weight_value,\n        font_family: componentContext.json.font_family,\n        text_color: componentContext.json.text_color,\n        underline: componentContext.json.underline,\n        strike: componentContext.json.strike,\n        line_height: componentContext.json.line_height,\n        text_shadow: componentContext.json.text_shadow,\n        font_feature_settings: componentContext.json.font_feature_settings,\n        font_variation_settings: componentContext.json.font_variation_settings\n    }, undefined, true, 1);\n    $: jsonTextSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonMaxLines = componentContext.getDerivedFromVars(componentContext.json.max_lines);\n    $: jsonHAlign = componentContext.getDerivedFromVars(componentContext.json.text_alignment_horizontal);\n    $: jsonVAlign = componentContext.getDerivedFromVars(componentContext.json.text_alignment_vertical);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonFocusTextColor = componentContext.getDerivedFromVars(componentContext.json.focused_text_color);\n    $: jsonTruncate = componentContext.getDerivedFromVars(componentContext.json.truncate);\n    $: jsonTextGradient = componentContext.getDerivedFromVars(componentContext.json.text_gradient);\n    $: jsonSelectable = componentContext.getDerivedFromVars(componentContext.json.selectable);\n    $: jsonAutoEllipsize = componentContext.getDerivedFromVars(componentContext.json.auto_ellipsize);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonRangeBuilderData = typeof componentContext.json.range_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.range_builder?.data, undefined, true\n    ) : (componentContext.json.range_builder?.data ? constStore(componentContext.json.range_builder.data) : undefined);\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonImageBuilderData = typeof componentContext.json.image_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.image_builder?.data, undefined, true\n    ) : (componentContext.json.image_builder?.data ? constStore(componentContext.json.image_builder.data) : undefined);\n\n    $: {\n        if (typeof componentContext.json.text === 'string') {\n            text = propToString($jsonText);\n        } else {\n            text = '';\n            componentContext.logError(wrapError(new Error('Incorrect text value type')));\n        }\n    }\n\n    $: {\n        rootTextStyles = gradient ? {\n            ...$jsonRootTextStyles,\n            text_color: ''\n        } : $jsonRootTextStyles;\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonTextSize, fontSize);\n    }\n\n    $: {\n        const newLineHeight = $jsonLineHeight;\n        if (isPositiveNumber(newLineHeight)) {\n            lineHeight = Number(newLineHeight) / fontSize;\n            customLineHeight = lineHeight;\n        } else {\n            customLineHeight = null;\n        }\n    }\n\n    $: singleline = $jsonMaxLines === 1;\n    $: {\n        let newMaxHeight = '';\n        let newMaxLines: number | undefined;\n        let newLineClamp: string | number = '';\n        let newMultiline = false;\n\n        if ($jsonMaxLines && $jsonMaxLines > 1) {\n            const lines = Number($jsonMaxLines);\n\n            newMaxHeight = lines * lineHeight + 'em';\n            newMaxLines = lines;\n            newLineClamp = lines;\n            newMultiline = true;\n        } else if ($jsonAutoEllipsize && $jsonMaxLines !== 1) {\n            newMultiline = true;\n        }\n\n        maxHeight = newMaxHeight;\n        maxLines = newMaxLines;\n        lineClamp = newLineClamp;\n        multiline = newMultiline;\n    }\n\n    $: {\n        halign = correctAlignmentHorizontal($jsonHAlign, $direction, halign);\n    }\n\n    $: {\n        valign = correctAlignmentVertical($jsonVAlign, valign);\n    }\n\n    $: isAllTextSameColor =\n        !$jsonRanges ||\n        (\n            text && $jsonRanges.length === 1 && $jsonRanges[0] &&\n            (\n                !$jsonRanges[0].start || $jsonRanges[0].start === 0\n            ) &&\n            (\n                !$jsonRanges[0].end ||\n                typeof $jsonRanges[0].end === 'number' && $jsonRanges[0].end >= text.length\n            )\n        );\n\n\n    $: isOnlyOneColorDefined = Boolean(!gradient && $jsonTextColor) !==\n        Boolean($jsonRanges && $jsonRanges[0] && $jsonRanges[0].text_color);\n\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    $: {\n        focusTextColor = correctColor($jsonFocusTextColor, 1, focusTextColor);\n    }\n\n    $: truncate = $jsonTruncate === 'none' ? 'none' : '';\n\n    $: {\n        let newGradient = '';\n\n        if ($jsonTextGradient) {\n            const bg = getBackground([$jsonTextGradient], $direction);\n            if (bg.image) {\n                newGradient = bg.image;\n            }\n        }\n\n        gradient = newGradient;\n    }\n\n    $: {\n        selectable = correctBooleanInt($jsonSelectable, selectable);\n    }\n\n    function updateRenderList(\n        text: string,\n        textRanges: MaybeMissing<TextRange[]> | undefined,\n        textImages: MaybeMissing<TextImage[]> | undefined,\n        rootTextStyles: typeof $jsonRootTextStyles\n    ) {\n        let newRenderList: typeof renderList = [];\n\n        usedTintColors.forEach(([color, mode]) => {\n            rootCtx.removeSvgFilter(color, mode);\n        });\n        usedTintColors = [];\n\n        if (!(\n            Array.isArray(textRanges) && textRanges.length ||\n            Array.isArray(textImages) && textImages.length && text\n        )) {\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: MaybeMissing<TextRange>[] = [];\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            const rangeStart = range.start || 0;\n            const rangeEnd = range.end || text.length;\n            const rangeWithExplicitProps = {\n                top_offset: 0,\n                ...range,\n                start: rangeStart,\n                end: rangeEnd\n            };\n            list.push({\n                index: rangeStart,\n                range: rangeWithExplicitProps as typeof range & {\n                    start: number;\n                    end: number;\n                },\n                type: 'rangeStart',\n                isStart: true\n            });\n            list.push({\n                index: rangeEnd,\n                range: rangeWithExplicitProps as typeof range & {\n                    start: number;\n                    end: number;\n                },\n                type: 'rangeEnd'\n            });\n        });\n        images.forEach((image, index) => {\n            if (image.start !== undefined && image.url && image.start <= content.length) {\n                list.push({\n                    index: image.indexing_direction === 'reversed' ? text.length - image.start : 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({ ...rootTextStyles }, ...activeRanges as any[]) as TextRange;\n                if (activeRanges.length && activeRanges[activeRanges.length - 1].start !== prevIndex) {\n                    textStyles.top_offset = 0;\n                }\n                newRenderList.push({\n                    text: content.substring(prevIndex, index),\n                    textStyles,\n                    actions: item.type === 'rangeEnd' && item.range?.actions?.filter(filterEnabledActions) || 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({ ...rootTextStyles }, ...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                let baselineOffset = item.image.baseline_offset !== undefined ? pxToEm(\n                    ((item.image.baseline_offset) * 10) / (textStyles2.font_size || 12)\n                ) : undefined;\n                let top = item.image.baseline_offset !== undefined ? pxToEm(\n                    ((-item.image.baseline_offset) * 10) / (textStyles2.font_size || 12)\n                ) : undefined;\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                const a11yAttrs: Record<string, unknown> = {};\n                const type = item.image.accessibility?.type;\n                const description = item.image.accessibility?.description || '';\n                if ((type === 'button' || type === 'image') && description) {\n                    a11yAttrs.role = type;\n                } else if (!description || type === 'none') {\n                    a11yAttrs['aria-hidden'] = 'true';\n                }\n\n                newRenderList.push({\n                    image: {\n                        url: item.image.url,\n                        width: imageWidth,\n                        height: imageHeight,\n                        wrapperStyle,\n                        svgFilterId,\n                        preloadRequired: Boolean(item.image.preload_required),\n                        verticalAlign: item.image.baseline_offset !== undefined ?\n                            'baseline' :\n                            item.image.alignment_vertical,\n                        baselineOffset,\n                        top,\n                        description,\n                        a11yAttrs\n                    }\n                });\n            }\n\n            prevIndex = index;\n        });\n\n        if (prevIndex < content.length) {\n            newRenderList.push({\n                text: content.substring(prevIndex),\n                textStyles: { ...rootTextStyles } as TextStyles\n            });\n        }\n\n        renderList = newRenderList;\n        hasCloudBg = newRenderList.some(it => 'text' in it && it.textStyles.background?.type === 'cloud');\n        // In Firefox, svg filters do not work with inline elements. If possible, we transfer them to the parent block.\n        wholeTextCloudBgId = (hasCloudBg && newRenderList.length === 1) ? rootCtx.genId('text-whole-bg') : '';\n        wholeTextCloudBgOpacity = wholeTextCloudBgId ?\n            (\n                parseColor(\n                    ((newRenderList[0] as RenderItemText).textStyles.background as CloudBackground).color\n                )?.a ?? 255\n            ) / 255 :\n            undefined;\n    }\n\n    $: {\n        if (\n            componentContext.json.range_builder &&\n            Array.isArray($jsonRangeBuilderData) &&\n            Array.isArray(componentContext.json.range_builder.prototypes)\n        ) {\n            const builder = componentContext.json.range_builder;\n            ranges = getElementsFromItemBuilder($jsonRangeBuilderData, rootCtx, componentContext, builder, 'range');\n        } else {\n            ranges = $jsonRanges;\n        }\n    }\n\n    $: {\n        if (\n            componentContext.json.image_builder &&\n            Array.isArray($jsonImageBuilderData) &&\n            Array.isArray(componentContext.json.image_builder.prototypes)\n        ) {\n            const builder = componentContext.json.image_builder;\n            images = getElementsFromItemBuilder($jsonImageBuilderData, rootCtx, componentContext, builder, 'image');\n        } else {\n            images = $jsonImages;\n        }\n    }\n\n    $: updateRenderList(text, ranges, images, rootTextStyles);\n\n    $: mods = {\n        singleline,\n        multiline,\n        halign,\n        valign,\n        truncate,\n        'has-focus-color': Boolean(focusTextColor)\n    };\n\n    $: innerMods = {\n        gradient: Boolean(gradient),\n        'has-cloud-bg': hasCloudBg\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        '--divkit-text-focus-color': focusTextColor\n    };\n\n    $: cloudPadding = edgeInsertsToCss(\n        edgeInsertsMultiply(correctEdgeInsertsObject($jsonPaddings, {}) || {}, 10 / fontSize),\n        $direction\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<Outer\n    cls=\"{genClassName('text', css, mods)} {selectable ? rootCss.root__selectable : rootCss.root__unselectable}\"\n    {componentContext}\n    {layoutParams}\n>\n    {#if hasCloudBg}\n        <span\n            class={genClassName('text__inner', css, {\n                ...innerMods,\n                'cloud-bg': true\n            })}\n            style={makeStyle({\n                ...style,\n                padding: cloudPadding,\n                filter: wholeTextCloudBgId ? `url(#${wholeTextCloudBgId})` : undefined,\n                opacity: wholeTextCloudBgOpacity\n            })}\n        >\n            {#each renderList as item}\n                {#if 'text' in item}\n                    {#if item.text}\n                        <TextRangeView\n                            {componentContext}\n                            text={item.text}\n                            rootFontSize={fontSize}\n                            textStyles={item.textStyles}\n                            {singleline}\n                            cloudBg\n                            cloudBgId={wholeTextCloudBgId}\n                        />\n                    {/if}\n                {:else if item.image}\n                    <span style={makeStyle(item.image.wrapperStyle)}><span class={genClassName('text__image-wrapper', css, {\n                        align: item.image.verticalAlign,\n                        crop: customLineHeight !== null\n                    })} style={makeStyle({\n                        'vertical-align': customLineHeight && item.image.baselineOffset !== undefined ? 0 : item.image.baselineOffset,\n                        top: customLineHeight && item.image.baselineOffset !== undefined ? item.image.top : undefined,\n                        width: item.image.width,\n                        height: (customLineHeight && item.image.verticalAlign !== 'baseline') ? customLineHeight + 'em' : undefined\n                    })}></span></span>\n                {/if}\n            {/each}\n        </span>\n    {/if}\n    <span\n        class={genClassName('text__inner', css, innerMods)}\n        style={makeStyle(style)}\n        use:autoEllipsize={{\n            enabled: $jsonAutoEllipsize,\n            lineClamp: typeof lineClamp === 'number' ? lineClamp : undefined,\n            maxLines\n        }}\n    >\n        {#if renderList.length}\n            {#each renderList as item}\n                {#if 'text' in item}\n                    {#if item.text}\n                        <TextRangeView\n                            {componentContext}\n                            text={item.text}\n                            rootFontSize={fontSize}\n                            textStyles={item.textStyles}\n                            {singleline}\n                            actions={item.actions}\n                            {customLineHeight}\n                        />\n                    {/if}\n                {:else if item.image}\n                    <span style={makeStyle(item.image.wrapperStyle)}><span class={genClassName('text__image-wrapper', css, {\n                        align: item.image.verticalAlign,\n                        crop: customLineHeight !== null\n                    })} style={makeStyle({\n                        'vertical-align': customLineHeight && item.image.baselineOffset !== undefined ? 0 : item.image.baselineOffset,\n                        top: customLineHeight && item.image.baselineOffset !== undefined ? item.image.top : undefined,\n                        width: item.image.width,\n                        height: (customLineHeight && item.image.verticalAlign !== 'baseline') ? customLineHeight + 'em' : undefined\n                    })}><img\n                        class={css.text__image}\n                        src={item.image.url}\n                        loading={item.image.preloadRequired ? 'eager' : 'lazy'}\n                        decoding=\"async\"\n                        alt={item.image.description}\n                        {...item.image.a11yAttrs}\n                        style={makeStyle({\n                            height: item.image.height,\n                            filter: item.image.svgFilterId ? `url(#${item.image.svgFilterId})` : undefined\n                        })}\n                        on:error={onImgError}\n                    ></span></span>\n                {/if}\n            {/each}\n        {:else}\n            <TextRangeView\n                {componentContext}\n                {text}\n                rootFontSize={fontSize}\n                textStyles={rootTextStyles}\n                {singleline}\n                {customLineHeight}\n            />\n        {/if}\n    </span>\n</Outer>\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 type { MaybeMissing } from '../expressions/json';\nimport type { Size } from '../types/sizes';\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    margins: PreparedMargins;\n}\n\nexport interface PreparedMargins {\n    top: number;\n    right: number;\n    bottom: number;\n    left: number;\n}\n\nexport function prepareMargins(margins?: EdgeInsets): PreparedMargins {\n    return {\n        top: Number(margins?.top) || 0,\n        right: Number(margins?.right) || 0,\n        bottom: Number(margins?.bottom) || 0,\n        left: Number(margins?.left) || 0\n    };\n}\n\nfunction setAdditionalPadding(\n    insets: EdgeInsets,\n    separator: SeparatorStyle | null,\n    crossAxis: boolean\n): void {\n    const hMargin = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n    const vMargin = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n\n    if (separator?.show_at_start) {\n        if (crossAxis) {\n            insets.top = separator.style.height + vMargin;\n        } else {\n            insets.left = separator.style.width + hMargin;\n        }\n    }\n\n    if (separator?.show_at_end) {\n        if (crossAxis) {\n            insets.bottom = separator.style.height + vMargin;\n        } else {\n            insets.right = separator.style.width + hMargin;\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,\n    separator,\n    lineSeparator,\n    itemSpacing,\n    lineSpacing\n}: {\n    orientation: ContainerOrientation;\n    separator: SeparatorStyle | null;\n    lineSeparator: SeparatorStyle | null;\n    itemSpacing: number;\n    lineSpacing: number;\n}): string {\n    let vals: number[];\n    const separatorHMargins = (separator?.margins.left || 0) + (separator?.margins.right || 0);\n    const separatorVMargins = (separator?.margins.top || 0) + (separator?.margins.bottom || 0);\n    const lineSeparatorHMargins = (lineSeparator?.margins.left || 0) + (lineSeparator?.margins.right || 0);\n    const lineSeparatorVMargins = (lineSeparator?.margins.top || 0) + (lineSeparator?.margins.bottom || 0);\n\n    if (orientation === 'horizontal') {\n        vals = [\n            lineSeparator?.show_between ? (lineSeparator.style.height + lineSeparatorVMargins) : lineSpacing,\n            separator?.show_between ? (separator.style.width + separatorHMargins) : itemSpacing\n        ];\n    } else {\n        vals = [\n            separator?.show_between ? (separator.style.height + separatorVMargins) : itemSpacing,\n            lineSeparator?.show_between ? (lineSeparator.style.width + lineSeparatorHMargins) : lineSpacing\n        ];\n    }\n\n    return vals.map(pxToEm).join(' ');\n}\n\nexport interface ContainerChildInfo {\n    width?: MaybeMissing<Size>;\n    height?: MaybeMissing<Size>;\n}\n\nexport function isWidthMatchParent(item: ContainerChildInfo) {\n    const type = item.width?.type;\n\n    return type !== 'wrap_content' && type !== 'fixed';\n}\n\nexport function isHeightMatchParent(item: ContainerChildInfo) {\n    const type = item.height?.type;\n\n    return type === 'match_parent';\n}\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","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';\nimport { correctNonNegativeNumber } from './correctNonNegativeNumber';\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: correctNonNegativeNumber(shape.item_width?.value, 10),\n        height: correctNonNegativeNumber(shape.item_height?.value, 10),\n        radius: correctNonNegativeNumber(shape.corner_radius?.value, 5)\n    };\n}\n\nfunction calcCircleSize(shape: MaybeMissing<Circle>): DrawableSize {\n    const size = correctNonNegativeNumber(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","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 (typeof document === 'undefined') {\n        res = true;\n    }\n\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","export type ContentAlignmentVerticalMapped =\n    'start' | 'center' | 'end' |\n    'space-between' | 'space-around' | 'space-evenly' |\n    'baseline';\n\nexport function correctContentAlignmentVertical(\n    orientation: string | undefined,\n    defaultVal: ContentAlignmentVerticalMapped\n): ContentAlignmentVerticalMapped {\n    if (\n        orientation === 'top' ||\n        orientation === 'center' ||\n        orientation === 'bottom' ||\n        orientation === 'baseline' ||\n        orientation === 'space-between' ||\n        orientation === 'space-around' ||\n        orientation === 'space-evenly'\n    ) {\n        if (orientation === 'top') {\n            return 'start';\n        } else if (orientation === 'bottom') {\n            return 'end';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","import type { Direction } from '../../typings/common';\n\nexport type ContentAlignmentHorizontalMapped =\n    /* 'left' |  */'center' | /* 'right' | */\n    'start' | 'end' |\n    'space-between' | 'space-around' | 'space-evenly';\n\nexport function correctContentAlignmentHorizontal(\n    orientation: string | undefined,\n    direction: Direction,\n    defaultVal: ContentAlignmentHorizontalMapped\n): ContentAlignmentHorizontalMapped {\n    if (\n        orientation === 'left' ||\n        orientation === 'center' ||\n        orientation === 'right' ||\n        orientation === 'space-between' ||\n        orientation === 'space-around' ||\n        orientation === 'space-evenly' ||\n        orientation === 'start' ||\n        orientation === 'end'\n    ) {\n        if (orientation === 'left') {\n            return direction === 'ltr' ? 'start' : 'end';\n        } else if (orientation === 'right') {\n            return direction === 'ltr' ? 'end' : 'start';\n        }\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","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\" context=\"module\">\n    const THROTTLE_TIMEOUT = 10;\n</script>\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 type { Direction } from '../../../typings/common';\n    import type { ContentAlignmentHorizontalMapped } from '../../utils/correctContentAlignmentHorizontal';\n    import type { ContentAlignmentVerticalMapped } from '../../utils/correctContentAlignmentVertical';\n    import { simpleThrottle } from '../../utils/simpleThrottle';\n    import { type Box, getMarginBox } from '../../utils/getMarginBox';\n\n    export let orientation: ContainerOrientation;\n    export let separator: SeparatorStyle | null;\n    export let lineSeparator: SeparatorStyle | null;\n    export let contentHAlign: ContentAlignmentHorizontalMapped;\n    export let contentVAlign: ContentAlignmentVerticalMapped;\n    export let direction: Direction;\n\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: SeparatorStyle,\n        box0: Box,\n        box1: Box,\n        containingBox: Box,\n        crossAxis: boolean\n    ) {\n        const leftMargin = separatorStyle.margins.left;\n        const rightMargin = separatorStyle.margins.right;\n        const topMargin = separatorStyle.margins.top;\n        const bottomMargin = separatorStyle.margins.bottom;\n\n        if (crossAxis) {\n            separators.push({\n                top: box0.bottom + topMargin,\n                left: containingBox.left + leftMargin,\n                width: Math.max(0, containingBox.right - containingBox.left - leftMargin - rightMargin),\n                height: box1.top - box0.bottom - topMargin - bottomMargin,\n                style: separatorStyle.style\n            });\n        } else {\n            separators.push({\n                top: containingBox.top + topMargin,\n                left: box0.right + leftMargin,\n                width: box1.left - box0.right - leftMargin - rightMargin,\n                height: Math.max(0, containingBox.bottom - containingBox.top - topMargin - bottomMargin),\n                style: separatorStyle.style\n            });\n        }\n    }\n\n    // eslint-disable-next-line max-params\n    function appendSeparators(\n        separators: SeparatorItem[],\n        separator: SeparatorStyle,\n        boxes: Box[],\n        crossAxis: boolean,\n        align: ContentAlignmentHorizontalMapped | ContentAlignmentVerticalMapped,\n        contentBox: {\n            top: number;\n            right: number;\n            bottom: number;\n            left: number;\n        }\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            let right: number;\n            let bottom: number;\n            if (align === 'space-around' || align === 'space-evenly') {\n                right = contentBox.left - separator.style.width;\n                bottom = contentBox.top - separator.style.height;\n            } else {\n                right = boxes[0].left - separator.style.width - separator.margins.left - separator.margins.right;\n                bottom = boxes[0].top - separator.style.height - separator.margins.top - separator.margins.bottom;\n            }\n            appendSeparator(\n                separators,\n                separator,\n                // only right and bottom is used\n                {\n                    top: 0,\n                    right,\n                    bottom,\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,\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            let top: number;\n            let left: number;\n            if (align === 'space-around' || align === 'space-evenly') {\n                top = contentBox.bottom + separator.style.height;\n                left = contentBox.right + separator.style.width;\n            } else {\n                top = lastBox.bottom + separator.style.height + separator.margins.top + separator.margins.bottom;\n                left = lastBox.right + separator.style.width + separator.margins.left + separator.margins.right;\n            }\n\n            appendSeparator(\n                separators,\n                separator,\n                lastBox,\n                // only top and left is used\n                {\n                    top,\n                    right: 0,\n                    bottom: 0,\n                    left\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        const computedStyle = window.getComputedStyle(parentElement);\n        const contentBox = {\n            top: parentBbox.top + parseFloat(computedStyle.paddingTop),\n            right: parentBbox.right - parseFloat(computedStyle.paddingRight),\n            bottom: parentBbox.bottom - parseFloat(computedStyle.paddingBottom),\n            left: parentBbox.left + parseFloat(computedStyle.paddingLeft)\n        };\n\n        separators = [];\n\n        let children = [...parentElement.children]\n            .filter(it => it !== node &&\n                it instanceof HTMLElement &&\n                !it.classList.contains(outerCss.outer__border) &&\n                getComputedStyle(it).display !== 'none'\n            ) 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 left = bbox.left;\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 (direction === 'ltr' ? (bbox.left < right) : (bbox.right > left)) {\n                    break;\n                }\n\n                right = Math.max(right, bbox.right);\n                left = Math.min(left, bbox.left);\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 (direction === 'rtl' && orientation === 'horizontal') {\n                boxes.reverse();\n            }\n\n            if (separator) {\n                appendSeparators(\n                    separators,\n                    separator as SeparatorStyle,\n                    boxes,\n                    orientation === 'vertical',\n                    orientation === 'vertical' ? contentVAlign : contentHAlign,\n                    contentBox\n                );\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\n        if (direction === 'rtl' && orientation === 'vertical') {\n            rowBoxes.reverse();\n        }\n        if (lineSeparator) {\n            appendSeparators(\n                separators,\n                lineSeparator,\n                rowBoxes,\n                orientation === 'horizontal',\n                orientation === 'vertical' ? contentHAlign : contentVAlign,\n                contentBox\n            );\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","<script lang=\"ts\" context=\"module\">\n    const HALIGN_MAP = {\n        start: 'start',\n        center: 'center',\n        end: 'end',\n        // 'space-*' values doesn't supported for cross-axis in wrap-container\n        'space-between': 'start',\n        'space-around': 'start',\n        'space-evenly': 'start'\n    } as const;\n\n    const VALIGN_MAP = {\n        start: 'start',\n        center: 'center',\n        end: 'end',\n        baseline: 'baseline',\n        // 'space-*' doesn't supported for cross-axis in wrap-container\n        'space-between': 'start',\n        'space-around': 'start',\n        'space-evenly': 'start'\n    } as const;\n\n    const AVAIL_SEPARATOR_SHAPES = [\n        'rounded_rectangle',\n        'circle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n    import { type Readable, derived } from 'svelte/store';\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 { DivBaseData } from '../../types/base';\n    import type { ContainerChildInfo, SeparatorStyle } from '../../utils/container';\n    import type { Variable } from '../../expressions/variable';\n    import type { ComponentContext, ComponentKey } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { prepareMargins } from '../../utils/container';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctContainerOrientation } from '../../utils/correctContainerOrientation';\n    import { correctDrawableStyle, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { calcAdditionalPaddings, calcItemsGap, isHeightMatchParent, isWidthMatchParent } from '../../utils/container';\n    import { hasGapSupport } from '../../utils/hasGapSupport';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { type ContentAlignmentVerticalMapped, correctContentAlignmentVertical } from '../../utils/correctContentAlignmentVertical';\n    import { type ContentAlignmentHorizontalMapped, correctContentAlignmentHorizontal } from '../../utils/correctContentAlignmentHorizontal';\n    import { Truthy } from '../../utils/truthy';\n    import { assignIfDifferent } from '../../utils/assignIfDifferent';\n    import { constStore } from '../../utils/constStore';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import { isDeepEqual } from '../../utils/isDeepEqual';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import ContainerSeparators from './ContainerSeparators.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import Outer from '../utilities/Outer.svelte';\n\n    export let componentContext: ComponentContext<DivContainerData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let childStore: Readable<ContainerChildInfo[]>;\n    let orientation: ContainerOrientation = 'vertical';\n    let contentVAlign: ContentAlignmentVerticalMapped = 'start';\n    let contentHAlign: ContentAlignmentHorizontalMapped = 'start';\n    let separator: SeparatorStyle | null = null;\n    let lineSeparator: SeparatorStyle | null = null;\n    let aspect: number | undefined = undefined;\n    let childLayoutParams: LayoutParams = {};\n    let itemSpacing = 0;\n    let lineSpacing = 0;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        orientation = 'vertical';\n        contentVAlign = 'start';\n        contentHAlign = 'start';\n        aspect = undefined;\n        itemSpacing = 0;\n        lineSpacing = 0;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = componentContext.json.items;\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonLayoutMode = componentContext.getDerivedFromVars(componentContext.json.layout_mode);\n    $: jsonContentVAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_vertical);\n    $: jsonContentHAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_horizontal);\n    $: jsonSeparator = componentContext.getDerivedFromVars(componentContext.json.separator);\n    $: jsonLineSeparator = componentContext.getDerivedFromVars(componentContext.json.line_separator);\n    $: jsonItemSpacing = componentContext.getDerivedFromVars(componentContext.json.item_spacing);\n    $: jsonLineSpacing = componentContext.getDerivedFromVars(componentContext.json.line_spacing);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonClipToBounds = componentContext.getDerivedFromVars(componentContext.json.clip_to_bounds);\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivContainerData> | undefined;\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n            key: ComponentKey;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(jsonItems) && jsonItems || []).map((it, index) => {\n                return {\n                    div: it,\n                    key: it.id || { index, data: it }\n                };\n            });\n        }\n\n        const unusedContexts = new Set(items);\n        const keyToContextMap = new Map<unknown, ComponentContext>();\n        let hasDuplicateKeys = false;\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                if (context.key) {\n                    if (typeof context.key === 'string' && keyToContextMap.has(context.key)) {\n                        if (!hasDuplicateKeys) {\n                            hasDuplicateKeys = true;\n                            componentContext.logError(wrapError(new Error('Duplicate key for child elements inside item_builder'), {\n                                additional: {\n                                    key: context.key\n                                }\n                            }));\n                        }\n                    } else {\n                        keyToContextMap.set(\n                            typeof context.key === 'string' ? context.key : context.key.index,\n                            context\n                        );\n                    }\n                }\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            let found = !hasDuplicateKeys && keyToContextMap.get(item.id);\n            let foundByData = keyToContextMap.get(index);\n            if (\n                !found &&\n                !item.id &&\n                typeof item.key === 'object' &&\n                typeof foundByData?.key === 'object' &&\n                isDeepEqual(foundByData.key.data, item.key.data)\n            ) {\n                found = foundByData;\n            }\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id,\n                key: item.key\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: {\n        let children: Readable<ContainerChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                componentContext.getDerivedFromVars({\n                    width: item.json.width,\n                    height: item.json.height\n                })\n            );\n        });\n\n        // Create a new array every time so it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: {\n        orientation = correctContainerOrientation($jsonOrientation, orientation);\n    }\n\n    $: wrap = $jsonLayoutMode === 'wrap';\n\n    $: supportWidthWrapContent = orientation !== 'horizontal' && !wrap;\n    $: supportHeightWrapContent = orientation !== 'vertical' && !wrap;\n\n    $: stretchWidth = orientation === 'overlap' && !$childStore.every(isWidthMatchParent);\n    $: stretchHeight = orientation === 'overlap' && !$childStore.every(isHeightMatchParent);\n\n    $: {\n        contentVAlign = correctContentAlignmentVertical($jsonContentVAlign, contentVAlign);\n    }\n\n    $: {\n        contentHAlign = correctContentAlignmentHorizontal($jsonContentHAlign, $direction, contentHAlign);\n    }\n\n    $: {\n        itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n    }\n\n    $: {\n        lineSpacing = correctNonNegativeNumber($jsonLineSpacing, lineSpacing);\n    }\n\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                    margins: prepareMargins($jsonSeparator.margins)\n                };\n\n                if (separator.show_between && itemSpacing) {\n                    componentContext.logError(wrapError(new Error('item_spacing will be ignored due to the \\'separator\\' property.'), {\n                        level: 'warn'\n                    }));\n                }\n            } else {\n                separator = null;\n            }\n        } else {\n            separator = null;\n        }\n    }\n\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                    margins: prepareMargins($jsonLineSeparator.margins)\n                };\n\n                if (lineSeparator.show_between && lineSpacing) {\n                    componentContext.logError(wrapError(new Error('line_spacing will be ignored due to the \\'line_separator\\' property.'), {\n                        level: 'warn'\n                    }));\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    $: {\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspect = newRatio;\n        } else {\n            aspect = undefined;\n        }\n    }\n\n    $: {\n        let newChildLayoutParams: LayoutParams = {};\n\n        if (orientation === 'overlap') {\n            newChildLayoutParams.overlapParent = true;\n        }\n        if (orientation !== 'horizontal') {\n            newChildLayoutParams.parentHAlign = wrap ? 'start' : HALIGN_MAP[contentHAlign];\n        }\n        if (orientation !== 'vertical') {\n            newChildLayoutParams.parentVAlign = wrap ? 'start' : VALIGN_MAP[contentVAlign];\n        }\n        const isWidthWrapContent = (\n            $jsonWidth?.type === 'wrap_content' ||\n            $jsonWidth?.type === 'match_parent' && layoutParams?.parentHorizontalWrapContent\n        );\n        const isHeightWrapContent = (\n            !$jsonHeight ||\n            $jsonHeight.type === 'wrap_content' ||\n            $jsonHeight.type === 'match_parent' && layoutParams?.parentVerticalWrapContent\n        );\n        if (!supportWidthWrapContent && isWidthWrapContent) {\n            newChildLayoutParams.parentHorizontalWrapContent = true;\n        }\n        if (!aspect && !supportHeightWrapContent && isHeightWrapContent) {\n            newChildLayoutParams.parentVerticalWrapContent = true;\n        }\n        if (\n            supportWidthWrapContent && isWidthWrapContent ||\n            layoutParams?.insideParentWithContentWidth && !isWidthWrapContent && $jsonWidth?.type !== 'fixed'\n        ) {\n            newChildLayoutParams.insideParentWithContentWidth = true;\n        }\n        if (\n            supportHeightWrapContent && isHeightWrapContent ||\n            layoutParams?.insideParentWithContentHeight && !isHeightWrapContent && $jsonHeight?.type !== 'fixed'\n        ) {\n            newChildLayoutParams.insideParentWithContentHeight = true;\n        }\n        if (!isWidthWrapContent) {\n            newChildLayoutParams.parentContainerKnownWidth = true;\n        }\n        if (!isHeightWrapContent) {\n            newChildLayoutParams.parentContainerKnownHeight = true;\n        }\n        newChildLayoutParams.stretchWidth = stretchWidth;\n        newChildLayoutParams.stretchHeight = stretchHeight;\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        let sumWidth = 0;\n        $childStore.forEach(child => {\n            const size = child[orientation === 'horizontal' ? 'width' : 'height'];\n            if (orientation === 'horizontal' && !size || size?.type === 'match_parent') {\n                sumWidth += size?.weight || 1;\n            }\n        });\n        if (sumWidth > 0 && sumWidth < 1) {\n            newChildLayoutParams.multiplyGrow = 1 / sumWidth;\n        }\n\n        childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n    }\n\n    $: mods = {\n        orientation,\n        valign: contentVAlign,\n        halign: contentHAlign,\n        wrap,\n        overflow: ($jsonClipToBounds === false || $jsonClipToBounds === 0) ? 'visible' : undefined\n    };\n\n    $: style = {\n        gap: (separator || lineSeparator || itemSpacing || lineSpacing) ?\n            calcItemsGap({\n                orientation,\n                separator,\n                lineSeparator,\n                itemSpacing,\n                lineSpacing\n            }) :\n            undefined,\n        'aspect-ratio': aspect\n    };\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n<Outer\n    cls={genClassName('container', css, mods)}\n    {componentContext}\n    {layoutParams}\n    {style}\n    {additionalPaddings}\n    heightByAspect={Boolean(aspect)}\n    parentOf={items}\n    {replaceItems}\n>\n    {#each items as item}\n        <Unknown\n            componentContext={item}\n            layoutParams={childLayoutParams}\n        />\n    {/each}\n\n    {#if separator || lineSeparator}\n        <ContainerSeparators\n            direction={$direction}\n            {separator}\n            {lineSeparator}\n            {orientation}\n            {contentHAlign}\n            {contentVAlign}\n        />\n    {/if}\n</Outer>\n","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 css from './Separator.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSeparatorData } from '../../types/separator';\n    import type { Orientation } from '../../types/orientation';\n    import type { ComponentContext } from '../../types/componentContext';\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 { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n    import { correctColor } from '../../utils/correctColor';\n\n    export let componentContext: ComponentContext<DivSeparatorData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    let orientation: Orientation = 'horizontal';\n    // let background = correctColor('#14000000');\n    let background = 'rgba(0,0,0,0.08)';\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        orientation = 'horizontal';\n        background = 'rgba(0,0,0,0.08)';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonDelimiterStyle = componentContext.getDerivedFromVars(componentContext.json.delimiter_style);\n\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    $: {\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    {componentContext}\n    {layoutParams}\n>\n    {#if hasContent}\n        <span class={css.separator__inner} style={makeStyle(style)}></span>\n    {/if}\n</Outer>\n","import type { Direction } from '../../typings/common';\nimport 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}, direction: Direction, 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            halign !== 'start' && halign !== 'end' ||\n        valign && valign !== 'top' && valign !== 'center' && valign !== 'bottom'\n    ) {\n        return defaultVal;\n    }\n\n    return imagePos({\n        content_alignment_horizontal: halign,\n        content_alignment_vertical: valign\n    }, direction);\n}\n","import { htmlFilter } from './htmlFilter';\n\nexport function prepareBase64(data: string): string {\n    if (data.startsWith('data:')) {\n        return htmlFilter(data);\n    }\n    return `data:image/jpg;base64,${htmlFilter(data)}`;\n}\n","<script lang=\"ts\">\n  import { afterUpdate, getContext, onDestroy, onMount } from 'svelte';\n    import type { DivBaseData } from '../../types/base';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { devtool, type DevtoolResult } from '../../use/devtool';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n\n    export let componentContext: ComponentContext<DivBaseData>;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let dev: DevtoolResult | null = null;\n\n    function updateDevtool(): void {\n        if (dev) {\n            dev.update(componentContext);\n        }\n    }\n\n    onMount(() => {\n        if (devtool && !componentContext.fakeElement) {\n            dev = devtool(null, rootCtx, componentContext,);\n        }\n    });\n\n    afterUpdate(updateDevtool);\n\n    onDestroy(() => {\n        if (dev) {\n            dev.destroy();\n        }\n    });\n</script>\n","<script lang=\"ts\" context=\"module\">\n    const FALLBACK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n    const EMPTY_IMAGE = 'empty://';\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 GIF_RE = /\\.gif($|\\?)/i;\n    const GIF_BASE64 = 'data:image/gif';\n    const GIF_URL_ERROR = 'A Gif image was used for the \"Image\" component. The animation will be played on the web platform, but it does not match the behavior of other platforms.';\n</script>\n\n<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 { AlignmentHorizontal, AlignmentVertical } from '../../types/alignment';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { imageSize, objectFitToBackgroundSize } 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    import { prepareBase64 } from '../../utils/prepareBase64';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivImageData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let img: HTMLImageElement;\n    let state = STATE_LOADING;\n    let isEmpty = false;\n    let placeholderColor = DEFAULT_PLACEHOLDER_COLOR;\n\n    let hasError = false;\n    let imageUrl: string | undefined;\n    let backgroundImage = '';\n    // Exactly \"none\", \"scale-down\" would not match android\n    let scale = 'none';\n    let position = '50% 50%';\n    let aspectContent = false;\n    let aspectContentVAlign = 'center';\n    let aspectRatio: number | undefined = undefined;\n    let tintColor: string | undefined = undefined;\n    let tintMode: TintMode = 'source_in';\n    let svgFilterId = '';\n    let animationInterpolator = '';\n    let animationFadeStart = 0;\n    let animationDelay = 0;\n    let animationDuration = 0;\n    let filter = '';\n    let filterClipPath = '';\n    let isRTLMirror = false;\n    let highPriorityPreview = false;\n    let highPrority = false;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        aspectRatio = undefined;\n        aspectContent = false;\n        scale = 'none';\n        position = '50% 50%';\n        tintMode = 'source_in';\n        highPriorityPreview = false;\n        highPrority = false;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonImageUrl = componentContext.getDerivedFromVars(componentContext.json.image_url);\n    $: jsonGifUrl = componentContext.getDerivedFromVars(componentContext.json.gif_url);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n    $: jsonPreview = componentContext.getDerivedFromVars(componentContext.json.preview);\n    $: jsonPreviewUrl = componentContext.getDerivedFromVars(componentContext.json.preview_url);\n    $: jsonPlaceholderColor = componentContext.getDerivedFromVars(componentContext.json.placeholder_color);\n    $: jsonScale = componentContext.getDerivedFromVars(componentContext.json.scale);\n    $: jsonPosition = componentContext.getDerivedFromVars({\n        content_alignment_horizontal: componentContext.json.content_alignment_horizontal,\n        content_alignment_vertical: componentContext.json.content_alignment_vertical\n    });\n    $: jsonA11y = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonTintColor = componentContext.getDerivedFromVars(componentContext.json.tint_color);\n    $: jsonTintMode = componentContext.getDerivedFromVars(componentContext.json.tint_mode);\n    $: jsonAppearanceAnimation = componentContext.getDerivedFromVars(componentContext.json.appearance_animation);\n    $: jsonFilters = componentContext.getDerivedFromVars(componentContext.json.filters);\n    $: jsonPreloadRequired = componentContext.getDerivedFromVars(componentContext.json.preload_required);\n    $: jsonHighPriorityPreviewShow =\n        componentContext.getDerivedFromVars(componentContext.json.high_priority_preview_show);\n\n    $: {\n        const isGif = componentContext.json.type === 'gif';\n        let img = isGif ? $jsonGifUrl : $jsonImageUrl;\n        isEmpty = img === EMPTY_IMAGE;\n        if (isEmpty) {\n            img = FALLBACK_IMAGE;\n        }\n        imageUrl = img;\n        if (!isGif && imageUrl && GIF_RE.test(imageUrl)) {\n            componentContext.logError(wrapError(new Error(GIF_URL_ERROR), {\n                level: 'warn',\n            }));\n        }\n    }\n\n    function updateImageUrl(_url: string | undefined): void {\n        state = STATE_LOADING;\n    }\n    $: updateImageUrl(imageUrl);\n\n    $: {\n        highPriorityPreview = correctBooleanInt($jsonHighPriorityPreviewShow, highPriorityPreview);\n    }\n\n    $: {\n        if (!imageUrl) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error(`Missing \"${componentContext.json.type === 'gif' ? 'gif_url' : 'image_url'}\" for \"${componentContext.json.type}\"`)));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: isWidthContent = $jsonWidth?.type === 'wrap_content';\n\n    $: isHeightContent = $jsonHeight?.type === 'wrap_content';\n\n    $: {\n        const isGif = componentContext.json.type === 'gif';\n        const preview = $jsonPreview;\n        const previewUrl = $jsonPreviewUrl;\n\n        if ((state === STATE_LOADING || state === STATE_ERROR || isEmpty) && (preview || previewUrl)) {\n            backgroundImage = `url(\"${previewUrl ? previewUrl : prepareBase64(preview || '')}\")`;\n            highPrority = highPriorityPreview;\n        } else {\n            backgroundImage = '';\n            highPrority = false;\n        }\n\n        if (!isGif && (\n            previewUrl && GIF_RE.test(previewUrl) ||\n            preview && preview.startsWith(GIF_BASE64)\n        )) {\n            componentContext.logError(wrapError(new Error(GIF_URL_ERROR), {\n                level: 'warn',\n            }));\n        }\n    }\n\n    $: if (state === STATE_LOADING || state === STATE_ERROR || isEmpty) {\n        placeholderColor = correctColor($jsonPlaceholderColor, 1, placeholderColor);\n    } else {\n        placeholderColor = '';\n    }\n\n    $: {\n        scale = imageSize($jsonScale) || scale;\n    }\n\n    function updatePosition(pos: {\n        content_alignment_horizontal?: AlignmentHorizontal;\n        content_alignment_vertical?: AlignmentVertical;\n    }): void {\n        position = correctImagePosition(pos, $direction, position);\n    }\n    $: updatePosition($jsonPosition);\n\n    $: alt = $jsonA11y?.description || '';\n\n    $: {\n        aspectContentVAlign = 'center';\n\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspectRatio = newRatio;\n            aspectContent = componentContext.json.width?.type === 'wrap_content';\n\n            if (aspectContent) {\n                if ($jsonPosition.content_alignment_vertical === 'top') {\n                    aspectContentVAlign = 'top';\n                } else if ($jsonPosition.content_alignment_vertical === 'bottom') {\n                    aspectContentVAlign = 'bottom';\n                }\n            }\n        } else {\n            aspectRatio = undefined;\n        }\n    }\n\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    $: 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    $: {\n        let newFilter = '';\n        let newClipPath = '';\n        if (Array.isArray($jsonFilters) && $jsonFilters.length) {\n            newFilter = getCssFilter($jsonFilters, componentContext.logError);\n        }\n        if (newFilter) {\n            newClipPath = 'polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)';\n        }\n        filter = newFilter;\n        filterClipPath = newClipPath;\n        isRTLMirror = $direction === 'rtl' && Array.isArray($jsonFilters) && $jsonFilters.some(it => it.type === 'rtl_mirror');\n    }\n\n    $: mods = {\n        aspect: aspectRatio !== undefined,\n        'aspect-content': aspectContent,\n        'aspect-valign': aspectContentVAlign !== 'center' ? aspectContentVAlign : undefined,\n        'is-width-content': isWidthContent,\n        'is-height-content': isHeightContent,\n        loaded: state === STATE_LOADED,\n        'before-appearance': Boolean(animationInterpolator) && state === STATE_LOADING,\n        'is-rtl-mirror': isRTLMirror\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': objectFitToBackgroundSize(scale),\n        'clip-path': filterClipPath || undefined,\n        'object-fit': scale,\n        'object-position': position,\n        'aspect-ratio': aspectRatio,\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</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('image', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customDescription={true}\n        style={{\n            'aspect-ratio': aspectRatio\n        }}\n        let:widthMin\n        let:widthMax\n        let:heightMin\n        let:heightMax\n        heightByAspect={aspectRatio !== undefined}\n    >\n        <!-- Safari does not redraw images when changing the svg filter, a complete reconstruction of the DOM is required -->\n        {#key svgFilterId}\n            <img\n                bind:this={img}\n                class={css.image__image}\n                src={state === STATE_ERROR ? FALLBACK_IMAGE : imageUrl}\n                loading={($jsonPreloadRequired || highPrority) ? 'eager' : 'lazy'}\n                decoding={highPrority ? 'sync' : 'async'}\n                style={makeStyle({\n                    ...style,\n                    'min-width': isWidthContent ? widthMin : undefined,\n                    'max-width': isWidthContent ? widthMax : undefined,\n                    'min-height': isHeightContent ? heightMin : undefined,\n                    'max-height': isHeightContent ? heightMax : undefined\n                })}\n                {alt}\n                aria-hidden={alt ? null : 'true'}\n                on:load={onLoad}\n                on:error={onError}\n            >\n        {/key}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","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[], sizes: 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 && !sizes[i]) {\n            template[i] =\n                `minmax(${pxToEm((minSize * weights[i]) / totalWeight)},${formatWeight(weights[i])}fr)`;\n        } else if (allTracksHasWeight || !sizes[i] && 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, onDestroy } from 'svelte';\n    import { derived, type 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 { DivBaseData } from '../../types/base';\n    import type { Size } from '../../types/sizes';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { genClassName } from '../../utils/genClassName';\n    import { gridCalcTemplates } from '../../utils/gridCalcTemplates';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n    import { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n    import { Truthy } from '../../utils/truthy';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivGridData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    let hasError = false;\n    let columnCount = 0;\n    let childStore: Readable<ChildInfo[]>;\n    let resultItems: {\n        componentContext: ComponentContext;\n        layoutParams: LayoutParams;\n    }[];\n    let columnsWeight: number[] = [];\n    let rowsWeight: number[] = [];\n    let columnsMinWidth: number[] = [];\n    let rowsMinHeight: number[] = [];\n    let columnsWidth: number[] = [];\n    let rowsHeight: number[] = [];\n    let rowCount = 0;\n    let contentVAlign: AlignmentVerticalMapped = 'start';\n    let contentHAlign: AlignmentHorizontal = 'start';\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivGridData> | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        hasError = false;\n        columnCount = 0;\n        contentVAlign = 'start';\n        contentHAlign = 'start';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n\n    $: jsonColumnCount = componentContext.getDerivedFromVars(componentContext.json.column_count);\n    $: jsonContentVAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_vertical);\n    $: jsonContentHAlign = componentContext.getDerivedFromVars(componentContext.json.content_alignment_horizontal);\n\n    $: {\n        columnCount = correctPositiveNumber($jsonColumnCount, columnCount);\n\n        if (columnCount < 1) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Incorrect column_count for grid')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: {\n        const unusedContexts = new Set(items);\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                jsonToContextMap.set(context.json, context);\n            });\n        }\n\n        items = jsonItems.map((item, index) => {\n            const found = jsonToContextMap.get(item);\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item, {\n                path: index\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    interface ChildInfo {\n        rowSpan?: number;\n        columnSpan?: number;\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n    }\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                componentContext.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    $: {\n        const used: Record<string, boolean> = {};\n        let x = 0;\n        let y = 0;\n        columnsWeight = [];\n        rowsWeight = [];\n        columnsMinWidth = [];\n        rowsMinHeight = [];\n        columnsWidth = [];\n        rowsHeight = [];\n        let maxY = 0;\n\n        resultItems = items.map((item, index) => {\n            const childInfo = $childStore[index];\n            const colSpan = Math.min(columnCount, Number(childInfo.columnSpan) || 1);\n            const rowSpan = Number(childInfo.rowSpan) || 1;\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                childInfo.width?.type === 'fixed' && childInfo.width.value ?\n                    Number(childInfo.width.value) / colSpan :\n                    0;\n            const heightMin =\n                childInfo.height?.type === 'fixed' && childInfo.height.value ?\n                    Number(childInfo.height.value) / rowSpan :\n                    0;\n\n            // eslint-disable-next-line no-constant-condition\n            while (true) {\n                let isFree = true;\n                OUTER: for (let i = x; i < x + colSpan; ++i) {\n                    for (let j = y; j < y + rowSpan; ++j) {\n                        if (used[i + '_' + j]) {\n                            isFree = false;\n                            break OUTER;\n                        }\n                    }\n                }\n\n                if (isFree) {\n                    break;\n                }\n\n                ++x;\n\n                if (x > columnCount - colSpan) {\n                    x = 0;\n                    ++y;\n                }\n            }\n\n            const gridArea = {\n                x,\n                y,\n                colSpan,\n                rowSpan\n            };\n\n            for (let i = x; i < x + colSpan; ++i) {\n                for (let j = y; j < y + rowSpan; ++j) {\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 (colSpan === 1 && (!columnsMinWidth[i] || columnsMinWidth[i] < widthMin)) {\n                        columnsMinWidth[i] = widthMin;\n                    }\n\n                    if (rowSpan === 1 && (!rowsMinHeight[j] || rowsMinHeight[j] < heightMin)) {\n                        rowsMinHeight[j] = heightMin;\n                    }\n\n                    if (colSpan === 1 && widthMin) {\n                        columnsWidth[i] = widthMin;\n                    }\n                    if (rowSpan === 1 && heightMin) {\n                        rowsHeight[i] = heightMin;\n                    }\n                }\n            }\n\n            maxY = Math.max(maxY, y + rowSpan);\n\n            return {\n                componentContext: item,\n                layoutParams: {\n                    gridArea\n                }\n            };\n        });\n\n        rowCount = Math.max(y + 1, maxY);\n    }\n\n    $: {\n        contentVAlign = correctAlignmentVertical($jsonContentVAlign, contentVAlign);\n    }\n\n    $: {\n        contentHAlign = correctAlignmentHorizontal($jsonContentHAlign, $direction, contentHAlign);\n    }\n\n    $: mods = {\n        valign: contentVAlign,\n        halign: contentHAlign\n    };\n\n    $: style = {\n        'grid-template-columns': gridCalcTemplates(columnsWeight, columnsMinWidth, columnsWidth, columnCount),\n        'grid-template-rows': gridCalcTemplates(rowsWeight, rowsMinHeight, rowsHeight, rowCount)\n    };\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('grid', css, mods)}\n        {componentContext}\n        {style}\n        {layoutParams}\n        parentOf={items}\n        {replaceItems}\n    >\n        {#each resultItems as item}\n            <Unknown\n                componentContext={item.componentContext}\n                layoutParams={item.layoutParams}\n            />\n        {/each}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { Align } from '../types/layoutParams';\n\nexport function correctAlignment(\n    orientation: string | undefined,\n    defaultVal: Align | undefined\n): Align | undefined {\n    if (\n        orientation === 'start' ||\n        orientation === 'center' ||\n        orientation === 'end'\n    ) {\n        return orientation;\n    }\n\n    return defaultVal;\n}\n","export function nonNegativeModulo(value: number, mod: number): number {\n    let res = value % mod;\n    if (res < 0) {\n        res += mod;\n    }\n    return res;\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n    import { derived, type Readable } from 'svelte/store';\n\n    import css from './Gallery.module.css';\n    import rootCss from '../Root.module.css';\n    import arrowsCss from '../utilities/Arrows.module.css';\n\n    import type { Align, LayoutParams } from '../../types/layoutParams';\n    import type { DivGalleryData } from '../../types/gallery';\n    import type { DivBaseData } from '../../types/base';\n    import type { Orientation } from '../../types/orientation';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Style } from '../../types/general';\n    import type { ComponentContext, ComponentKey } from '../../types/componentContext';\n    import type { Variable } from '../../expressions/variable';\n    import type { Overflow } from '../../../typings/common';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\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 { debounce } from '../../utils/debounce';\n    import { Truthy } from '../../utils/truthy';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { constStore } from '../../utils/constStore';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import { isDeepEqual } from '../../utils/isDeepEqual';\n    import { wrapError } from '../../utils/wrapError';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n\n    export let componentContext: ComponentContext<DivGalleryData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    interface ChildInfo {\n        visibility?: string;\n    }\n\n    interface Item {\n        index: number;\n        hasGapBefore: boolean;\n        componentContext: ComponentContext;\n    }\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\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 columns = 1;\n    let orientation: Orientation = 'horizontal';\n    let align: Align | undefined = 'start';\n    let scrollAlign: Align | undefined;\n    let gridGap: string | undefined;\n    let itemSpacing = 8;\n    let crossGridGap: string | undefined;\n    let crossSpacing;\n    let padding = '';\n    let paddingSizes = {\n        first: 0,\n        last: 0\n    };\n    let lastPaddingSize: {\n        width: string;\n        height: string;\n        'margin-left'?: string;\n        'margin-right'?: string;\n        'margin-bottom'?: string;\n    } | undefined;\n    let childStore: Readable<ChildInfo[]>;\n    let scrollerStyle: Style = {};\n    let scrollSnap = false;\n    let childLayoutParams: LayoutParams = {};\n    let defaultItem = 0;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        columns = 1;\n        orientation = 'horizontal';\n        align = 'start';\n        scrollAlign = undefined;\n        itemSpacing = 8;\n        padding = '';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: jsonItems = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonColumnCount = componentContext.getDerivedFromVars(componentContext.json.column_count);\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonCrossContentAlignment = componentContext.getDerivedFromVars(componentContext.json.cross_content_alignment);\n    $: jsonScrollContentAlignment = componentContext.getDerivedFromVars(componentContext.json.scroll_content_alignment);\n    $: jsonItemSpacing = componentContext.getDerivedFromVars(componentContext.json.item_spacing);\n    $: jsonCrossSpacing = componentContext.getDerivedFromVars(componentContext.json.cross_spacing);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonScrollMode = componentContext.getDerivedFromVars(componentContext.json.scroll_mode);\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonScrollbar = componentContext.getDerivedFromVars(componentContext.json.scrollbar);\n    $: jsonDefaultItem = componentContext.getDerivedFromVars(componentContext.json.default_item);\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    const isDesktop = rootCtx.isDesktop;\n    let items: ComponentContext[] = [];\n    let prevContext: ComponentContext<DivGalleryData> | undefined;\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n            key: ComponentKey;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(jsonItems) && jsonItems || []).map((it, index) => {\n                return {\n                    div: it,\n                    key: it.id || { index, data: it }\n                };\n            });\n        }\n\n        const unusedContexts = new Set(items);\n        const keyToContextMap = new Map<unknown, ComponentContext>();\n        let hasDuplicateKeys = false;\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                if (context.key) {\n                    if (typeof context.key === 'string' && keyToContextMap.has(context.key)) {\n                        if (!hasDuplicateKeys) {\n                            hasDuplicateKeys = true;\n                            componentContext.logError(wrapError(new Error('Duplicate key for child elements inside item_builder'), {\n                                additional: {\n                                    key: context.key\n                                }\n                            }));\n                        }\n                    } else {\n                        keyToContextMap.set(\n                            typeof context.key === 'string' ? context.key : context.key.index,\n                            context\n                        );\n                    }\n                }\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            let found = !hasDuplicateKeys && keyToContextMap.get(item.id);\n            let foundByData = keyToContextMap.get(index);\n            if (\n                !found &&\n                !item.id &&\n                typeof item.key === 'object' &&\n                typeof foundByData?.key === 'object' &&\n                isDeepEqual(foundByData.key.data, item.key.data)\n            ) {\n                found = foundByData;\n            }\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id,\n                key: item.key\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: shouldCheckArrows = $isDesktop && mounted;\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    $: {\n        columns = correctPositiveNumber($jsonColumnCount, columns);\n    }\n\n    function rebuildItemsGrid(items: ComponentContext[], info: ChildInfo[], columns: number): Item[][] {\n        let column = 0;\n        let res: Item[][] = [];\n        let wasFirstVisibleItem = [];\n\n        for (let i = 0; i < items.length; ++i) {\n            if (!res[column]) {\n                res[column] = [];\n            }\n            res[column].push({\n                index: i,\n                hasGapBefore: wasFirstVisibleItem[column] && info[i].visibility !== 'gone',\n                componentContext: items[i]\n            });\n            if (!wasFirstVisibleItem[column] && info[i].visibility !== 'gone') {\n                wasFirstVisibleItem[column] = true;\n            }\n            if (++column >= columns) {\n                column = 0;\n            }\n        }\n\n        return res;\n    }\n\n    $: {\n        orientation = correctGeneralOrientation($jsonOrientation, orientation);\n    }\n\n    $: {\n        align = correctAlignment($jsonCrossContentAlignment, align);\n    }\n\n    $: {\n        scrollAlign = correctAlignment($jsonScrollContentAlignment, scrollAlign);\n    }\n    $: totalScrollAlign = (() => {\n        if (scrollAlign) {\n            return scrollAlign;\n        }\n        if ($jsonScrollMode === 'paging') {\n            return 'center';\n        }\n        return 'start';\n    })();\n\n    $: {\n        itemSpacing = correctNonNegativeNumber($jsonItemSpacing, itemSpacing);\n        gridGap = pxToEm(itemSpacing);\n    }\n\n    $: {\n        crossSpacing = correctNonNegativeNumber($jsonCrossSpacing, itemSpacing);\n        crossGridGap = pxToEm(crossSpacing);\n    }\n\n    $: {\n        padding = correctEdgeInserts($jsonPaddings, $direction, padding);\n        const firstSize = orientation === 'horizontal' ?\n            ($jsonPaddings?.start ?? $jsonPaddings?.[($direction === 'ltr' ? 'left' : 'right')] ?? 0) :\n            ($jsonPaddings?.top ?? 0);\n        const lastSize = orientation === 'horizontal' ?\n            ($jsonPaddings?.end ?? $jsonPaddings?.[($direction === 'ltr' ? 'right' : 'left')] ?? 0) :\n            ($jsonPaddings?.bottom ?? 0);\n        const calcedLastSize = pxToEm(lastSize);\n        paddingSizes = {\n            first: firstSize,\n            last: lastSize,\n        };\n        lastPaddingSize = {\n            width: orientation === 'horizontal' ? calcedLastSize : '1px',\n            height: orientation === 'horizontal' ? '1px' : calcedLastSize,\n            'margin-right': orientation === 'horizontal' && $direction === 'ltr' ? '-' + calcedLastSize : undefined,\n            'margin-left': orientation === 'horizontal' && $direction === 'rtl' ? '-' + calcedLastSize : undefined,\n            'margin-bottom': orientation === 'vertical' ? '-' + calcedLastSize : undefined,\n        };\n    }\n\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(item.getDerivedFromVars({\n                visibility: item.json.visibility\n            }));\n        });\n\n        // Create a new array every time so it is not equal to the previous one\n        childStore = derived(children, val => [...val]);\n    }\n\n    $: itemsGrid = rebuildItemsGrid(items, $childStore, columns);\n\n    $: {\n        const newScrollerStyle: Style = {};\n        let newChildLayoutParams: LayoutParams = {};\n        scrollSnap = false;\n\n        newChildLayoutParams.treatMatchParentAs100 = true;\n\n        if (orientation === 'horizontal') {\n            newChildLayoutParams.parentVAlign = align;\n            newChildLayoutParams.parentContainerOrientation = 'horizontal';\n        } else {\n            newChildLayoutParams.parentHAlign = align;\n            newChildLayoutParams.parentContainerOrientation = 'vertical';\n        }\n\n        if ($jsonScrollMode === 'paging') {\n            scrollSnap = true;\n            newChildLayoutParams.scrollSnap = totalScrollAlign;\n            if (totalScrollAlign === 'start') {\n                // eslint-disable-next-line no-nested-ternary\n                const scrollPadding = orientation === 'horizontal' ?\n                    ($direction === 'ltr' ? 'scroll-padding-left' : 'scroll-padding-right') :\n                    'scroll-padding-top';\n                newScrollerStyle[scrollPadding] = pxToEm(paddingSizes.first);\n            } else if (totalScrollAlign === 'end') {\n                // eslint-disable-next-line no-nested-ternary\n                const scrollPadding = orientation === 'horizontal' ?\n                    ($direction === 'ltr' ? 'scroll-padding-right' : 'scroll-padding-left') :\n                    'scroll-padding-bottom';\n                newScrollerStyle[scrollPadding] = pxToEm(paddingSizes.last);\n            }\n        }\n\n        scrollerStyle = assignIfDifferent(newScrollerStyle, scrollerStyle);\n        childLayoutParams = assignIfDifferent(newChildLayoutParams, childLayoutParams);\n    }\n\n    $: gridStyle = {\n        padding,\n        'grid-gap': crossGridGap\n    };\n\n    $: mods = {\n        orientation,\n        'scroll-snap': scrollSnap,\n        scrollbar: $jsonScrollbar === 'auto' ? 'auto' : 'none'\n    };\n\n    $: {\n        defaultItem = correctNonNegativeNumber($jsonDefaultItem, defaultItem);\n    }\n\n    function updateArrowsVisibility(): void {\n        if (!scroller) {\n            return;\n        }\n\n        let scrollLeft = scroller.scrollLeft;\n        if ($direction === 'rtl') {\n            scrollLeft *= -1;\n        }\n        const scrollWidth = scroller.scrollWidth;\n        const containerWidth = scroller.offsetWidth;\n\n        if ($direction === 'ltr') {\n            hasScrollLeft = scrollLeft > 2;\n            hasScrollRight = scrollLeft + containerWidth < scrollWidth - 2;\n        } else {\n            hasScrollRight = scrollLeft > 2;\n            hasScrollLeft = scrollLeft + containerWidth < scrollWidth - 2;\n        }\n    }\n\n    const updateArrowsVisibilityDebounced = debounce(updateArrowsVisibility, 50);\n\n    $: if (componentContext.json) {\n        updateArrowsVisibilityDebounced();\n    }\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 += 2) {\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 scrollTo(offset: number, animated = true): void {\n        const isHorizontal = orientation === 'horizontal';\n        const scrollDirection: keyof ScrollToOptions = isHorizontal ? 'left' : 'top';\n\n        scroller.scroll({\n            [scrollDirection]: offset,\n            behavior: animated ? 'smooth' : 'instant'\n        });\n    }\n\n    function scrollToGalleryItem(galleryElements: HTMLElement[], index: number, {\n        animated = true,\n        extraOffset = 0,\n        overflow = 'clamp'\n    }: {\n        animated?: boolean;\n        extraOffset?: number;\n        overflow?: Overflow;\n    } = {}): void {\n        const isHorizontal = orientation === 'horizontal';\n        const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n        const elementSize: keyof HTMLElement = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n\n        // 0.01 forces Chromium to use scroll-snap (exact correct scroll position will not trigger it)\n        // Chromium will save scroll-snapped value and will not save exact one\n        // Saved scroll position is used on resnapping (e.g. content change)\n\n        if (index > galleryElements.length - 1) {\n            index = overflow === 'ring' ? nonNegativeModulo(index, galleryElements.length) : galleryElements.length - 1;\n        } else if (index < 0) {\n            index = overflow === 'ring' ? nonNegativeModulo(index, galleryElements.length) : 0;\n        }\n\n        const elem = galleryElements[index];\n        const scrollWrapperSize = scroller.offsetWidth;\n\n        if (elem) {\n            let offset;\n            if ($direction === 'ltr' || !isHorizontal) {\n                if (totalScrollAlign === 'start') {\n                    offset = elem[elementOffset] - paddingSizes.first + .01;\n                } else if (totalScrollAlign === 'center') {\n                    offset = elem[elementOffset] + elem[elementSize] / 2 - scrollWrapperSize / 2 + .01;\n                } else {\n                    offset = elem[elementOffset] + elem[elementSize] + paddingSizes.last - scrollWrapperSize + .01;\n                }\n            } else {\n                // eslint-disable-next-line no-lonely-if\n                if (totalScrollAlign === 'start') {\n                    offset = elem[elementOffset] + elem[elementSize] + paddingSizes.first + .01 - scrollWrapperSize;\n                } else if (totalScrollAlign === 'center') {\n                    offset = elem[elementOffset] + elem[elementSize] / 2 - scrollWrapperSize / 2 + .01;\n                } else {\n                    offset = elem[elementOffset] - paddingSizes.last + .01;\n                }\n            }\n\n            if (extraOffset) {\n                offset += extraOffset;\n\n                const maxOffset = isHorizontal ?\n                    scroller.scrollWidth - scroller.offsetWidth :\n                    scroller.scrollHeight - scroller.offsetHeight;\n                if (offset > maxOffset) {\n                    if (overflow === 'clamp') {\n                        offset = maxOffset;\n                    } else if (overflow === 'ring') {\n                        offset = nonNegativeModulo(offset, maxOffset);\n                    }\n                }\n                if (offset < 0) {\n                    if (overflow === 'clamp') {\n                        offset = 0;\n                    } else if (overflow === 'ring') {\n                        offset = nonNegativeModulo(offset, maxOffset);\n                    }\n                }\n            }\n\n            scrollTo(offset, animated);\n        }\n    }\n\n    function scrollOffset(offset: number, {\n        overflow = 'clamp',\n        animated = true\n    }: {\n        overflow?: Overflow;\n        animated?: boolean;\n    } = {}): void {\n        const isHorizontal = orientation === 'horizontal';\n        const directionMultiplier = ($direction === 'ltr' || !isHorizontal) ? 1 : -1;\n        const currentOffset = isHorizontal ?\n            scroller.scrollLeft :\n            scroller.scrollTop;\n        const maxOffset = isHorizontal ?\n            scroller.scrollWidth - scroller.offsetWidth :\n            scroller.scrollHeight - scroller.offsetHeight;\n        let newOffset = currentOffset * directionMultiplier + offset;\n        if (newOffset > maxOffset) {\n            if (overflow === 'clamp') {\n                newOffset = maxOffset;\n            } else if (overflow === 'ring') {\n                newOffset = nonNegativeModulo(newOffset, maxOffset);\n            }\n        } else if (newOffset < 0) {\n            if (overflow === 'clamp') {\n                newOffset = 0;\n            } else if (overflow === 'ring') {\n                newOffset = nonNegativeModulo(newOffset, maxOffset);\n            }\n        }\n        scrollTo(newOffset * directionMultiplier, animated);\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 (componentContext.json) {\n        componentContext.detachViewInfo('scrollable');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('scrollable', {\n                setCurrentItem(item: number, animated: boolean) {\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, { animated });\n                },\n                setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n                    const currentElementIndex = calculateCurrentElementIndex('prev');\n                    const galleryElements = getItems();\n                    let previousItem = currentElementIndex - step;\n\n                    scrollToGalleryItem(galleryElements, previousItem, { animated, overflow });\n                },\n                setNextItem(step: number, overflow: Overflow, animated: boolean) {\n                    const isHorizontal = orientation === 'horizontal';\n                    const directionMultiplier = ($direction === 'ltr' || !isHorizontal) ? 1 : -1;\n                    // Go to scroller start, if we reached right/bottom edge of scroller\n                    const isEdgeScroll = isHorizontal ? (\n                        scroller.scrollLeft * directionMultiplier + 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, { animated });\n                        return;\n                    }\n\n                    const currentElementIndex = calculateCurrentElementIndex('next');\n                    let nextItem = currentElementIndex + step;\n\n                    scrollToGalleryItem(galleryElements, nextItem, { animated, overflow });\n                },\n                scrollToStart(animated: boolean) {\n                    scrollTo(0, animated);\n                },\n                scrollToEnd(animated: boolean) {\n                    scrollTo(($direction === 'ltr' || orientation !== 'horizontal') ? 1e6 : -1e6, animated);\n                },\n                scrollToPosition(step, animated: boolean) {\n                    scrollTo(($direction === 'ltr' || orientation !== 'horizontal') ? step : -step, animated);\n                },\n                scrollCombined({\n                    step,\n                    offset,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        const currentElementIndex = calculateCurrentElementIndex(step > 0 ? 'next' : 'prev');\n                        const nextItem = currentElementIndex + step;\n                        scrollToGalleryItem(getItems(), nextItem, { animated, extraOffset: offset, overflow });\n                    } else if (offset) {\n                        scrollOffset(offset, {\n                            overflow,\n                            animated\n                        });\n                    }\n                },\n                scrollToItemId(itemId, animated) {\n                    const targetItems = items\n                        .map((it, index) => it.json.id === itemId ? index : undefined)\n                        .filter(it => it !== undefined);\n\n                    if (targetItems.length === 1) {\n                        scrollToGalleryItem(getItems(), targetItems[0], { animated });\n                    } else if (!targetItems.length) {\n                        componentContext.logError(wrapError(new Error('There are no items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    } else {\n                        componentContext.logError(wrapError(new Error('There are several items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    }\n                },\n            });\n        }\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        updateArrowsVisibility();\n\n        if (defaultItem) {\n            const galleryElements = getItems();\n            scrollToGalleryItem(galleryElements, defaultItem, { animated: false });\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        componentContext.detachViewInfo('scrollable');\n    });\n</script>\n\n<svelte:window on:resize={shouldCheckArrows ? updateArrowsVisibilityDebounced : null} />\n\n<Outer\n    cls={genClassName('gallery', css, mods)}\n    {componentContext}\n    {layoutParams}\n    customPaddings={true}\n    customActions=\"gallery\"\n    parentOf={items}\n    {replaceItems}\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                    bind:this={galleryItemsWrappers[rowIndex]}\n                >\n                    {#each itemsRow as item}\n                        {#if item.hasGapBefore}\n                            <div\n                                class={css.gallery__gap}\n                                style:width={orientation === 'horizontal' ? gridGap : undefined}\n                                style:height={orientation !== 'horizontal' ? gridGap : undefined}\n                            ></div>\n                        {/if}\n\n                        <Unknown\n                            componentContext={item.componentContext}\n                            layoutParams={childLayoutParams}\n                        />\n                    {/each}\n\n                    <div class={css.gallery__gap} style={makeStyle(lastPaddingSize)}></div>\n                </div>\n            {/each}\n        </div>\n    </div>\n    {#if orientation === 'horizontal'}\n        {#if hasScrollLeft && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{leftClass || `${css.gallery__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_left}`}\" on:click={() => scroll('left')}>\n                {#if !leftClass}\n                    <svg class={arrowsCss.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            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{rightClass || `${css.gallery__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_right}`}\" on:click={() => scroll('right')}>\n                {#if !rightClass}\n                    <svg class={arrowsCss.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","import type { MaybeMissing } from '../expressions/json';\nimport type { TabDelimiterStyle } from '../types/tabs';\nimport { isPositiveNumber } from './isPositiveNumber';\n\nexport interface TabsDelimiter {\n    url: string;\n    width?: number;\n    height?: number;\n}\n\nexport function correctTabDelimiterStyle(\n    style: MaybeMissing<TabDelimiterStyle> | undefined,\n    defaultValue: TabsDelimiter | undefined\n): TabsDelimiter | undefined {\n    if (!style || !style.image_url || typeof style.image_url !== 'string') {\n        return defaultValue;\n    }\n\n    const res: TabsDelimiter = {\n        url: style.image_url,\n        width: 12,\n        height: 12\n    };\n\n    if (style.width?.type === 'fixed' && isPositiveNumber(style.width.value)) {\n        res.width = style.width.value;\n    }\n    if (style.height?.type === 'fixed' && isPositiveNumber(style.height.value)) {\n        res.height = style.height.value;\n    }\n\n    return res;\n}\n","export const ARROW_LEFT = 37;\nexport const ARROW_RIGHT = 39;\nexport const HOME = 36;\nexport const END = 35;\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 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 { setContext } from 'svelte';\n    import { writable } from 'svelte/store';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../../context/enabled';\n    import Unknown from './Unknown.svelte';\n\n    export let componentContext: ComponentContext;\n    export let layoutParams: LayoutParams | undefined = undefined;\n    export let enabled: boolean;\n\n    const enabledStore = writable(enabled);\n\n    setContext<EnabledCtxValue>(ENABLED_CTX, {\n        isEnabled: enabledStore\n    });\n\n    $: {\n        enabledStore.set(enabled);\n    }\n</script>\n\n<Unknown\n    {componentContext}\n    {layoutParams}\n/>\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n    import { writable } from 'svelte/store';\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, TabsTitleAnimationType } from '../../types/tabs';\n    import type { Action, Overflow } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import type { TabItem } from '../../types/tabs';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { DivBaseData } from '../../types/base';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { WrapContentSize } from '../../types/sizes';\n    import { correctTabDelimiterStyle, type TabsDelimiter } from '../../utils/correctTabDelimiterStyle';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\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 { type Coords, getTouchCoords } from '../../utils/getTouchCoords';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { filterEnabledActions } from '../../utils/filterEnabledActions';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { Truthy } from '../../utils/truthy';\n    import { variationSettingsToString } from '../../utils/variationSettings';\n    import { isNumber } from '../../utils/isNumber';\n    import Outer from '../utilities/Outer.svelte';\n    import Actionable from '../utilities/Actionable.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n    import EnabledContext from '../utilities/EnabledContext.svelte';\n\n    export let componentContext: ComponentContext<DivTabsData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    interface ChildInfo {\n        index: number;\n        title: MaybeMissing<string> | undefined;\n        title_click_action?: MaybeMissing<Action> | undefined;\n    }\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    const instId = rootCtx.genId('tabs');\n\n    let hasError = false;\n    let childStore = writable<ChildInfo[]>([]);\n    let childLayoutParams: LayoutParams = {};\n\n    let tabsElem: HTMLElement;\n    let panelsWrapper: HTMLElement;\n    let swiperElem: HTMLElement;\n    let mods: Mods = {};\n\n    let tabFontSize = 12;\n    let tabPaddings = '';\n    let tabLineHeight = '';\n    let tabLetterSpacing = '';\n    let tabBorderRadius = '';\n    let tabActiveFontWeight: number | undefined = undefined;\n    let tabActiveFontFamily = '';\n    let tabActiveFontVariationSettings = '';\n    let tabInactiveFontWeight: number | undefined = undefined;\n    let tabInactiveFontFamily = '';\n    let tabInactiveFontVariationSettings = '';\n    let tabActiveTextColor = '';\n    let tabInactiveTextColor = '';\n    let tabActiveBackground = '';\n    let tabInactiveBackground = '';\n    let tabItemSpacing = 0;\n    let separatorBackground = '';\n    let separatorMargins = '';\n    let titlePadding: EdgeInsets | null = null;\n    let isSwipeInitialized = false;\n    let isAnimated = false;\n    let previousSelected: number | undefined;\n    let showedPanels: (ComponentContext | undefined)[] = [];\n    let visiblePanels: boolean[] = [];\n    let hidePanelsTimeout: number | null = null;\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    let delimitierStyle: TabsDelimiter | undefined;\n    let animationType: TabsTitleAnimationType = 'slide';\n    let animationDuration: number | undefined;\n    let selectedTabStyles: Record<string, string> | undefined;\n    let prevContext: ComponentContext<DivTabsData> | undefined;\n\n    let devapi = process.env.DEVTOOL ? {\n        devapi: {\n            getState() {\n                return selected;\n            },\n            setState(id: number) {\n                return setSelected(id, false, true);\n            }\n        }\n    } : undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        tabFontSize = 12;\n        tabPaddings = '';\n        tabBorderRadius = '';\n        tabActiveFontWeight = undefined;\n        tabActiveFontFamily = '';\n        tabActiveFontVariationSettings = '';\n        tabInactiveFontWeight = undefined;\n        tabInactiveFontFamily = '';\n        tabInactiveFontVariationSettings = '';\n        tabActiveTextColor = '';\n        tabInactiveTextColor = '';\n        tabActiveBackground = '';\n        tabInactiveBackground = '';\n        tabItemSpacing = 0;\n        separatorBackground = '';\n        separatorMargins = '';\n        titlePadding = null;\n        delimitierStyle = undefined;\n        animationType = 'slide';\n        animationDuration = 300;\n        selectedTabStyles = undefined;\n\n        updateSlideAnimation();\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: items = Array.isArray(componentContext.json.items) && componentContext.json.items || [];\n    $: parentOfItems = items.map(it => {\n        return {\n            json: it.div,\n            id: it.div?.id\n        };\n    });\n\n    $: jsonSelectedTab = componentContext.getJsonWithVars(componentContext.json.selected_tab);\n    $: jsonTabStyle = componentContext.getDerivedFromVars(\n        componentContext.json.tab_title_style,\n        undefined,\n        true\n    );\n    $: jsonSeparator = componentContext.getDerivedFromVars(componentContext.json.has_separator);\n    $: jsonSeparatorColor = componentContext.getDerivedFromVars(componentContext.json.separator_color);\n    $: jsonSeparatorPaddings = componentContext.getDerivedFromVars(componentContext.json.separator_paddings);\n    $: jsonSwipeEnabled = componentContext.getDerivedFromVars(\n        componentContext.json.switch_tabs_by_content_swipe_enabled\n    );\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonTitlePaddings = componentContext.getDerivedFromVars(componentContext.json.title_paddings);\n    $: jsonDelimiterStyle = componentContext.getDerivedFromVars(componentContext.json.tab_title_delimiter);\n\n    $: selected = jsonSelectedTab && Number(jsonSelectedTab) || 0;\n\n    $: if (Array.isArray(items) && items.length) {\n        let children: ChildInfo[] = [];\n\n        items.forEach((item, index) => {\n            const part = componentContext.getJsonWithVars({\n                index,\n                title: item.title,\n                title_click_action: item.title_click_action,\n            });\n            if (part.title && typeof part.title === 'string') {\n                children.push(part as ChildInfo);\n            } else {\n                componentContext.logError(wrapError(new Error('Incorrect title for the tab'), {\n                    additional: {\n                        index\n                    }\n                }));\n            }\n        });\n\n        childStore.set(children);\n    } else {\n        childStore.set([]);\n    }\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        if (!componentContext.json.items) {\n            return;\n        }\n\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: componentContext.json.items.map((it, index) => {\n                    return {\n                        ...it,\n                        div: items[index] as DivBaseData\n                    };\n                })\n            }\n        };\n    }\n\n    $: {\n        if (!$childStore?.length) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Incorrect or empty \"items\" prop for div \"tabs\"')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    $: {\n        let newLayoutParams: LayoutParams = {\n            parentContainerOrientation: 'horizontal'\n        };\n\n        if (componentContext.json.width?.type === 'wrap_content') {\n            newLayoutParams.parentHorizontalWrapContent = true;\n        }\n        if (!componentContext.json.height || componentContext.json.height.type === 'wrap_content') {\n            newLayoutParams.parentVerticalWrapContent = true;\n        }\n\n        childLayoutParams = assignIfDifferent(newLayoutParams, childLayoutParams);\n    }\n\n    $: if (!hasError && (selected < 0 || selected >= items.length)) {\n        componentContext.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n            additional: {\n                selected: componentContext.json.selected_tab,\n                length: items.length\n            }\n        }));\n        selected = selected < 0 ? 0 : items.length - 1;\n    }\n\n    $: if (!hasError && !$childStore.some(it => selected === it.index)) {\n        componentContext.logError(wrapError(new Error('Incorrect \"selected_tab\" prop for div \"tabs\"'), {\n            additional: {\n                selected: componentContext.json.selected_tab\n            }\n        }));\n        selected = $childStore[0]?.index || 0;\n    }\n\n    $: tabStyle = $jsonTabStyle || {};\n\n    $: {\n        tabFontSize = correctPositiveNumber(tabStyle.font_size, tabFontSize);\n    }\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($direction === 'ltr' ? paddings.end : paddings.start) || Number(paddings.right) || 0) / tabFontSize * 10,\n                bottom: (Number(paddings.bottom) || 0) / tabFontSize * 10,\n                left: (Number($direction === 'ltr' ? paddings.start : paddings.end) || Number(paddings.left) || 0) / tabFontSize * 10\n            };\n\n            tabPaddings = correctEdgeInserts(adjustedPaddings, $direction, tabPaddings);\n        }\n    }\n\n    $: {\n        const lineHeight = tabStyle.line_height;\n        if (lineHeight !== undefined && isPositiveNumber(lineHeight)) {\n            tabLineHeight = pxToEm(lineHeight / tabFontSize * 10);\n        }\n    }\n\n    $: {\n        const letterSpacing = tabStyle.letter_spacing;\n        if (letterSpacing !== undefined && isNumber(letterSpacing)) {\n            tabLetterSpacing = pxToEm(letterSpacing / tabFontSize * 10);\n        }\n    }\n\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(\n                    tabStyle.corners_radius,\n                    defaultRadius,\n                    tabFontSize,\n                    tabBorderRadius\n                );\n            } else if (isNonNegativeNumber(defaultRadius)) {\n                tabBorderRadius = pxToEm(defaultRadius / tabFontSize * 10);\n            }\n        }\n    }\n\n    $: {\n        tabActiveFontWeight = correctFontWeight(\n            tabStyle.active_font_weight || tabStyle.font_weight,\n            tabStyle.active_font_weight_value,\n            tabActiveFontWeight\n        );\n        if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n            tabActiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n                fontWeight: tabActiveFontWeight || 400\n            });\n        } else {\n            tabActiveFontFamily = '';\n        }\n        tabActiveFontVariationSettings = variationSettingsToString(tabStyle.active_font_variation_settings);\n    }\n\n    $: {\n        tabInactiveFontWeight = correctFontWeight(\n            tabStyle.inactive_font_weight || tabStyle.font_weight,\n            tabStyle.inactive_font_weight_value,\n            tabInactiveFontWeight\n        );\n        if (tabStyle.font_family && typeof tabStyle.font_family === 'string') {\n            tabInactiveFontFamily = rootCtx.typefaceProvider(tabStyle.font_family, {\n                fontWeight: tabInactiveFontWeight || 400\n            });\n        } else {\n            tabInactiveFontFamily = '';\n        }\n        tabInactiveFontVariationSettings = variationSettingsToString(tabStyle.inactive_font_variation_settings);\n    }\n\n    $: {\n        tabActiveTextColor = correctColor(tabStyle.active_text_color, 1, tabActiveTextColor);\n    }\n\n    $: {\n        tabInactiveTextColor = correctColor(tabStyle.inactive_text_color, 1, tabInactiveTextColor);\n    }\n\n    $: {\n        tabActiveBackground = correctColor(tabStyle.active_background_color, 1, tabActiveBackground);\n    }\n\n    $: {\n        tabInactiveBackground = correctColor(tabStyle.inactive_background_color, 1, tabInactiveBackground);\n    }\n\n    $: {\n        tabItemSpacing = correctNonNegativeNumber(tabStyle.item_spacing, tabItemSpacing);\n    }\n\n    $: {\n        if ($jsonSeparator) {\n            if ($jsonSeparatorColor) {\n                separatorBackground = correctColor($jsonSeparatorColor, 1, separatorBackground);\n            }\n            if ($jsonSeparatorPaddings) {\n                separatorMargins = correctEdgeInserts($jsonSeparatorPaddings, $direction, separatorMargins);\n            }\n        }\n    }\n    $: separatorStyle = {\n        background: separatorBackground,\n        margin: separatorMargins\n    };\n\n    $: isSwipeEnabled = typeof $jsonSwipeEnabled === 'undefined' ?\n        true :\n        Boolean($jsonSwipeEnabled);\n\n    $: {\n        titlePadding = correctEdgeInsertsObject($jsonTitlePaddings ? $jsonTitlePaddings : undefined, titlePadding);\n    }\n\n    $: {\n        delimitierStyle = correctTabDelimiterStyle($jsonDelimiterStyle, delimitierStyle);\n    }\n\n    $: if ($jsonTabStyle?.animation_type === 'fade' || $jsonTabStyle?.animation_type === 'none') {\n        animationType = $jsonTabStyle.animation_type;\n    }\n\n    $: if (isNonNegativeNumber($jsonTabStyle?.animation_duration)) {\n        animationDuration = $jsonTabStyle.animation_duration;\n    }\n\n    function updateItems(items: MaybeMissing<TabItem>[]): void {\n        if (hasError) {\n            return;\n        }\n\n        const unusedContexts = new Set(showedPanels.filter(Truthy));\n        const jsonToContextMap = new Map<unknown, ComponentContext>();\n\n        if (prevContext === componentContext) {\n            showedPanels.forEach(context => {\n                if (context) {\n                    jsonToContextMap.set(context.json, context);\n                }\n            });\n        }\n\n        showedPanels = items.map((item, i) => {\n            if ((i === selected || showedPanels[i]) && item?.div) {\n                const found = jsonToContextMap.get(item.div);\n                if (found) {\n                    unusedContexts.delete(found);\n                    return found;\n                }\n\n                return componentContext.produceChildContext(item.div, {\n                    path: i\n                });\n            }\n        });\n        visiblePanels = items.map((_, i) => i === selected);\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n    $: updateItems(items);\n\n    async function setSelected(val: number, focus: boolean, animated: boolean): Promise<void> {\n        previousSelected = selected;\n        selected = val;\n        initTabsSwipe();\n        changeTab(animated);\n\n        updateSlideAnimation();\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 = $childStore?.length;\n        if (!len) {\n            return;\n        }\n        const indices = $childStore.map(it => it.index);\n        const selectedIndex = indices.indexOf(selected);\n\n        let newSelectedIndex = selectedIndex + shift;\n\n        if (newSelectedIndex >= len) {\n            newSelectedIndex = 0;\n        } else if (newSelectedIndex < 0) {\n            newSelectedIndex = len - 1;\n        }\n        const newSelected = indices[newSelectedIndex];\n\n        setSelected(newSelected, focus, true);\n    }\n\n    function selectItem(_event: Event, index: number): boolean {\n        if (selected !== index) {\n            setSelected(index, false, true);\n\n            return false;\n        }\n\n        return true;\n    }\n\n    function changeTab(animated = true): void {\n        isAnimated = animated;\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 ?? selected);\n        const end = around ?\n            Math.min(items.length - 1, selected + 1) :\n            Math.max(selected, previousSelected ?? selected);\n\n        if (!(rootCtx.devtoolCreateHierarchy === 'eager' && process.env.DEVTOOL)) {\n            showedPanels.forEach(componentContext => {\n                componentContext?.destroy();\n            });\n        }\n\n        showedPanels = showedPanels.map((context, index) => {\n            if (context) {\n                return context;\n            }\n            const div = items[index]?.div;\n            if (\n                (\n                    index >= start && index <= end ||\n                    rootCtx.devtoolCreateHierarchy === 'eager' && process.env.DEVTOOL\n                ) &&\n                div\n            ) {\n                return componentContext.produceChildContext(div, {\n                    path: index\n                });\n            }\n            return undefined;\n        });\n        visiblePanels = visiblePanels.map((_, index) => index >= start && index <= end);\n    }\n\n    async function updateWrapperHeight(): Promise<void> {\n        if (componentContext.json.height?.type === 'match_parent') {\n            return;\n        }\n\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    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, true);\n        } else if (event.which === END) {\n            setSelected(items.length - 1, true, 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 ?? selected) * 100}%,0,0)`;\n    }\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            isAnimated = true;\n            // Scroll back to current tab\n            currentTransform = -newSelected * panelsWrapperWidth;\n            updateTransform(-newSelected * 100);\n            hideNonVisiblePanels();\n        } else {\n            setSelected(newSelected, false, true);\n        }\n    }\n\n    function clampIndex(index: number, overflow: Overflow): number {\n        if (index > items.length - 1) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : items.length - 1;\n        }\n        if (index < 0) {\n            return overflow === 'ring' ? nonNegativeModulo(index, items.length) : 0;\n        }\n\n        return index;\n    }\n\n    function updateSlideAnimation(): void {\n        if (animationType !== 'slide') {\n            return;\n        }\n\n        tick().then(() => {\n            const elem = tabsElem?.querySelector<HTMLElement>('.' + css.tabs__item_selected);\n            if (!elem) {\n                return;\n            }\n\n            selectedTabStyles = {\n                left: `${elem.offsetLeft}px`,\n                width: `${elem.offsetWidth}px`,\n                height: `${elem.offsetHeight}px`\n            };\n        });\n    }\n\n    $: if (componentContext.json) {\n        componentContext.detachViewInfo('scrollable');\n\n        if (componentContext.id && !hasError && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('scrollable', {\n                setCurrentItem(item: number, animated: boolean) {\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, false, animated);\n                },\n                setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n                    let previousItem = clampIndex(selected - step, overflow);\n\n                    setSelected(previousItem, false, animated);\n                },\n                setNextItem(step: number, overflow: Overflow, animated: boolean) {\n                    let nextItem = clampIndex(selected + step, overflow);\n\n                    setSelected(nextItem, false, animated);\n                },\n                scrollToStart(animated: boolean) {\n                    setSelected(0, false, animated);\n                },\n                scrollToEnd(animated: boolean) {\n                    setSelected(items.length - 1, false, animated);\n                },\n                scrollCombined({\n                    step,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        setSelected(clampIndex(selected + step, overflow || 'clamp'), false, animated || true);\n                    }\n                },\n                scrollToItemId(itemId, animated) {\n                    const targetItems = items\n                        .map((it, index) => it.div?.id === itemId ? index : undefined)\n                        .filter(it => it !== undefined);\n\n                    if (targetItems.length === 1) {\n                        setSelected(targetItems[0], false, animated);\n                    } else if (!targetItems.length) {\n                        componentContext.logError(wrapError(new Error('There are no items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    } else {\n                        componentContext.logError(wrapError(new Error('There are several items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    }\n                },\n            });\n        }\n    }\n\n    $: mods = {\n        'height-parent': componentContext.json.height?.type === 'match_parent' ? 'yes' : '',\n        'own-height': (componentContext.json.height?.type === 'match_parent' || componentContext.json.height?.type === 'fixed') &&\n            !(items[selected]?.div?.height?.type === 'wrap_content' && (items[selected].div?.height as WrapContentSize).constrained),\n        animation: animationType\n    };\n\n    onMount(() => {\n        updateSlideAnimation();\n\n        if (rootCtx.devtoolCreateHierarchy === 'eager' && process.env.DEVTOOL) {\n            setSelected(selected, false, false);\n        }\n    });\n\n    onDestroy(() => {\n        showedPanels.forEach(componentContext => {\n            componentContext?.destroy();\n        });\n\n        componentContext.detachViewInfo('scrollable');\n    });\n</script>\n\n<svelte:window\n    on:resize={animationType === 'slide' ? updateSlideAnimation : undefined}\n></svelte:window>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('tabs', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customActions=\"tabs\"\n        parentOf={parentOfItems}\n        parentOfSimpleMode={true}\n        {replaceItems}\n        {...devapi}\n    >\n        <!-- svelte-ignore a11y-interactive-supports-focus -->\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, $direction) : ''}\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-font-family={tabActiveFontFamily || ''}\n            style:--divkit-tabs-inactive-font-family={tabInactiveFontFamily || ''}\n            style:--divkit-tabs-active-font-variation-settings={tabActiveFontVariationSettings || ''}\n            style:--divkit-tabs-inactive-font-variation-settings={tabInactiveFontVariationSettings || ''}\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 * 10 / tabFontSize) : ''}\n            style:--divkit-tabs-animation-duration={animationDuration !== undefined ? `${animationDuration}ms` : ''}\n            on:keydown={onTabKeydown}\n        >\n            <div class={css['tabs__items-bg']} aria-hidden=\"true\">\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const isSelected = index === selected}\n\n                    {#if delimitierStyle && index > 0}\n                        <span\n                            class={css.tabs__delimitier}\n                            style:width={delimitierStyle.width ? pxToEm(delimitierStyle.width) : undefined}\n                            style:height={delimitierStyle.height ? pxToEm(delimitierStyle.height) : undefined}\n                        ></span>\n                    {/if}\n\n                    <span\n                        class={genClassName('tabs__item', css, {\n                            selected: isSelected,\n                            actionable: Boolean(item.title_click_action)\n                        })}\n                    >{item.title}</span>\n                {/each}\n\n                {#if animationType === 'slide' && selectedTabStyles}\n                    <div\n                        class={css['tabs__tabs-highlighter']}\n                        style={makeStyle(selectedTabStyles)}\n                    ></div>\n                {/if}\n            </div>\n            <div class={css['tabs__items-text']}>\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const isSelected = index === selected}\n\n                    {#if delimitierStyle && index > 0}\n                        <img\n                            class={css.tabs__delimitier}\n                            alt=\"\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                            src={delimitierStyle.url}\n                            style:width={delimitierStyle.width ? pxToEm(delimitierStyle.width) : undefined}\n                            style:height={delimitierStyle.height ? pxToEm(delimitierStyle.height) : undefined}\n                        />\n                    {/if}\n\n                    <Actionable\n                        {componentContext}\n                        cls={genClassName('tabs__item', css, {\n                            selected: isSelected,\n                            actionable: Boolean(item.title_click_action)\n                        })}\n                        actions={\n                            item.title_click_action && !componentContext.fakeElement ?\n                                [item.title_click_action].filter(filterEnabledActions) :\n                                []\n                        }\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 && !componentContext.fakeElement ? (item.title_click_action ? undefined : '0') : '-1',\n                            'aria-selected': isSelected ? 'true' : 'false'\n                        }}\n                        customAction={componentContext.fakeElement ? null : (event => selectItem(event, index))}\n                    >{item.title}</Actionable>\n                {/each}\n            </div>\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            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            <div\n                class={genClassName('tabs__swiper', css, {\n                    inited: isSwipeInitialized,\n                    animated: isAnimated\n                })}\n                bind:this={swiperElem}\n            >\n                {#each $childStore as item}\n                    {@const index = item.index}\n                    {@const childComponentContext = showedPanels[index]}\n\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 childComponentContext}\n                            <EnabledContext\n                                componentContext={childComponentContext}\n                                layoutParams={childLayoutParams}\n                                enabled={index === selected}\n                            />\n                        {/if}\n                    </div>\n                {/each}\n            </div>\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nexport { identity as linear } from '../internal/index.js';\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t: t < c\n\t\t? ca * t2 - cb * t + cc\n\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\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 { ease } from './easings/ease';\nimport { spring } from './easings/spring';\nimport type { Interpolation } from '../../typings/common';\n\nexport const 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\nexport function getEasing(name: Interpolation): (t: number) => number {\n    return EASING[name];\n}\n","import { cubicInOut } from 'svelte/easing';\nimport type { AnyTransition } from '../types/base';\nimport { isPrefersReducedMotion } from './isPrefersReducedMotion';\nimport { getEasing } from './easing';\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: isPrefersReducedMotion() ? 0 : 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 = getEasing(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 { cubicInOut } from 'svelte/easing';\nimport type { ChangeBoundsTransition } from '../types/base';\nimport { lerp } from './lerp';\nimport { isPrefersReducedMotion } from './isPrefersReducedMotion';\nimport { EASING } from './easing';\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: isPrefersReducedMotion() ? 0 : (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 type { 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","<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 { DivStateData, State } from '../../types/state';\n    import type { AnyTransition, AppearanceTransition, DivBaseData, TransitionChange } from '../../types/base';\n    import type { ChangeBoundsTransition } from '../../types/base';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { STATE_CTX, type StateCtxValue } from '../../context/state';\n    import { calcMaxDuration, inOutTransition } from '../../utils/inOutTransition';\n    import { changeBoundsTransition } from '../../utils/changeBoundsTransition';\n    import { flattenTransition } from '../../utils/flattenTransition';\n    import { genClassName } from '../../utils/genClassName';\n    import { componentFakeAnimation } from '../../utils/componentContext';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivStateData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let hasError = false;\n\n    let animationRoot: HTMLElement | undefined;\n    let transitionChangeBoxes: Map<string, ChildTransitionChangeData> = new Map();\n    let childrenIds = new Set<string>();\n\n    let animationList: (AnimationItemWithMaxDuration | ChangeBoundsItem)[] = [];\n    let childrenWithTransitionIn: ChildWithTransition[] = [];\n    let childrenWithTransitionOut: ChildWithTransition[] = [];\n    let childrenWithTransitionChange: ChildWithTransitionChange[] = [];\n\n    let stateUnregister: (() => void) | undefined;\n    $: stateId = componentContext.json.div_id || componentContext.id;\n    let selectedId: string | undefined;\n    let selectedComponentContext: ComponentContext | undefined;\n    let childContexts: (ComponentContext | undefined)[] | undefined;\n\n    $: jsonDefaultStateId = componentContext.getJsonWithVars(componentContext.json.default_state_id);\n    $: jsonClipToBounds = componentContext.getDerivedFromVars(componentContext.json.clip_to_bounds);\n\n    $: stateVariableName = componentContext.json.state_id_variable;\n    $: stateVariable = stateVariableName ?\n        componentContext.getVariable(stateVariableName, 'string') || rootCtx.awaitGlobalVariable(stateVariableName, 'string', '') :\n        null;\n    let inited = false;\n\n    let devapi = process.env.DEVTOOL ? {\n        devapi: {\n            getState() {\n                return selectedId;\n            },\n            setState(id: string) {\n                return setState(id);\n            }\n        }\n    } : undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        inited = false;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if (stateId) {\n        hasError = false;\n    } else {\n        hasError = true;\n        componentContext.logError(wrapError(new Error('Missing \"id\" prop for div \"state\"')));\n    }\n\n    $: if (componentContext.json) {\n        childrenIds = new Set<string>();\n    }\n\n    $: items = Array.isArray(componentContext.json.states) && componentContext.json.states || [];\n    $: parentOfItems = items.map(it => {\n        return {\n            json: it.div,\n            id: it.div?.id\n        };\n    });\n\n    $: {\n        if (!items?.length) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Empty \"states\" prop for div \"state\"')));\n        } else {\n            hasError = false;\n        }\n    }\n\n    function selectState(selectedState: MaybeMissing<State> | null): void {\n        if (childContexts) {\n            selectedComponentContext = childContexts[items.findIndex(it => it.state_id === selectedState?.state_id)];\n        } else {\n            if (selectedComponentContext) {\n                selectedComponentContext.destroy();\n            }\n            selectedComponentContext = selectedState?.div ? componentContext.produceChildContext(selectedState.div, {\n                path: selectedState.state_id || '<unknown>'\n            }) : undefined;\n        }\n    }\n\n    function replaceItems(newItems: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        const states = componentContext.json.states;\n\n        if (!states) {\n            return;\n        }\n\n        const changed = new Set<string>();\n\n        items = states.map((it, index) => {\n            if (items[index].div !== newItems[index] && it.state_id) {\n                changed.add(it.state_id);\n            }\n\n            return {\n                ...it,\n                div: newItems[index]\n            };\n        });\n\n        componentContext.json = {\n            ...componentContext.json,\n            states: items\n        };\n        if (selectedId && changed.has(selectedId)) {\n            selectState(items.find(it => it.state_id === selectedId) || null);\n        }\n    }\n\n    interface AnimationItem {\n        id: string;\n        json: DivBaseData;\n        componentContextCopy: ComponentContext;\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        id: string;\n        json: DivBaseData;\n        componentContextCopy: ComponentContext;\n        rootBbox: DOMRect;\n        beforeBbox: DOMRect;\n        afterBbox: DOMRect;\n        transition: ChangeBoundsTransition;\n        resolvePromise?: (val?: void) => void;\n        node: HTMLElement;\n    }\n\n    interface ChildWithTransition {\n        json: DivBaseData;\n        parentComponentContext: ComponentContext;\n        transitions: AppearanceTransition;\n        node: HTMLElement;\n        bbox?: DOMRect;\n        resolvePromise?: (val?: void) => void;\n    }\n    interface ChildWithTransitionChange {\n        id: string;\n        json: DivBaseData;\n        parentComponentContext: ComponentContext;\n        transitions: TransitionChange | undefined;\n        node: HTMLElement;\n        resolvePromise?: (val?: void) => void;\n    }\n\n    interface ChildTransitionChangeData {\n        transitions: TransitionChange;\n        rect: DOMRect;\n    }\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, parentComponentContext, transitions, node } = child;\n        json = componentContext.getJsonWithVars(json) as DivBaseData;\n        transitions = componentContext.getJsonWithVars(transitions) as AppearanceTransition;\n\n        const transitionsList: AnyTransition[] = flattenTransition(transitions);\n        const startBbox = child.bbox || node.getBoundingClientRect();\n        const jsonCopy = {\n            ...json,\n            margins: undefined,\n            alpha: haveFadeTransition(transitionsList) ? undefined : json.alpha\n        };\n\n        return {\n            id: parentComponentContext.id || '',\n            json: jsonCopy,\n            componentContextCopy: parentComponentContext.produceChildContext(jsonCopy, {\n                fake: componentFakeAnimation\n            }),\n            elementBbox: startBbox,\n            rootBbox,\n            transitions: transitionsList,\n            alpha: json.alpha,\n            width: startBbox.width,\n            height: startBbox.height,\n            offsetTop: startBbox.top - rootBbox.top,\n            offsetLeft: startBbox.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    async function setState(stateId: string): Promise<ComponentContext | undefined> {\n        if (selectedId === stateId) {\n            return componentContext;\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            if (child.transitions) {\n                transitionChangeBoxes.set(child.id, {\n                    transitions: child.transitions,\n                    rect: child.node.getBoundingClientRect()\n                });\n            }\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            stateVariable?.setValue(selectedId);\n            selectState(newState);\n        } else {\n            componentContext.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.parentComponentContext.id && !wasIds.has(it.parentComponentContext.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.id && !childrenIds.has(it.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 jsonCopy: DivBaseData = {\n                    ...child.json,\n                    margins: undefined,\n                    width: { type: 'match_parent' },\n                    height: { type: 'match_parent' },\n                };\n\n                const saved = transitionChangeBoxes.get(child.id) as ChildTransitionChangeData;\n\n                const res: ChangeBoundsItem = {\n                    id: child.parentComponentContext.id || '',\n                    json: jsonCopy,\n                    componentContextCopy: child.parentComponentContext.produceChildContext(jsonCopy, {\n                        fake: componentFakeAnimation\n                    }),\n                    rootBbox,\n                    beforeBbox: saved.rect,\n                    afterBbox: child.node.getBoundingClientRect(),\n                    node: child.node,\n                    transition: componentContext.getJsonWithVars(\n                        getTransitionChange(saved.transitions)\n                    ) 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        return componentContext;\n    }\n\n    $: if (componentContext.json) {\n        if (stateUnregister) {\n            stateUnregister();\n            stateUnregister = undefined;\n        }\n\n        if (stateId && !componentContext?.fakeElement) {\n            stateUnregister = componentContext.registerState(stateId, setState);\n        }\n    }\n\n    setContext<StateCtxValue>(STATE_CTX, {\n        // eslint-disable-next-line max-params\n        runVisibilityTransition(\n            json: DivBaseData,\n            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement,\n            direction: 'in' | 'out',\n            bbox: DOMRect | undefined\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                    parentComponentContext,\n                    transitions,\n                    node,\n                    bbox\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            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement\n        ) {\n            const item: ChildWithTransition = {\n                json,\n                parentComponentContext,\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            parentComponentContext: ComponentContext,\n            transitions: AppearanceTransition,\n            node: HTMLElement\n        ) {\n            const item: ChildWithTransition = {\n                json,\n                parentComponentContext,\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            parentComponentContext: ComponentContext,\n            transitions: TransitionChange | undefined,\n            node: HTMLElement\n        ) {\n            const id = parentComponentContext.id;\n\n            if (!id) {\n                return Promise.resolve();\n            }\n\n            const item: ChildWithTransitionChange = {\n                id,\n                json,\n                parentComponentContext,\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    function initDefaultState(items: MaybeMissing<State>[]): void {\n        if (inited) {\n            return;\n        }\n        inited = true;\n\n        if (items.length) {\n            if (process.env.DEVTOOL && rootCtx.devtoolCreateHierarchy === 'eager') {\n                childContexts = items.map(it => it?.div ? componentContext.produceChildContext(it.div, {\n                    path: it.state_id || '<unknown>'\n                }) : undefined);\n            }\n\n            const defaultVal = stateVariable?.getValue() || jsonDefaultStateId;\n            if (defaultVal) {\n                selectedId = defaultVal;\n                const selectedState = items.find(it => it.state_id === selectedId) || null;\n                selectState(selectedState);\n                if (!selectedState) {\n                    componentContext.logError(wrapError(new Error('Cannot find state for default_state_id'), {\n                        additional: {\n                            selectedId\n                        }\n                    }));\n                }\n            } else {\n                const selectedState = items[0];\n                selectedId = selectedState.state_id;\n                selectState(selectedState);\n            }\n\n            if (stateVariable) {\n                stateVariable.setValue(selectedId);\n                stateVariable.subscribe(val => {\n                    setState(val);\n                });\n            }\n        }\n    }\n    $: !inited && 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    $: mods = {\n        overflow: ($jsonClipToBounds === false || $jsonClipToBounds === 0) ? 'visible' : undefined\n    };\n\n    onDestroy(() => {\n        if (childContexts) {\n            childContexts.forEach(context => {\n                context?.destroy();\n            });\n        } else if (selectedComponentContext) {\n            selectedComponentContext.destroy();\n        }\n\n        if (stateUnregister) {\n            stateUnregister();\n            stateUnregister = undefined;\n        }\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('state', css, mods)}\n        {componentContext}\n        {layoutParams}\n        parentOf={parentOfItems}\n        parentOfSimpleMode={true}\n        {replaceItems}\n        {...devapi}\n    >\n        {#if process.env.DEVTOOL && childContexts}\n            {#each childContexts as context}\n                {#if context && context !== selectedComponentContext}\n                    <div hidden data-hidden=\"true\">\n                        <Unknown\n                            componentContext={context}\n                        />\n                    </div>\n                {/if}\n            {/each}\n        {/if}\n\n        {#if selectedComponentContext}\n            {#key selectedId}\n                <Unknown\n                    componentContext={selectedComponentContext}\n                />\n            {/key}\n        {/if}\n\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\"\n                        style:top=\"{item.offsetTop}px\"\n                        style:width=\"{item.width}px\"\n                        style:height=\"{item.height}px\"\n                        in:inOutTransition|global={item}\n                        on:introend={() => onOutro(item)}\n                    >\n                        <div class={css['state__animation-child-inner']}>\n                            <Unknown\n                                componentContext={item.componentContextCopy}\n                            />\n                        </div>\n                    </div>\n                {:else}\n                    <div\n                        class={css['state__animation-child']}\n                        in:changeBoundsTransition|global={item}\n                        on:introend={() => onOutro(item)}\n                    >\n                        <div class={css['state__animation-child-inner']}>\n                            <Unknown\n                                componentContext={item.componentContextCopy}\n                            />\n                        </div>\n                    </div>\n                {/if}\n            {/each}\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\" context=\"module\">\n    import type { Mods } from '../../types/general';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n\n    interface ChildInfo {\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n        visibility?: Visibility;\n    }\n\n    const SIZE_MAP: Record<Size['type'], string> = {\n        wrap_content: 'content',\n        fixed: 'fixed',\n        match_parent: 'parent'\n    };\n\n    const DUPLICATES_IN_INFINITE = 2;\n    const WHEEL_THROTTLE = 400;\n    const MIN_SWIPE_DISTANCE = 8;\n\n    function getItemMods(orientation: Orientation, childInfo: {\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n    }): Mods {\n        if (orientation === 'horizontal') {\n            const heightType = childInfo.height?.type || '';\n\n            return {\n                height: heightType in SIZE_MAP ? SIZE_MAP[heightType as Size['type']] : 'content',\n                'height-constrained': childInfo.height?.type === 'wrap_content' ? correctBooleanInt(childInfo.height.constrained, false) : false\n            };\n        }\n\n        const widthType = childInfo.width?.type || '';\n\n        return {\n            width: widthType in SIZE_MAP ? SIZE_MAP[widthType as Size['type']] : 'parent',\n            'width-constrained': childInfo.width?.type === 'wrap_content' ? correctBooleanInt(childInfo.width.constrained, false) : false\n        };\n    }\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n    import { derived, type Readable } from 'svelte/store';\n\n    import css from './Pager.module.css';\n    import rootCss from '../Root.module.css';\n    import arrowsCss from '../utilities/Arrows.module.css';\n\n    import type { DivBaseData, Visibility } 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 { ComponentContext, ComponentKey, PagerRegisterData } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Size } from '../../types/sizes';\n    import { createVariable, type Variable } from '../../expressions/variable';\n    import type { Overflow } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEmWithUnits } from '../../utils/pxToEm';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { correctGeneralOrientation } from '../../utils/correctGeneralOrientation';\n    import { isNonNegativeNumber } from '../../utils/isNonNegativeNumber';\n    import { Truthy } from '../../utils/truthy';\n    import { nonNegativeModulo } from '../../utils/nonNegativeModulo';\n    import { getItemsFromItemBuilder } from '../../utils/itemBuilder';\n    import { constStore } from '../../utils/constStore';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { componentFakePagerDuplicate } from '../../utils/componentContext';\n    import { isDeepEqual } from '../../utils/isDeepEqual';\n    import Outer from '../utilities/Outer.svelte';\n    import Unknown from '../utilities/Unknown.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivPagerData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\n    const instId = rootCtx.genId('pager');\n\n    const leftClass = rootCtx.getCustomization('pagerLeftClass');\n    const rightClass = rootCtx.getCustomization('pagerRightClass');\n\n    const isDesktop = rootCtx.isDesktop;\n\n    let pagerItemsWrapper: HTMLElement;\n    let mounted = false;\n\n    let childStore: Readable<ChildInfo[]>;\n\n    let currentItem = 0;\n    let prevSelectedItem = 0;\n\n    let hasLayoutModeError = false;\n\n    let orientation: Orientation = 'horizontal';\n    let itemSpacing = '0em';\n    let paddingObj: EdgeInsets = {};\n    let padding = '';\n    let autoSizeVal = '';\n    let templateSizeVal = '';\n\n    let childLayoutParams: LayoutParams = {};\n    let crossAxisAlignment: 'start' | 'center' | 'end' = 'start';\n    let scrollAxisAlignment: 'start' | 'center' | 'end' = 'center';\n\n    let items: ComponentContext[] = [];\n    let visibleItemsWithOutDuplicates = 0;\n    let visibleItems: {\n        width?: MaybeMissing<Size>;\n        height?: MaybeMissing<Size>;\n        index: number;\n        componentContext: ComponentContext;\n        duplicate?: boolean;\n    }[] = [];\n    let visibleToAllMap: Record<number, number> = {};\n    let allToVisibleMap: Record<number, number> = {};\n    let prevContext: ComponentContext<DivPagerData> | undefined;\n\n    let registerData: PagerRegisterData | undefined;\n\n    let wheelFired = 0;\n    let infinite = false;\n    let hasDuplicates = false;\n    let animated = false;\n    let shouldClampDuplicates = false;\n    let transform = 0;\n    let transformStr = '';\n    let swipeTs = 0;\n    let cancelPointer: (() => void) | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        paddingObj = {};\n        childLayoutParams = {};\n        crossAxisAlignment = 'start';\n        scrollAxisAlignment = 'center';\n        infinite = false;\n        hasDuplicates = false;\n        shouldClampDuplicates = false;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    // eslint-disable-next-line no-nested-ternary\n    $: jsonItemBuilderData = typeof componentContext.json.item_builder?.data === 'string' ? componentContext.getDerivedFromVars(\n        componentContext.json.item_builder?.data, undefined, true\n    ) : (componentContext.json.item_builder?.data ? constStore(componentContext.json.item_builder.data) : undefined);\n\n    $: jsonLayoutMode = componentContext.getDerivedFromVars(componentContext.json.layout_mode);\n    $: jsonOrientation = componentContext.getDerivedFromVars(componentContext.json.orientation);\n    $: jsonItemSpacing = componentContext.getDerivedFromVars(componentContext.json.item_spacing);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonRestrictParentScroll = componentContext.getDerivedFromVars(componentContext.json.restrict_parent_scroll);\n    $: jsonCrossAxisAlignment = componentContext.getDerivedFromVars(componentContext.json.cross_axis_alignment);\n    $: jsonScrollAxisAlignment = componentContext.getDerivedFromVars(componentContext.json.scroll_axis_alignment);\n    $: jsonInfiniteScroll = componentContext.getDerivedFromVars(componentContext.json.infinite_scroll);\n    $: jsonItemCountVariable = componentContext.json.item_count_variable;\n\n    $: itemCountVariable = jsonItemCountVariable && (componentContext.getVariable(jsonItemCountVariable, 'integer') || rootCtx.awaitGlobalVariable(jsonItemCountVariable, 'integer', 0)) || createVariable('temp', 'integer', 0);\n\n    $: {\n        infinite = correctBooleanInt($jsonInfiniteScroll, infinite);\n    }\n\n    function replaceItems(items: (MaybeMissing<DivBaseData> | undefined)[]): void {\n        componentContext = prevContext = {\n            ...componentContext,\n            json: {\n                ...componentContext.json,\n                items: items.filter(Truthy)\n            }\n        };\n    }\n\n    $: {\n        let newItems: {\n            div: MaybeMissing<DivBaseData>;\n            id?: string | undefined;\n            vars?: Map<string, Variable> | undefined;\n            key: ComponentKey;\n        }[] = [];\n        if (\n            componentContext.json.item_builder &&\n            Array.isArray($jsonItemBuilderData) &&\n            Array.isArray(componentContext.json.item_builder.prototypes)\n        ) {\n            const builder = componentContext.json.item_builder;\n            newItems = getItemsFromItemBuilder($jsonItemBuilderData, rootCtx, componentContext, builder);\n        } else {\n            newItems = (Array.isArray(componentContext.json.items) && componentContext.json.items || [])\n                .map((it, index) => {\n                    return {\n                        div: it,\n                        key: it.id || { index, data: it }\n                    };\n                });\n        }\n\n        const unusedContexts = new Set(items);\n        const keyToContextMap = new Map<unknown, ComponentContext>();\n        let hasDuplicateKeys = false;\n\n        if (prevContext === componentContext) {\n            items.forEach(context => {\n                if (context.key) {\n                    if (typeof context.key === 'string' && keyToContextMap.has(context.key)) {\n                        if (!hasDuplicateKeys) {\n                            hasDuplicateKeys = true;\n                            componentContext.logError(wrapError(new Error('Duplicate key for child elements inside item_builder'), {\n                                additional: {\n                                    key: context.key\n                                }\n                            }));\n                        }\n                    } else {\n                        keyToContextMap.set(\n                            typeof context.key === 'string' ? context.key : context.key.index,\n                            context\n                        );\n                    }\n                }\n            });\n        }\n\n        items = newItems.map((item, index) => {\n            let found = !hasDuplicateKeys && keyToContextMap.get(item.id);\n            let foundByData = keyToContextMap.get(index);\n            if (\n                !found &&\n                !item.id &&\n                typeof item.key === 'object' &&\n                typeof foundByData?.key === 'object' &&\n                isDeepEqual(foundByData.key.data, item.key.data)\n            ) {\n                found = foundByData;\n            }\n            if (found) {\n                unusedContexts.delete(found);\n                return found;\n            }\n\n            return componentContext.produceChildContext(item.div, {\n                path: index,\n                variables: item.vars,\n                id: item.id,\n                key: item.key\n            });\n        });\n\n        for (const ctx of unusedContexts) {\n            ctx.destroy();\n        }\n        prevContext = componentContext;\n    }\n\n    $: {\n        let children: Readable<ChildInfo>[] = [];\n\n        items.forEach(item => {\n            children.push(\n                item.getDerivedFromVars({\n                    width: item.json.width,\n                    height: item.json.height,\n                    visibility: item.json.visibility\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    $: {\n        allToVisibleMap = {};\n        visibleToAllMap = {};\n        visibleItems = $childStore.map((it, index) => {\n            return {\n                width: it.width,\n                height: it.height,\n                index,\n                componentContext: items[index]\n            };\n        }).filter((_it, index) => $childStore[index].visibility !== 'gone');\n\n        visibleItems.forEach((it, index) => {\n            visibleToAllMap[index] = it.index;\n            allToVisibleMap[it.index] = index;\n        });\n\n        visibleItemsWithOutDuplicates = visibleItems.length;\n\n        if (infinite && visibleItems.length >= DUPLICATES_IN_INFINITE) {\n            const firstDuplicates = visibleItems.slice(0, DUPLICATES_IN_INFINITE).map(it => {\n                return {\n                    ...it,\n                    componentContext: it.componentContext.dup(componentFakePagerDuplicate),\n                    duplicate: true\n                };\n            });\n            const lastDuplicates = visibleItems.slice(visibleItems.length - DUPLICATES_IN_INFINITE).map(it => {\n                return {\n                    ...it,\n                    componentContext: it.componentContext.dup(componentFakePagerDuplicate),\n                    duplicate: true\n                };\n            });\n\n            firstDuplicates.forEach((it, index) => {\n                visibleToAllMap[visibleItems.length + index] = it.index;\n            });\n            lastDuplicates.forEach((it, index) => {\n                visibleToAllMap[index - DUPLICATES_IN_INFINITE] = it.index;\n            });\n\n            visibleItems = ([] as typeof visibleItems).concat(lastDuplicates, visibleItems, firstDuplicates);\n            hasDuplicates = true;\n        } else {\n            hasDuplicates = false;\n        }\n\n        resnap();\n    }\n\n    $: {\n        if (!$jsonLayoutMode) {\n            hasLayoutModeError = true;\n            componentContext.logError(wrapError(new Error('Empty \"layout_mode\" prop for div \"pager\"')));\n        } else if ($jsonLayoutMode.type !== 'percentage' && $jsonLayoutMode.type !== 'fixed' && $jsonLayoutMode.type !== 'wrap_content') {\n            hasLayoutModeError = true;\n            componentContext.logError(wrapError(new Error('Incorrect value of \"layout_mode.type\" for div \"pager\"')));\n        } else {\n            hasLayoutModeError = false;\n        }\n    }\n\n    $: {\n        orientation = correctGeneralOrientation($jsonOrientation, orientation);\n    }\n\n    $: {\n        const val = $jsonItemSpacing?.value;\n        if (val && isNonNegativeNumber(val)) {\n            itemSpacing = pxToEmWithUnits(val || 0);\n        }\n    }\n\n    $: {\n        paddingObj = correctEdgeInsertsObject($jsonPaddings, paddingObj);\n        padding = edgeInsertsToCss(paddingObj, $direction);\n    }\n\n    $: gridAutoSizeProp = orientation === 'horizontal' ? 'grid-auto-columns' : 'grid-auto-rows';\n    $: gridTemplateSizeProp = orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n\n    $: if ($jsonScrollAxisAlignment === 'start' || $jsonScrollAxisAlignment === 'center' || $jsonScrollAxisAlignment === 'end') {\n        scrollAxisAlignment = $jsonScrollAxisAlignment;\n\n        resnap();\n    }\n\n    $: {\n        const paddingStart = orientation === 'horizontal' ?\n            pxToEmWithUnits(\n                paddingObj?.start ||\n                ($direction === 'ltr' ? paddingObj?.left : paddingObj?.right) ||\n                0\n            ) :\n            pxToEmWithUnits(\n                paddingObj?.top || 0\n            );\n        const paddingEnd = orientation === 'horizontal' ?\n            pxToEmWithUnits(\n                paddingObj?.end ||\n                ($direction === 'ltr' ? paddingObj?.right : paddingObj?.left) ||\n                0\n            ) :\n            pxToEmWithUnits(\n                paddingObj?.bottom || 0\n            );\n        if ($jsonLayoutMode?.type === 'fixed') {\n            const neighbourPageWidth = $jsonLayoutMode.neighbour_page_width?.value || 0;\n\n            if (scrollAxisAlignment === 'center') {\n                autoSizeVal = `calc(100% + ${paddingStart} + ${paddingEnd} - 2 * ${pxToEmWithUnits(neighbourPageWidth)} - 2 * ${itemSpacing})`;\n            } else if (scrollAxisAlignment === 'start') {\n                autoSizeVal = `calc(100% + ${paddingEnd} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`;\n            } else {\n                autoSizeVal = `calc(100% + ${paddingStart} - ${pxToEmWithUnits(neighbourPageWidth)} - ${itemSpacing})`;\n            }\n            templateSizeVal = '';\n        } else if ($jsonLayoutMode?.type === 'percentage') {\n            let pageWidth = $jsonLayoutMode.page_width?.value;\n            if (typeof pageWidth !== 'number' || pageWidth < 0) {\n                pageWidth = 100;\n            }\n            autoSizeVal = `calc(${(pageWidth / 100).toFixed(2)} * (100% + ${paddingStart} + ${paddingEnd}))`;\n            templateSizeVal = '';\n        } else if ($jsonLayoutMode?.type === 'wrap_content') {\n            autoSizeVal = '';\n            templateSizeVal = visibleItems.map(item => {\n                const size = item[orientation === 'horizontal' ? 'width' : 'height'];\n\n                if (size?.type === 'fixed' || size?.type === 'wrap_content') {\n                    return 'minmax(max-content, auto)';\n                }\n                let val = '100%';\n                if (size?.type === 'match_parent') {\n                    if (isNonNegativeNumber(size.max_size?.value)) {\n                        val = `min(${val}, ${pxToEmWithUnits(size.max_size.value)})`;\n                    }\n                    if (isNonNegativeNumber(size.min_size?.value)) {\n                        val = `max(${val}, ${pxToEmWithUnits(size.min_size.value)})`;\n                    }\n                }\n                return val;\n            }).join(' ');\n        }\n    }\n\n    $: if ($jsonCrossAxisAlignment === 'start' || $jsonCrossAxisAlignment === 'center' || $jsonCrossAxisAlignment === 'end') {\n        crossAxisAlignment = $jsonCrossAxisAlignment;\n\n        childLayoutParams = {\n            [orientation === 'horizontal' ? 'parentVAlign' : 'parentHAlign']: crossAxisAlignment\n        };\n    }\n\n    $: style = {\n        'grid-gap': itemSpacing,\n        padding,\n        [gridAutoSizeProp]: autoSizeVal,\n        [gridTemplateSizeProp]: templateSizeVal,\n        transform: transformStr,\n    };\n\n    $: mods = {\n        animated,\n        clip: rootCtx.pagerChildrenClipEnabled,\n        orientation,\n        'cross-align': crossAxisAlignment,\n        'scroll-align': scrollAxisAlignment\n    };\n\n    $: hasError = hasLayoutModeError;\n\n    $: shouldCheckArrows = $isDesktop && mounted && !hasError;\n\n    $: hasScrollLeft = hasDuplicates || (\n        $direction === 'ltr' ?\n            allToVisibleMap[currentItem] > 0 :\n            allToVisibleMap[currentItem] + 1 < visibleItems.length\n    );\n\n    $: hasScrollRight = hasDuplicates || (\n        $direction === 'ltr' ?\n            allToVisibleMap[currentItem] + 1 < visibleItems.length :\n            allToVisibleMap[currentItem] > 0\n    );\n\n    function pagerDataUpdate(size: number, currentItem: number): void {\n        if (registerData) {\n            registerData.update({\n                instId,\n                currentItem: allToVisibleMap[currentItem],\n                size,\n                scrollToPagerItem(index: number) {\n                    scrollToPagerItem(visibleToAllMap[index]);\n                }\n            });\n        }\n\n        if (itemCountVariable) {\n            itemCountVariable.setValue(size);\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        if (!items[currentItem]) {\n            return;\n        }\n\n        const actions = items[currentItem].json?.selected_actions;\n        if (!actions?.length) {\n            return;\n        }\n        componentContext.execAnyActions(actions);\n    }\n\n    $: pagerDataUpdate(visibleItemsWithOutDuplicates, currentItem);\n\n    $: runSelectedActions(currentItem);\n\n    function getTransformPosition(visibleIndex: number): number {\n        const atStart = hasDuplicates ? false : (visibleIndex === 0);\n        const atEnd = hasDuplicates ? false : (visibleIndex === visibleItems.length - 1);\n\n        const isHorizontal = orientation === 'horizontal';\n        const pagerItem = pagerItemsWrapper.children[\n            visibleIndex + (hasDuplicates ? DUPLICATES_IN_INFINITE : 0)\n        ] as HTMLElement;\n        if (!pagerItem) {\n            return 0;\n        }\n        const elementOffset: keyof HTMLElement = isHorizontal ? 'offsetLeft' : 'offsetTop';\n        const elementSize: keyof HTMLElement = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n        const containerSize = getContainerSize();\n        const startPadding = getStartPadding();\n        const endPadding = getEndPadding();\n        const scrollSize = getScrollSize();\n\n        if (containerSize >= scrollSize + startPadding + endPadding) {\n            return 0;\n        }\n\n        if (atStart) {\n            return 0;\n        } else if (atEnd) {\n            return (containerSize - startPadding - endPadding - scrollSize) * ($direction === 'rtl' ? -1 : 1);\n        }\n\n        if (\n            scrollAxisAlignment === 'start' && $direction === 'ltr' ||\n            scrollAxisAlignment === 'end' && $direction === 'rtl'\n        ) {\n            return -(pagerItem[elementOffset] - startPadding);\n        } else if (\n            scrollAxisAlignment === 'end' && $direction === 'ltr' ||\n            scrollAxisAlignment === 'start' && $direction === 'rtl'\n        ) {\n            return -(pagerItem[elementOffset] + pagerItem[elementSize] - containerSize + endPadding);\n        }\n        return pagerItemsWrapper[elementSize] / 2 - (pagerItem[elementOffset] + pagerItem[elementSize] / 2);\n    }\n\n    function scrollToVisiblePagerItem(visibleIndex: number, isAnimated: boolean): void {\n        if (!pagerItemsWrapper) {\n            return;\n        }\n\n        const position = getTransformPosition(visibleIndex);\n\n        animated = isAnimated;\n        tick().then(() => {\n            transform = position;\n            transformStr = transformToStr(transform);\n            currentItem = visibleToAllMap[visibleIndex] ?? 0;\n\n            shouldClampDuplicates = hasDuplicates &&\n                (visibleIndex < 0 || visibleIndex >= visibleItemsWithOutDuplicates);\n        });\n    }\n\n    function scrollToPagerItem(index: number, isAnimated = true): void {\n        scrollToVisiblePagerItem(allToVisibleMap[index] ?? 0, isAnimated);\n    }\n\n    function transformToStr(transform: number): string {\n        const isHorizontal = orientation === 'horizontal';\n        const transformProp = isHorizontal ? 'translateX' : 'translateY';\n\n        return `${transformProp}(${pxToEmWithUnits(transform)})`;\n    }\n\n    function clampIndex(visibleIndex: number, overflow: Overflow): number {\n        if (\n            hasDuplicates &&\n            visibleIndex >= -DUPLICATES_IN_INFINITE &&\n            visibleIndex < visibleItemsWithOutDuplicates + DUPLICATES_IN_INFINITE\n        ) {\n            return visibleIndex;\n        }\n\n        if (visibleIndex > visibleItems.length - 1) {\n            return overflow === 'ring' ? nonNegativeModulo(visibleIndex, visibleItems.length) : visibleItems.length - 1;\n        }\n        if (visibleIndex < 0) {\n            return overflow === 'ring' ? nonNegativeModulo(visibleIndex, visibleItems.length) : 0;\n        }\n\n        return visibleIndex;\n    }\n\n    function setPreviousItem(step: number, overflow: Overflow, animated: boolean) {\n        const previousItem = clampIndex(allToVisibleMap[currentItem] - step, overflow);\n\n        scrollToVisiblePagerItem(previousItem, animated);\n    }\n\n    function setNextItem(step: number, overflow: Overflow, animated: boolean) {\n        const nextItem = clampIndex(allToVisibleMap[currentItem] + step, overflow);\n\n        scrollToVisiblePagerItem(nextItem, animated);\n    }\n\n    function init(): void {\n        registerData?.destroy();\n        registerData = undefined;\n\n        componentContext.detachViewInfo('scrollable');\n\n        if (!componentContext.fakeElement) {\n            registerData = componentContext.registerPager(componentContext.id || undefined);\n        }\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('scrollable', {\n                setCurrentItem(item: number, animated: boolean) {\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, animated);\n                },\n                setPreviousItem,\n                setNextItem,\n                scrollToStart(animated) {\n                    scrollToPagerItem(visibleItems[hasDuplicates ? DUPLICATES_IN_INFINITE : 0].index, animated);\n                },\n                scrollToEnd(animated) {\n                    scrollToPagerItem(visibleItems[\n                        visibleItems.length - 1 - (hasDuplicates ? DUPLICATES_IN_INFINITE : 0)\n                    ].index, animated);\n                },\n                scrollCombined({\n                    step,\n                    overflow,\n                    animated\n                }) {\n                    if (step) {\n                        scrollToPagerItem(clampIndex(allToVisibleMap[currentItem] + step, overflow || 'clamp'), animated);\n                    }\n                },\n                scrollToItemId(itemId, animated) {\n                    const targetItems = items\n                        .map((it, index) => it.json.id === itemId ? index : undefined)\n                        .filter(it => it !== undefined);\n\n                    if (targetItems.length === 1) {\n                        scrollToPagerItem(targetItems[0], animated);\n                    } else if (!targetItems.length) {\n                        componentContext.logError(wrapError(new Error('There are no items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    } else {\n                        componentContext.logError(wrapError(new Error('There are several items with id'), {\n                            additional: {\n                                id: itemId\n                            }\n                        }));\n                    }\n                },\n            });\n        }\n    }\n\n    $: if (componentContext.json) {\n        const defaultItem = componentContext.getJsonWithVars(componentContext.json.default_item);\n        if (typeof defaultItem === 'number' && defaultItem >= 0 && defaultItem < items.length) {\n            currentItem = prevSelectedItem = defaultItem;\n            pagerDataUpdate(visibleItemsWithOutDuplicates, defaultItem);\n        }\n\n        init();\n    }\n\n    function getStartPadding(): number {\n        const isHorizontal = orientation === 'horizontal';\n\n        if (isHorizontal) {\n            return paddingObj.start ?? ($direction === 'ltr' ? paddingObj.left : paddingObj.right) ?? 0;\n        }\n        return paddingObj.top ?? 0;\n    }\n\n    function getEndPadding(): number {\n        const isHorizontal = orientation === 'horizontal';\n\n        if (isHorizontal) {\n            return paddingObj.end ?? ($direction === 'ltr' ? paddingObj.right : paddingObj.left) ?? 0;\n        }\n        return paddingObj.bottom ?? 0;\n    }\n\n    function getContainerSize(): number {\n        if (!pagerItemsWrapper) {\n            return 0;\n        }\n\n        const isHorizontal = orientation === 'horizontal';\n\n        if (isHorizontal) {\n            return pagerItemsWrapper.parentElement?.offsetWidth || 0;\n        }\n        return pagerItemsWrapper.parentElement?.offsetHeight || 0;\n    }\n\n    function getScrollSize(): number {\n        const isHorizontal = orientation === 'horizontal';\n        const children = Array.from(pagerItemsWrapper.children) as HTMLElement[];\n        const first = children[0].getBoundingClientRect();\n        const last = children[children.length - 1].getBoundingClientRect();\n\n        if (isHorizontal) {\n            if ($direction === 'rtl') {\n                return first.right - last.left;\n            }\n            return last.right - first.left;\n        }\n        return last.bottom - first.top;\n    }\n\n    function onFocus(event: Event): void {\n        const target = event.target;\n        if (!(target instanceof Element) || !pagerItemsWrapper) {\n            return;\n        }\n\n        let node = target;\n\n        while (node.parentElement && node.parentElement !== pagerItemsWrapper) {\n            node = node.parentElement;\n        }\n        if (!node) {\n            return;\n        }\n        const index = Array.from(pagerItemsWrapper.children).indexOf(node);\n        if (index < 0) {\n            return;\n        }\n        const visibleIndex = index - (hasDuplicates ? DUPLICATES_IN_INFINITE : 0);\n\n        scrollToVisiblePagerItem(visibleIndex, true);\n    }\n\n    function onItemsClick(event: MouseEvent): void {\n        if (Date.now() - swipeTs < 300) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n        }\n    }\n\n    function onPointerDown(event: PointerEvent): void {\n        if (!rootCtx.pagerMouseDragEnabled && event.pointerType === 'mouse') {\n            return;\n        }\n\n        const isHorizontal = orientation === 'horizontal';\n        const start = isHorizontal ? event.pageX : event.pageY;\n\n        const startTransform = transform;\n        const containerSize = getContainerSize() - getStartPadding() - getEndPadding();\n        const scrollSize = getScrollSize();\n        const swipeStartTime = Date.now();\n\n        const onPointerMove = (event: PointerEvent) => {\n            const current = isHorizontal ? event.pageX : event.pageY;\n            let newTransform = startTransform + current - start;\n\n            if (!hasDuplicates) {\n                if ($direction === 'rtl') {\n                    if (newTransform < 0) {\n                        newTransform = newTransform * containerSize / (newTransform + containerSize * 3);\n                    } else if (newTransform + containerSize > scrollSize) {\n                        let space = newTransform + containerSize - scrollSize;\n                        space = space * containerSize / (space + containerSize * 3);\n                        newTransform = -containerSize + scrollSize + space;\n                    }\n                } else if ($direction === 'ltr') {\n                    if (newTransform > 0) {\n                        newTransform = newTransform * containerSize / (newTransform + containerSize * 3);\n                    } else if (-newTransform + containerSize > scrollSize) {\n                        let space = -newTransform + containerSize - scrollSize;\n                        space = space * containerSize / (space + containerSize * 3);\n                        newTransform = containerSize - scrollSize - space;\n                    }\n                }\n            }\n\n            transform = newTransform;\n            transformStr = transformToStr(transform);\n\n            event.preventDefault();\n        };\n        const onPointerUp = (event: PointerEvent) => {\n            cancelPointer?.();\n            cancelPointer = undefined;\n\n            // 512px limit for big screens\n            const panelsWrapperWidth = Math.min(512, containerSize);\n            const swipeDist = Math.abs(startTransform - transform);\n            if (swipeDist < MIN_SWIPE_DISTANCE) {\n                scrollToVisiblePagerItem(allToVisibleMap[currentItem], true);\n\n                return;\n            }\n\n            event.preventDefault();\n            swipeTs = Date.now();\n\n            const swipeCoefficient = Math.min(1, (Date.now() - swipeStartTime) / 750);\n            let newCurrent = allToVisibleMap[currentItem];\n            if (swipeDist > (panelsWrapperWidth / 4) * swipeCoefficient) {\n                newCurrent += (startTransform > transform ? 1 : -1) * ($direction === 'rtl' ? -1 : 1);\n            }\n            if (!hasDuplicates) {\n                if (newCurrent >= visibleItems.length) {\n                    newCurrent = visibleItems.length - 1;\n                } else if (newCurrent < 0) {\n                    newCurrent = 0;\n                }\n            }\n\n            scrollToVisiblePagerItem(newCurrent, true);\n        };\n\n        window.addEventListener('pointermove', onPointerMove);\n        window.addEventListener('pointerup', onPointerUp);\n        window.addEventListener('pointercancel', onPointerUp);\n\n        cancelPointer?.();\n        cancelPointer = () => {\n            window.removeEventListener('pointermove', onPointerMove);\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointercancel', onPointerUp);\n        };\n    }\n\n    function onWheel(event: WheelEvent): void {\n        if (!event.deltaX || Math.abs(event.deltaX) < Math.abs(event.deltaY)) {\n            return;\n        }\n\n        const now = Date.now();\n        if (now - wheelFired < WHEEL_THROTTLE) {\n            return;\n        }\n        wheelFired = now;\n\n        const dir = ($direction === 'rtl' ? -1 : 1) * event.deltaX;\n        if (dir > 0) {\n            setNextItem(1, 'clamp', true);\n        } else {\n            setPreviousItem(1, 'clamp', true);\n        }\n    }\n\n    function onTransitionEnd(): void {\n        animated = false;\n\n        if (shouldClampDuplicates) {\n            tick().then(() => {\n                scrollToPagerItem(currentItem, false);\n            });\n        }\n    }\n\n    function resnap(): void {\n        tick().then(() => {\n            scrollToPagerItem(currentItem, false);\n        });\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        if (pagerItemsWrapper) {\n            scrollToPagerItem(currentItem, false);\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        cancelPointer?.();\n\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        componentContext.detachViewInfo('scrollable');\n\n        registerData?.destroy();\n        registerData = undefined;\n    });\n</script>\n\n<svelte:window\n    on:resize={resnap}\n/>\n\n{#if !hasError}\n    <Outer\n        cls={genClassName('pager', css, mods)}\n        {componentContext}\n        {layoutParams}\n        customPaddings={true}\n        parentOf={items}\n        {replaceItems}\n        on:pointerdown={onPointerDown}\n        on:wheel={onWheel}\n    >\n        <!-- svelte-ignore a11y-click-events-have-key-events -->\n        <!-- svelte-ignore a11y-no-static-element-interactions -->\n        <div\n            class=\"{css.pager__items} {$jsonRestrictParentScroll ? rootCss['root_restrict-scroll'] : ''}\"\n            style={makeStyle(style)}\n            bind:this={pagerItemsWrapper}\n            on:transitionend={onTransitionEnd}\n            on:focus|capture={onFocus}\n            on:click|capture={onItemsClick}\n        >\n            {#each visibleItems as item}\n                <div\n                    class={genClassName('pager__item', css, getItemMods(orientation, item))}\n                    role=\"tabpanel\"\n                    id=\"{instId}-panel-{item.index}\"\n                    aria-labelledby=\"{instId}-tab-{item.index}\"\n                >\n                    <Unknown\n                        componentContext={item.componentContext}\n                        layoutParams={childLayoutParams}\n                    />\n                </div>\n            {/each}\n        </div>\n\n        {#if hasScrollLeft && shouldCheckArrows}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{leftClass || `${css.pager__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_left}`}\" on:click={() => ($direction === 'ltr' ? setPreviousItem : setNextItem)(1, 'clamp', true)}>\n                {#if !leftClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['pager__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            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div class=\"{rightClass || `${css.pager__arrow} ${arrowsCss.arrow} ${arrowsCss.arrow_right}`}\" on:click={() => ($direction === 'ltr' ? setNextItem : setPreviousItem)(1, 'clamp', true)}>\n                {#if !rightClass}\n                    <svg class={arrowsCss.arrow__icon} xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                        <path class={css['pager__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    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\" context=\"module\">\n    const AVAIL_SHAPES = [\n        'rounded_rectangle',\n        'circle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Indicator.module.css';\n\n    import type { DivIndicatorData } from '../../types/indicator';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { DivIndicatorDefaultItemPlacement, DivIndicatorStretchItemPlacement } from '../../types/indicator';\n    import type { ComponentContext, PagerData } from '../../types/componentContext';\n\n    import Outer from '../utilities/Outer.svelte';\n    import { ROOT_CTX, type 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, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { correctColor } from '../../utils/correctColor';\n\n    export let componentContext: ComponentContext<DivIndicatorData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const direction = rootCtx.direction;\n\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    let placement: 'default' | 'stretch' = 'default';\n    let spaceBetweenCenters = 15;\n    let maxVisibleItems = 10;\n    let itemSpacing = 5;\n\n    let scroller: HTMLElement;\n    let indicatorItemsWrapper: HTMLElement;\n    let pagerData: PagerData;\n    let pagerDataUnsubscribe: (() => void) | undefined;\n    let mounted = false;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        placement = 'default';\n        spaceBetweenCenters = 15;\n        maxVisibleItems = 10;\n        itemSpacing = 5;\n        activeStyle = {\n            width: 13,\n            height: 13,\n            borderRadius: 6.5,\n            background: '#ffdc60'\n        };\n        inactiveStyle = {\n            width: 10,\n            height: 10,\n            borderRadius: 5,\n            background: '#33919cb5'\n        };\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: if (origJson && mounted) {\n        init();\n    }\n\n    $: jsonShape = componentContext.getDerivedFromVars(componentContext.json.shape);\n    $: jsonActiveItemColor = componentContext.getDerivedFromVars(componentContext.json.active_item_color);\n    $: jsonInactiveItemColor = componentContext.getDerivedFromVars(componentContext.json.inactive_item_color);\n    $: jsonActiveItemSize = componentContext.getDerivedFromVars(componentContext.json.active_item_size);\n    $: jsonActiveShape = componentContext.getDerivedFromVars(componentContext.json.active_shape);\n    $: jsonInactiveShape = componentContext.getDerivedFromVars(componentContext.json.inactive_shape);\n    $: jsonSpaceBetweenCenters = componentContext.getDerivedFromVars(componentContext.json.space_between_centers);\n    $: jsonItemsPlacement = componentContext.getDerivedFromVars(componentContext.json.items_placement);\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    $: 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    async function onPagerDataUpdate(data: PagerData): Promise<void> {\n        pagerData = data;\n\n        await tick();\n\n        if (indicatorItemsWrapper) {\n            // if not destroyed yet\n\n            const elem = indicatorItemsWrapper.children[pagerData.currentItem] as HTMLElement;\n\n            if (elem) {\n                const currentItemOffsetLeft = elem.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        direction: $direction,\n        visible: pagerData?.size > 1\n    };\n\n    function init() {\n        pagerDataUnsubscribe?.();\n        pagerDataUnsubscribe = undefined;\n\n        const pagerId = componentContext.json.pager_id;\n        pagerDataUnsubscribe = componentContext.listenPager(pagerId, onPagerDataUpdate);\n    }\n\n    onMount(() => {\n        mounted = true;\n    });\n\n    onDestroy(() => {\n        mounted = false;\n        pagerDataUnsubscribe?.();\n        pagerDataUnsubscribe = undefined;\n    });\n</script>\n\n<Outer\n    cls={genClassName('indicator', css, mods)}\n    {componentContext}\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","import type { SliderTextStyle } from '../types/slider';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { TypefaceProvider } from '../../typings/common';\nimport { isPositiveNumber } from './isPositiveNumber';\nimport { correctColor } from './correctColor';\nimport { pxToEm } from './pxToEm';\nimport { correctFontWeight } from './correctFontWeight';\nimport { variationSettingsToString } from './variationSettings';\n\nexport interface TransformedSliderTextStyle {\n    fontSize: string;\n    fontWeight: number | undefined;\n    fontFamily?: string;\n    fontVariationSettings?: string;\n    textColor: string;\n    offset?: {\n        x: number;\n        y: number;\n    };\n}\n\nexport function correctSliderTextStyle(\n    textStyle: MaybeMissing<SliderTextStyle> | undefined,\n    typefaceProvider: TypefaceProvider,\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 = correctFontWeight(textStyle.font_weight, textStyle.font_weight_value, undefined);\n    const fontVariationSettings = variationSettingsToString(textStyle.font_variation_settings) || undefined;\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            fontVariationSettings,\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        if (textStyle.font_family && typeof textStyle.font_family === 'string') {\n            res.fontFamily = typefaceProvider(textStyle.font_family, {\n                fontWeight\n            }) || '';\n        }\n\n        return res;\n    }\n}\n","export function clamp(val: number | bigint, min: number, max: number): number {\n    return Math.max(min, Math.min(max, Number(val)));\n}\n","const MAX_TICKS = 1000;\n\nfunction round(x: number, align: number, start: number): number {\n    return start + Math.ceil((x - start) / align) * align;\n}\n\nexport function fillTicks(from: number, to: number, minValue: number, maxValue: number, inside: boolean): number[] {\n    const res: number[] = [];\n\n    const scale = maxValue - minValue < MAX_TICKS ? 1 : Math.ceil((maxValue - minValue) / MAX_TICKS);\n    const startOffset = round(minValue, scale, minValue) - minValue;\n\n    if (inside) {\n        for (let i = round(from, scale, minValue) - startOffset; i < to + scale; i += scale) {\n            res.push((Math.min(i, to) - minValue) / (maxValue - minValue));\n        }\n    } else {\n        for (let i = minValue; i < from; i += scale) {\n            res.push((i - minValue) / (maxValue - minValue));\n        }\n        for (let i = round(to + 1, scale, minValue); i < maxValue + scale; i += scale) {\n            res.push((Math.min(i, maxValue) - minValue) / (maxValue - minValue));\n        }\n    }\n\n    return res;\n}\n","<script lang=\"ts\" context=\"module\">\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 = [\n        'rounded_rectangle',\n        'circle'\n    ];\n\n    const TRACK_SHAPES = [\n        'rounded_rectangle'\n    ];\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Slider.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSliderData, SliderRange } from '../../types/slider';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { Direction } from '../../../typings/common';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctDrawableStyle, type DrawableStyle } from '../../utils/correctDrawableStyles';\n    import { pxToEm, pxToEmWithUnits } from '../../utils/pxToEm';\n    import { correctSliderTextStyle, type 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 { createVariable } from '../../expressions/variable';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import { fillTicks } from '../../utils/slider';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n  import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n  import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n\n    export let componentContext: ComponentContext<DivSliderData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let input: HTMLInputElement;\n    let tracksInner: HTMLElement;\n    let switchedTracks = false;\n    let minValue = 0;\n    let maxValue = 100;\n    let thumbStyle = DEFAULT_DRAWABLE_STYLE;\n    let thumbSecondaryStyle = thumbStyle;\n    let trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n    let trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n    let markActiveTicks: number[];\n    let markActiveStyle: DrawableStyle | null = null;\n    let markInactiveTicks: number[];\n    let markInactiveStyle: DrawableStyle | null = null;\n    let textStyle: TransformedSliderTextStyle | undefined = undefined;\n    let textSecondaryStyle: TransformedSliderTextStyle | undefined = textStyle;\n    let description = '';\n    let secondaryDescription = '';\n    let selfPadding: EdgeInsets | null = null;\n    let isEnabled = true;\n    let hasError = false;\n    let renderRanges: {\n        left: string;\n        right: string;\n        height: string;\n        borderRadius: string;\n        background: string;\n        boxShadow: string;\n    }[] = [];\n    let cleanupPress: (() => void) | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        thumbStyle = DEFAULT_DRAWABLE_STYLE;\n        thumbSecondaryStyle = thumbStyle;\n        trackInactiveStyle = DEFAULT_DRAWABLE_STYLE;\n        trackActiveStyle = DEFAULT_DRAWABLE_STYLE;\n        markActiveStyle = null;\n        markInactiveStyle = null;\n        textStyle = undefined;\n        textSecondaryStyle = undefined;\n        description = '';\n        isEnabled = true;\n        secondaryDescription = '';\n        selfPadding = null;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: firstVariable = componentContext.json.thumb_value_variable;\n    $: secondVariable = componentContext.json.thumb_secondary_value_variable;\n\n    $: valueVariable = firstVariable && (componentContext.getVariable(firstVariable, 'integer') || rootCtx.awaitGlobalVariable(firstVariable, 'integer', 0)) || createVariable('temp', 'integer', 0);\n    $: value2Variable = secondVariable && (componentContext.getVariable(secondVariable, 'integer') || rootCtx.awaitGlobalVariable(secondVariable, 'integer', 0)) || createVariable('temp', 'integer', 0);\n\n    $: jsonMinValue = componentContext.getDerivedFromVars(componentContext.json.min_value);\n    $: jsonMaxValue = componentContext.getDerivedFromVars(componentContext.json.max_value);\n    $: jsonThumbStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_style);\n    $: jsonThumbSecondaryStyle = componentContext.getDerivedFromVars(componentContext.json.thumb_secondary_style);\n    $: jsonTrackInactiveStyle = componentContext.getDerivedFromVars(componentContext.json.track_inactive_style);\n    $: jsonTrackActiveStyle = componentContext.getDerivedFromVars(componentContext.json.track_active_style);\n    $: jsonMarkActiveStyle = componentContext.getDerivedFromVars(componentContext.json.tick_mark_active_style);\n    $: jsonMarkInactiveStyle = componentContext.getDerivedFromVars(componentContext.json.tick_mark_inactive_style);\n    $: jsonTextStyle = componentContext.getDerivedFromVars(\n        componentContext.json.thumb_text_style,\n        undefined,\n        true,\n        1\n    );\n    $: jsonSecondaryTextStyle = componentContext.getDerivedFromVars(\n        componentContext.json.thumb_secondary_text_style,\n        undefined,\n        true,\n        1\n    );\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonSecondaryAccessibility = componentContext.getDerivedFromVars(\n        componentContext.json.secondary_value_accessibility\n    );\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonRanges = componentContext.getDerivedFromVars(componentContext.json.ranges);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n\n    $: {\n        minValue = correctNumber($jsonMinValue, minValue);\n        maxValue = correctNumber($jsonMaxValue, maxValue);\n    }\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    $: {\n        thumbStyle = correctDrawableStyle($jsonThumbStyle, THUMB_MARK_SHAPES, thumbStyle);\n    }\n\n    $: {\n        thumbSecondaryStyle = correctDrawableStyle($jsonThumbSecondaryStyle, THUMB_MARK_SHAPES, thumbStyle);\n    }\n\n    $: {\n        trackInactiveStyle = correctDrawableStyle($jsonTrackInactiveStyle, TRACK_SHAPES, trackInactiveStyle);\n    }\n\n    $: {\n        trackActiveStyle = correctDrawableStyle($jsonTrackActiveStyle, TRACK_SHAPES, trackActiveStyle);\n    }\n\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), minValue, maxValue, true) :\n            fillTicks(minValue, value, minValue, maxValue, true);\n    } else {\n        markActiveTicks = [];\n    }\n\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), minValue, maxValue, false) :\n            fillTicks(value + 1, maxValue, minValue, maxValue, true);\n    } else {\n        markInactiveTicks = [];\n    }\n\n    $: {\n        textStyle = correctSliderTextStyle($jsonTextStyle, rootCtx.typefaceProvider, textStyle);\n    }\n\n    $: {\n        textSecondaryStyle = correctSliderTextStyle($jsonSecondaryTextStyle, rootCtx.typefaceProvider, textStyle);\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for slider'), {\n            level: 'warn'\n        }));\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: if ($jsonSecondaryAccessibility?.description) {\n        secondaryDescription = composeAccessibilityDescription($jsonSecondaryAccessibility);\n    } else if (secondVariable) {\n        componentContext.logError(wrapError(new Error('Missing second accessibility \"description\" for slider'), {\n            level: 'warn'\n        }));\n    }\n\n    $: {\n        selfPadding = correctEdgeInsertsObject($jsonPaddings, selfPadding);\n    }\n\n    $: padding = edgeInsertsToCss(selfPadding || {}, $direction);\n    $: paddingTop = pxToEmWithUnits(selfPadding?.top || 0);\n    $: paddingRight = pxToEmWithUnits(($direction === 'rtl' ? selfPadding?.start : selfPadding?.end) || selfPadding?.right || 0);\n    $: paddingBottom = pxToEmWithUnits(selfPadding?.bottom || 0);\n    $: paddingLeft = pxToEmWithUnits(($direction === 'ltr' ? selfPadding?.start : selfPadding?.end) || selfPadding?.left || 0);\n\n    $: {\n        let newHasError = false;\n\n        if (actionCtx.hasAction()) {\n            componentContext.logError(wrapError(new Error('Cannot show \"slider\" inside component with an action or inside accessibility mode=exclude')));\n            newHasError = true;\n        } else if (thumbStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.logError(wrapError(new Error('Missing \"thumb_style\" in slider')));\n            newHasError = true;\n        } else if (trackActiveStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.logError(wrapError(new Error('Missing \"track_active_style\" in slider')));\n            newHasError = true;\n        } else if (trackInactiveStyle === DEFAULT_DRAWABLE_STYLE) {\n            componentContext.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    $: trackActiveOffset = trackSecondaryPart !== undefined ? Math.min(value, value2) : minValue;\n    $: trackActivePart = trackSecondaryPart !== undefined ? Math.abs(value2 - value) : value - minValue;\n\n    function updateRenderList({\n        direction,\n        minValue,\n        maxValue,\n        trackActiveOffset,\n        trackActivePart,\n        trackInactiveStyle,\n        trackActiveStyle,\n        ranges = []\n    }: {\n        direction: Direction;\n        minValue: number;\n        maxValue: number;\n        trackActiveOffset: number;\n        trackActivePart: number;\n        trackInactiveStyle: DrawableStyle;\n        trackActiveStyle: DrawableStyle;\n        ranges: MaybeMissing<SliderRange[]> | undefined;\n    }) {\n        const parts: {\n            left: number;\n            right: number;\n            totalLeft: number;\n            totalRight: number;\n            leftMargin: number;\n            rightMargin: number;\n            style: DrawableStyle;\n        }[] = [];\n\n        const pushParts = (type: 'active' | 'inactive', from: number, to: number) => {\n            const push = (start: number, end: number, style: DrawableStyle, margins?: EdgeInsets) => {\n                const intersectionStart = Math.max(start, from);\n                const intersectionEnd = Math.min(end, to);\n                if (intersectionEnd - intersectionStart > 0) {\n                    const leftMargin = margins ? (margins[direction === 'ltr' ? 'start' : 'end'] ?? margins.left ?? 0) : 0;\n                    const rightMargin = margins ? (margins[direction === 'ltr' ? 'end' : 'start'] ?? margins.right ?? 0) : 0;\n\n                    parts.push({\n                        left: start,\n                        right: end,\n                        totalLeft: from,\n                        totalRight: to,\n                        leftMargin,\n                        rightMargin,\n                        style\n                    });\n                }\n            };\n\n            if (!ranges[0] || (ranges[0].start ?? minValue) > from) {\n                push(from, ranges[0] ? (ranges[0].start ?? minValue) : to, type === 'inactive' ? trackInactiveStyle : trackActiveStyle);\n            }\n            ranges.forEach((range, index) => {\n                const selfStyle = range[type === 'inactive' ? 'track_inactive_style' : 'track_active_style'];\n                const fallbackStyle = type === 'inactive' ? trackInactiveStyle : trackActiveStyle;\n                const style = selfStyle ?\n                    correctDrawableStyle(selfStyle, TRACK_SHAPES, DEFAULT_DRAWABLE_STYLE) :\n                    fallbackStyle;\n                const prev = ranges[index - 1];\n                const next = ranges[index + 1];\n\n                const start = range.start ?? prev?.end ?? from;\n                const end = range.end ?? next?.start ?? to;\n\n                push(start, end, style, range.margins);\n            });\n            if (ranges[ranges.length - 1] && (ranges[ranges.length - 1].end ?? maxValue) < to) {\n                const start = ranges[ranges.length - 1].end ?? maxValue;\n                push(start, to, type === 'inactive' ? trackInactiveStyle : trackActiveStyle);\n            }\n        };\n        pushParts('inactive', minValue, maxValue);\n        pushParts('active', trackActiveOffset, trackActiveOffset + trackActivePart);\n\n        const total = maxValue - minValue;\n        renderRanges = parts.map(part => {\n            let rangeLeft = `${(part.left - minValue) * 100 / total}%`;\n            if (part.leftMargin) {\n                rangeLeft = `calc(${rangeLeft} + ${pxToEmWithUnits(part.leftMargin)})`;\n            }\n            let left;\n            if (part.totalLeft < part.left) {\n                left = rangeLeft;\n            } else if (part.leftMargin) {\n                left = `max(${(part.totalLeft - minValue) * 100 / total}%, ${rangeLeft})`;\n            } else {\n                left = `${(Math.max(part.totalLeft, part.left) - minValue) * 100 / total}%`;\n            }\n            let rangeRight = `${(1 - (part.right - minValue) / total) * 100}%`;\n            if (part.rightMargin) {\n                rangeRight = `calc(${rangeRight} + ${pxToEmWithUnits(part.rightMargin)})`;\n            }\n            let right;\n            if (part.totalRight > part.right) {\n                right = rangeRight;\n            } else if (part.rightMargin) {\n                right = `max(${(1 - (part.totalRight - minValue) / total) * 100}%, ${rangeRight})`;\n            } else {\n                right = `${(1 - (Math.max(part.totalRight, part.right) - minValue) / total) * 100}%`;\n            }\n\n            return {\n                left,\n                right,\n                height: pxToEm(part.style.height),\n                borderRadius: pxToEm(part.style.borderRadius),\n                background: part.style.background,\n                boxShadow: part.style.boxShadow || ''\n            };\n        });\n    }\n\n    $: updateRenderList({\n        direction: $direction,\n        minValue,\n        maxValue,\n        trackActiveOffset,\n        trackActivePart,\n        trackInactiveStyle,\n        trackActiveStyle,\n        ranges: $jsonRanges\n    });\n\n    $: stl = {\n        '--divkit-slider-padding-top': paddingTop,\n        '--divkit-slider-padding-right': paddingRight,\n        '--divkit-slider-padding-bottom': paddingBottom,\n        '--divkit-slider-padding-left': paddingLeft,\n\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        direction: $direction\n    };\n\n    function onSecondMousedown(event: MouseEvent | TouchEvent): void {\n        if (!isEnabled) {\n            return;\n        }\n\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        let part = (pageX - rangeBbox.left) / rangeBbox.width;\n        if ($direction === 'rtl') {\n            part = 1 - part;\n        }\n        const newVal = minValue + (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    function onPointerDown(): void {\n        const json = componentContext.json;\n        if (!json.press_start_actions && !json.press_end_actions || actionCtx.hasAction()) {\n            return;\n        }\n\n        if (Array.isArray(json.press_start_actions)) {\n            componentContext.execAnyActions(json.press_start_actions, {\n                node: input\n            });\n        }\n\n        cleanupPress?.();\n        cleanupPress = () => {\n            window.removeEventListener('pointerup', onPointerUp);\n            window.removeEventListener('pointercancel', onPointerUp);\n        };\n        const onPointerUp = () => {\n            if (Array.isArray(json.press_end_actions)) {\n                componentContext.execAnyActions(json.press_end_actions, {\n                    node: input\n                });\n            }\n        };\n        window.addEventListener('pointerup', onPointerUp, { passive: true });\n        window.addEventListener('pointercancel', onPointerUp, { passive: true });\n    }\n\n    $: if (componentContext.json && input) {\n        componentContext.detachViewInfo('focus');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('focus', () => {\n                if (input) {\n                    input.focus();\n                }\n            });\n        }\n    }\n\n    onDestroy(() => {\n        cleanupPress?.();\n        cleanupPress = undefined;\n        componentContext.detachViewInfo('focus');\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        cls={genClassName('slider', css, mods)}\n        style={stl}\n        customDescription\n        customActions=\"slider\"\n        hasInnerFocusable\n        {componentContext}\n        {layoutParams}\n    >\n        <div class={css['slider__tracks-wrapper']}>\n            <div class={css['slider__tracks-inner']} bind:this={tracksInner}>\n                <div class={css['slider__tracks-ranges'] + ($direction === 'rtl' ? ' ' + css['slider__tracks-ranges_rtl'] : '')}>\n                    {#each renderRanges as range}\n                        <div\n                            class={css.slider__track}\n                            style:left={range.left}\n                            style:right={range.right}\n                            style:height={range.height}\n                            style:border-radius={range.borderRadius}\n                            style:background={range.background}\n                            style:box-shadow={range.boxShadow}\n                        ></div>\n                    {/each}\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:font-family={textStyle?.fontFamily || ''}\n                                style:font-variation-settings={textStyle?.fontVariationSettings || ''}\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:font-family={textSecondaryStyle?.fontFamily || ''}\n                                    style:font-variation-settings={textSecondaryStyle?.fontVariationSettings || ''}\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                    disabled={!isEnabled}\n                    aria-label={description}\n                    on:input={event => onInputChange(event, 'first')}\n                    on:focus={focusHandler}\n                    on:blur={blurHandler}\n                    on:pointerdown={onPointerDown}\n                    bind:this={input}\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                        disabled={!isEnabled}\n                        aria-label={secondaryDescription}\n                        on:input={event => onInputChange(event, 'second')}\n                        on:mousedown={secondVariable ? onSecondMousedown : null}\n                        on:touchstart={secondVariable ? onSecondMousedown : null}\n                        on:focus={focusHandler}\n                        on:blur={blurHandler}\n                        on:pointerdown={onPointerDown}\n                    >\n                {/if}\n            </div>\n        </div>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/TextDiff.kt\n\nexport interface TextDiff {\n    start: number;\n    added: number;\n    removed: number;\n}\n\nexport function textDiff(left: string, right: string): TextDiff {\n    if (left === right) {\n        return {\n            start: left.length,\n            added: 0,\n            removed: 0\n        };\n    }\n\n    if (left.length > right.length) {\n        const diff = textDiff(right, left);\n\n        return {\n            start: diff.start,\n            added: diff.removed,\n            removed: diff.added\n        };\n    }\n\n    let leftIndex = 0;\n    let rightIndex = right.length - 1;\n    const lengthDiff = right.length - left.length;\n\n    while (\n        leftIndex < rightIndex && leftIndex < left.length &&\n        left[leftIndex] === right[leftIndex]\n    ) {\n        ++leftIndex;\n    }\n\n    while (\n        rightIndex - lengthDiff >= leftIndex &&\n        left[rightIndex - lengthDiff] === right[rightIndex]\n    ) {\n        --rightIndex;\n    }\n\n    ++rightIndex;\n\n    return {\n        start: leftIndex,\n        added: rightIndex - leftIndex,\n        removed: rightIndex - leftIndex - lengthDiff\n    };\n}\n","// Replicate from Android: client/android/div/src/main/java/com/yandex/div/core/util/mask/BaseInputMask.kt\n\nimport type { WrappedError } from '../wrapError';\nimport { wrapError } from '../wrapError';\nimport { type TextDiff, textDiff } from '../textDiff';\n\nexport interface MaskKey {\n    key: string;\n    filter?: string | undefined;\n    placeholder: string;\n}\n\nexport interface MaskData {\n    pattern: string;\n    decoding: MaskKey[];\n    alwaysVisible: boolean;\n}\n\ninterface MaskChar {\n    char: string | null;\n}\n\nexport class MaskCharStatic implements MaskChar {\n    constructor(public char: string) {}\n}\n\nexport class MaskCharDynamic implements MaskChar {\n    constructor(public char: string | null, public filter: RegExp, public placeholder: string) {}\n}\n\nexport abstract class BaseInputMask {\n    protected maskData: MaskData;\n    protected filters: Map<string, RegExp> = new Map();\n    protected destructedValue: MaskChar[] = [];\n    protected cursorPos = 0;\n\n    constructor(initialMaskData: MaskData) {\n        this.maskData = initialMaskData;\n        this.updateMaskData(initialMaskData);\n    }\n\n    get cursorPosition(): number {\n        return this.cursorPos;\n    }\n\n    get rawValue(): string {\n        return this.collectValueRange(0, this.destructedValue.length - 1);\n    }\n\n    get value(): string {\n        let str = '';\n\n        for (let i = 0; i < this.destructedValue.length; ++i) {\n            const char = this.destructedValue[i];\n\n            if (char instanceof MaskCharStatic) {\n                str += char.char;\n            } else if (char instanceof MaskCharDynamic) {\n                if (char.char) {\n                    str += char.char;\n                } else if (this.maskData.alwaysVisible) {\n                    str += char.placeholder;\n                } else {\n                    break;\n                }\n            }\n        }\n\n        return str;\n    }\n\n    protected firstEmptyHolderIndex(): number {\n        const index = this.destructedValue.findIndex(maskChar => {\n            return maskChar instanceof MaskCharDynamic && !maskChar.char;\n        });\n\n        if (index !== -1) {\n            return index;\n        }\n\n        return this.destructedValue.length;\n    }\n\n    abstract onException(exception: WrappedError): void;\n\n    updateMaskData(newMaskData: MaskData, restoreValue = true): void {\n        const previousRawValue = this.maskData !== newMaskData && restoreValue ? this.rawValue : null;\n\n        this.filters = new Map();\n        this.maskData = newMaskData;\n\n        this.maskData.decoding.forEach(maskKey => {\n            if (maskKey.filter) {\n                try {\n                    const regexp = new RegExp(maskKey.filter);\n                    this.filters.set(maskKey.key, regexp);\n                } catch (err) {\n                    this.onException(wrapError(err as Error, {\n                        level: 'error',\n                        additional: {\n                            key: maskKey.key\n                        }\n                    }));\n                }\n            }\n        });\n\n        this.destructedValue = this.maskData.pattern.split('').map(maskChar => {\n            const mappingItem = this.maskData.decoding.find(it => it.key === maskChar);\n\n            if (mappingItem) {\n                return new MaskCharDynamic(\n                    null,\n                    this.filters.get(mappingItem.key) as RegExp,\n                    mappingItem.placeholder\n                );\n            }\n\n            return new MaskCharStatic(maskChar);\n        });\n\n        if (previousRawValue !== null) {\n            this.overrideRawValue(previousRawValue);\n        }\n    }\n\n    overrideRawValue(newRawValue: string): void {\n        this.clearRange(0, this.destructedValue.length);\n\n        this.replaceChars(newRawValue, 0);\n\n        this.cursorPos = Math.min(this.cursorPos, this.value.length);\n    }\n\n    applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n\n        if (position !== undefined) {\n            diff.start = Math.max(0, position - diff.added);\n        }\n\n        const tailStart = this.replaceBodyTail(diff, newValue);\n\n        this.calculateCursorPosition(diff, tailStart);\n    }\n\n    protected replaceBodyTail(diff: TextDiff, newValue: string): number {\n        const body = this.buildBodySubstring(diff, newValue);\n        const tail = this.buildTailSubstring(diff);\n\n        this.cleanup(diff);\n\n        const fehi = this.firstEmptyHolderIndex();\n\n        const maxShift = tail ? this.calculateMaxShift(tail, fehi) : undefined;\n\n        this.replaceChars(body, fehi, maxShift);\n\n        const tailStart = this.firstEmptyHolderIndex();\n\n        this.replaceChars(tail, tailStart);\n\n        return tailStart;\n    }\n\n    protected buildBodySubstring(diff: TextDiff, newValue: string): string {\n        return newValue.substring(diff.start, diff.start + diff.added);\n    }\n\n    protected buildTailSubstring(diff: TextDiff): string {\n        return this.collectValueRange(\n            diff.start + diff.removed,\n            this.destructedValue.length - 1\n        );\n    }\n\n    protected calculateMaxShift(str: string, start: number): number {\n        if (this.filters.size <= 1) {\n            let dynamicLeft = 0;\n            let index = start;\n\n            while (index < this.destructedValue.length) {\n                if (this.destructedValue[index] instanceof MaskCharDynamic) {\n                    ++dynamicLeft;\n                }\n                ++index;\n            }\n\n            return Math.max(0, dynamicLeft - str.length);\n        }\n\n        const initialInsertableSubstring = this.calculateInsertableSubstring(str, start);\n\n        let index = 0;\n\n        while (\n            index < this.destructedValue.length &&\n                initialInsertableSubstring === this.calculateInsertableSubstring(str, start + index)\n        ) {\n            ++index;\n        }\n\n        return Math.max(0, index - 1);\n    }\n\n    protected cleanup(diff: TextDiff): void {\n        if (diff.added === 0 && diff.removed === 1) {\n            let index = diff.start;\n\n            while (index >= 0) {\n                const maskChar = this.destructedValue[index];\n\n                if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n                    maskChar.char = null;\n\n                    break;\n                } else {\n                    --index;\n                }\n            }\n        }\n\n        this.clearRange(diff.start, this.destructedValue.length);\n    }\n\n    protected clearRange(start: number, end: number): void {\n        let index = start;\n\n        while (index < end && index < this.destructedValue.length) {\n            const holder = this.destructedValue[index];\n\n            if (holder instanceof MaskCharDynamic) {\n                holder.char = null;\n            }\n\n            ++index;\n        }\n    }\n\n    protected calculateCursorPosition(diff: TextDiff, tailStart: number) {\n        const fehi = this.firstEmptyHolderIndex();\n\n        let positionByDiff: number;\n        if (diff.start < fehi) {\n            positionByDiff = Math.min(this.firstHolderAfter(tailStart), this.value.length);\n        } else {\n            positionByDiff = fehi;\n        }\n\n        this.cursorPos = positionByDiff;\n    }\n\n    protected calculateInsertableSubstring(substring: string, start: number): string {\n        let str = '';\n\n        let index = start;\n\n        const moveToAndGetNextHolderFilter: () => RegExp | undefined = () => {\n            while (index < this.destructedValue.length && !(this.destructedValue[index] instanceof MaskCharDynamic)) {\n                ++index;\n            }\n\n            return (this.destructedValue[index] as MaskCharDynamic)?.filter;\n        };\n\n        substring.split('').forEach(char => {\n            const maskCharFilter = moveToAndGetNextHolderFilter();\n\n            if (maskCharFilter?.test(char)) {\n                str += char;\n                ++index;\n            }\n        });\n\n        return str;\n    }\n\n    protected collectValueRange(start: number, end: number): string {\n        let str = '';\n\n        let index = start;\n\n        while (index <= end) {\n            const maskChar = this.destructedValue[index];\n\n            if (maskChar instanceof MaskCharDynamic && maskChar.char !== null) {\n                str += maskChar.char;\n            }\n\n            ++index;\n        }\n\n        return str;\n    }\n\n    protected replaceChars(substring: string, start: number, count?: number): void {\n        let trimmedSubstring = this.calculateInsertableSubstring(substring, start);\n        if (count !== undefined) {\n            trimmedSubstring = trimmedSubstring.substring(0, count);\n        }\n\n        let index = start;\n\n        let insertableCharIndex = 0;\n\n        while (index < this.destructedValue.length && insertableCharIndex < trimmedSubstring.length) {\n            const maskChar = this.destructedValue[index];\n            const char = trimmedSubstring[insertableCharIndex];\n\n            if (maskChar instanceof MaskCharDynamic) {\n                maskChar.char = char;\n\n                ++insertableCharIndex;\n            }\n\n            ++index;\n        }\n    }\n\n    protected firstHolderAfter(start: number): number {\n        let index = start;\n\n        while (index < this.destructedValue.length) {\n            const holder = this.destructedValue[index];\n\n            if (holder instanceof MaskCharDynamic) {\n                break;\n            } else {\n                ++index;\n            }\n        }\n\n        return index;\n    }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, type MaskData } from './baseInputMask';\n\nexport class FixedLengthInputMask extends BaseInputMask {\n    constructor(initialMaskData: MaskData, private readonly logError: LogError) {\n        super(initialMaskData);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n","import type { LogError } from './wrapError';\nimport type { MaskData } from './mask/baseInputMask';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { FixedLengthInputMask as FixedLengthInputMaskType } from '../types/input';\nimport { FixedLengthInputMask } from './mask/fixedLengthInputMask';\n\nexport function updateFixedMask(\n    mask: MaybeMissing<FixedLengthInputMaskType>,\n    logError: LogError,\n    oldValue?: FixedLengthInputMask | null\n): FixedLengthInputMask | null {\n    if (\n        typeof mask.pattern === 'string' && Array.isArray(mask.pattern_elements) &&\n        mask.pattern_elements.every(it => it.key && typeof it.key === 'string')\n    ) {\n        const maskData: MaskData = {\n            pattern: mask.pattern,\n            alwaysVisible: Boolean(mask.always_visible),\n            decoding: mask.pattern_elements.map(it => ({\n                key: it.key as string,\n                filter: it.regex && typeof it.regex === 'string' ? it.regex : undefined,\n                placeholder: it.placeholder && typeof it.placeholder === 'string' ? it.placeholder : '_'\n            }))\n        };\n\n        if (oldValue) {\n            oldValue.updateMaskData(maskData);\n            return oldValue;\n        }\n        return new FixedLengthInputMask(maskData, logError);\n    }\n\n    return oldValue || null;\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask } from './baseInputMask';\nimport { type TextDiff, textDiff } from '../textDiff';\nimport { wrapError } from '../wrapError';\n\nexport class CurrencyInputMask extends BaseInputMask {\n    protected currencyFormatter = new Intl.NumberFormat();\n    protected decimalSeparator = '.';\n    protected localeDigits: Record<string, string> = {};\n    protected trimZeroRegExp = new RegExp('');\n\n    constructor(locale: string | undefined = undefined, private readonly logError: LogError) {\n        super({\n            pattern: '',\n            decoding: [],\n            alwaysVisible: false\n        });\n        this.initFormatter(locale);\n    }\n\n    updateCurrencyParams(locale?: string) {\n        const currentValue = this.parseFormat(this.rawValue) || 0;\n        this.initFormatter(locale);\n\n        const newValue = currentValue.toString().replace('.', this.decimalSeparator);\n\n        this.applyChangeFrom(newValue);\n    }\n\n    protected initFormatter(locale?: string): void {\n        try {\n            this.currencyFormatter = new Intl.NumberFormat(locale, {\n                minimumFractionDigits: 2,\n                maximumFractionDigits: 2\n            });\n            this.decimalSeparator = this.currencyFormatter.format(0)[1];\n            this.localeDigits = new Array(10).fill('').reduce((acc, _, i) => {\n                acc[i] = this.currencyFormatter.format(i)[0];\n                return acc;\n            }, {});\n            const nonZeroDigits = Object.keys(this.localeDigits).filter(d => d !== '0');\n            const nonZeroDigitsString = nonZeroDigits.map(it => this.localeDigits[it]).join('|');\n            this.trimZeroRegExp = new RegExp(`^${this.localeDigits['0']}+(?=${nonZeroDigitsString})`);\n        } catch (err) {\n            this.onException(wrapError(err as Error, {\n                level: 'error',\n                additional: {\n                    locale\n                }\n            }));\n        }\n    }\n\n    protected invalidateMaskDataForFormatted(forValue: number): void {\n        const formatted = this.currencyFormatter.format(forValue);\n        const pattern = this.formatPattern(formatted);\n        const decoding = [{\n            key: '#',\n            filter: `[${[...Object.values(this.localeDigits)].join('')}]`,\n            placeholder: this.localeDigits[0]\n        }, {\n            key: this.decimalSeparator,\n            filter: `[${this.decimalSeparator}]`,\n            placeholder: this.decimalSeparator\n        }];\n\n        this.updateMaskData({\n            pattern,\n            decoding,\n            alwaysVisible: this.maskData.alwaysVisible\n        }, false);\n    }\n\n    overrideRawValue(newRawValue: string): void {\n        const parsed = this.parseFormat(newRawValue) || 0;\n\n        this.invalidateMaskDataForFormatted(parsed);\n\n        super.overrideRawValue(newRawValue);\n    }\n\n    applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n        const oldSeparatorIndex = this.value.lastIndexOf(this.decimalSeparator);\n        const newSeparatorIndex = newValue.lastIndexOf(this.decimalSeparator);\n        const needInvalidateMask =\n            oldSeparatorIndex !== newSeparatorIndex ||\n            (oldSeparatorIndex === -1 && newSeparatorIndex === -1);\n        const clearedValue = this.validFormat(newValue, diff);\n\n        this.cleanup(diff);\n\n        const rawValue = this.parseFormat(clearedValue) || 0;\n\n        if (needInvalidateMask) {\n            this.invalidateMaskDataForFormatted(rawValue);\n        }\n\n        this.replaceChars(clearedValue, 0);\n\n        if (this.value.length > diff.start && !this.isDigit(this.value[diff.start])) {\n            this.cursorPos = position ?? this.cursorPosition;\n        } else {\n            this.cursorPos = Math.abs(this.value.length - (newValue.length - (position ?? this.cursorPosition)));\n        }\n    }\n\n    protected parseFormat(value: string): number {\n        return parseFloat(\n            value.replace(/./g, char => {\n                const localeDigit = this.localeDigits[char];\n\n                if (localeDigit) {\n                    return localeDigit;\n                }\n\n                if (char === this.decimalSeparator) {\n                    return '.';\n                }\n\n                return '';\n            })\n        );\n    }\n\n    protected formatPattern(pattern: string): string {\n        let result = '';\n\n        for (const char of pattern) {\n            result += this.isDigit(char) ? '#' : char;\n        }\n\n        return result;\n    }\n\n    protected validFormat(value: string, diff: TextDiff): string {\n        if (!value) {\n            return '';\n        }\n\n        let separatorOutOfDiffIndex = -1;\n        let index = 0;\n\n        while (index < value.length) {\n            if (value[index] === this.decimalSeparator && !this.inDiff(diff, index)) {\n                separatorOutOfDiffIndex = index;\n                break;\n            }\n\n            index++;\n        }\n\n        let replaceCharInDiff = -1;\n\n        if (diff.added === 1 && diff.removed === 0 && [',', '.'].includes(value[diff.start])) {\n            replaceCharInDiff = diff.start;\n        }\n\n        const maxSeparatorOffset = this.currencyFormatter.resolvedOptions().maximumFractionDigits || 0;\n        let leftToInsert = maxSeparatorOffset;\n\n        if (separatorOutOfDiffIndex !== -1) {\n            index = separatorOutOfDiffIndex;\n\n            while (index < value.length) {\n                if (this.isDigit(value[index]) && !this.inDiff(diff, index)) {\n                    leftToInsert--;\n                }\n                index++;\n            }\n        } else {\n            let oldSeparatorLeft = false;\n\n            for (let i = 0; i < value.length; i++) {\n                const char = value[i];\n                if (char === this.decimalSeparator) {\n                    oldSeparatorLeft = true;\n                } else if (!this.inDiff(diff, i) && oldSeparatorLeft && this.isDigit(char)) {\n                    leftToInsert--;\n                }\n            }\n        }\n\n        const containsSeparator = value.includes(this.decimalSeparator) || replaceCharInDiff !== -1;\n        const result: string[] = [];\n\n        index = value.length - 1;\n        let separatorInserted = false;\n\n        while (index >= 0) {\n            const char = value[index];\n            const canInsertSeparator = result.length <= maxSeparatorOffset;\n\n            if (this.isDigit(char)) {\n                if (this.inDiff(diff, index) && !separatorInserted && containsSeparator) {\n                    if (leftToInsert > 0) {\n                        result.push(char);\n                        leftToInsert--;\n                    }\n                } else {\n                    result.push(char);\n                }\n            } else if (canInsertSeparator && separatorOutOfDiffIndex === -1 && index === replaceCharInDiff) {\n                result.push(this.decimalSeparator);\n                separatorInserted = true;\n            } else if (\n                canInsertSeparator &&\n                char === this.decimalSeparator &&\n                (separatorOutOfDiffIndex === index || separatorOutOfDiffIndex === -1)\n            ) {\n                result.push(this.decimalSeparator);\n\n                separatorInserted = true;\n                separatorOutOfDiffIndex = index;\n            }\n\n            index--;\n        }\n\n        return result.reverse().join('').replace(this.trimZeroRegExp, '');\n    }\n\n    protected inDiff(diff: TextDiff, index: number): boolean {\n        return diff.start <= index && index < diff.start + diff.added;\n    }\n\n    protected isDigit(char: string): boolean {\n        return Boolean(this.localeDigits[char]);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n","import type { MaybeMissing } from '../expressions/json';\nimport type { CurrencyInputMask as CurrencyInputMaskType } from '../types/input';\nimport { CurrencyInputMask } from './mask/currencyInputMask';\nimport type { LogError } from './wrapError';\n\nexport function updateCurrencyMask(\n    mask: MaybeMissing<CurrencyInputMaskType>,\n    logError: LogError,\n    oldValue?: CurrencyInputMask | null\n): CurrencyInputMask | null {\n    if (oldValue) {\n        oldValue.updateCurrencyParams(mask.locale);\n        return oldValue;\n    }\n    return new CurrencyInputMask(mask.locale, logError);\n}\n","const STRING_NODE_TYPE = 3;\n\nfunction countNodeChars(node: Node): number {\n    const text = node.textContent;\n    let res = 0;\n\n    if (typeof text === 'string') {\n        res += text.length;\n        if (node instanceof HTMLElement && (node.tagName === 'DIV' || node.tagName === 'BR')) {\n            ++res;\n        }\n    }\n\n    return res;\n}\n\nexport function calcSelectionOffset(container: HTMLElement, type: 'start' | 'end'): number {\n    try {\n        let res = 0;\n        const sel = window.getSelection();\n        if (!sel) {\n            return 0;\n        }\n        const range = sel.getRangeAt(0);\n        let node: Node | undefined;\n        if (range) {\n            res += type === 'end' ? range.endOffset : range.startOffset;\n            node = type === 'end' ? range.endContainer : range.startContainer;\n        }\n\n        if (node instanceof HTMLElement) {\n            let sum = 0;\n            for (let i = 0, len = Math.min(res, node.childNodes.length); i < len; ++i) {\n                sum += countNodeChars(node.childNodes[i]);\n            }\n            res = sum;\n        }\n\n        while (node && node !== container) {\n            const parent = node.parentNode;\n            if (!parent) {\n                return 0;\n            }\n            const index = Array.from(parent.childNodes).indexOf(node as ChildNode);\n            for (let i = 0; i < index; ++i) {\n                const child = parent.childNodes[i];\n                res += countNodeChars(child);\n            }\n            if (node instanceof HTMLElement &&\n                (\n                    node.tagName === 'DIV' && parent.childNodes[index - 1]?.nodeType === STRING_NODE_TYPE ||\n                    node.tagName === 'BR'\n                )\n            ) {\n                ++res;\n            }\n            node = parent;\n        }\n\n        return res;\n    } catch (err) {\n        return 0;\n    }\n}\n\nexport function setSelectionOffset(node: Node, range: Range, type: 'start' | 'end', offset: number): void {\n    if (node.nodeType === STRING_NODE_TYPE) {\n        try {\n            if (type === 'start') {\n                range.setStart(node, offset);\n            } else {\n                range.setEnd(node, offset);\n            }\n        } catch (err) {}\n        return;\n    }\n    if (node instanceof HTMLElement && node.tagName === 'BR') {\n        try {\n            const sel = window.getSelection();\n            if (sel) {\n                sel.removeAllRanges();\n                const range = document.createRange();\n                const parent = node.parentNode as Node;\n                const index = Array.from(parent.childNodes).indexOf(node) + 1;\n                range.setStart(parent, index);\n                range.setEnd(parent, index);\n                sel.addRange(range);\n            }\n        } catch (err) {}\n        return;\n    }\n\n    for (let i = 0, len = node.childNodes.length; i < len; ++i) {\n        const child = node.childNodes[i];\n        const count = countNodeChars(child);\n        if (offset <= count) {\n            setSelectionOffset(child, range, type, offset);\n            return;\n        }\n        offset -= count;\n    }\n}\n","import type { LogError, WrappedError } from '../wrapError';\nimport { BaseInputMask, MaskCharDynamic } from './baseInputMask';\nimport { textDiff } from '../textDiff';\nimport data from '../../../../../../shared_data/phone-masks.json';\n\nconst UNIVERSAL_MASK = '000000000000000';\nconst COUNTRY_CODE_END_MARKER = '*';\nconst EXTRA_NUMBERS = '00';\n\nconst DEFAULT_DECODING = [{\n    key: '0',\n    filter: '\\\\d',\n    placeholder: '_'\n}];\n\nexport class PhoneInputMask extends BaseInputMask {\n    protected decimalSeparator = '.';\n    protected localeDigits: Record<string, string> = {};\n    protected trimZeroRegExp = new RegExp('');\n\n    constructor(private readonly logError: LogError) {\n        super({\n            pattern: phoneMaskPattern(''),\n            decoding: DEFAULT_DECODING,\n            alwaysVisible: false\n        });\n    }\n\n    override overrideRawValue(newRawValue: string): void {\n        this.tryInvalidateMaskDataWith(newRawValue);\n        super.overrideRawValue(newRawValue);\n    }\n\n    override applyChangeFrom(newValue: string, position?: number): void {\n        const diff = textDiff(this.value, newValue);\n\n        if (position !== undefined) {\n            diff.start = Math.max(0, position - diff.added);\n        }\n\n        const oldRawValue = this.rawValue;\n\n        const tailStart = this.replaceBodyTail(diff, newValue);\n\n        const newRawValue = this.rawValue;\n        const newPattern = this.newMaskPatternFor(newRawValue);\n\n        if (newPattern == null) {\n            this.calculateCursorPosition(diff, tailStart);\n            return;\n        }\n\n        this.updateMaskDataWith(newPattern);\n        this.replaceChars(newRawValue, 0);\n\n        const rawValueDiff = textDiff(oldRawValue, newRawValue);\n        const dynamicDestination = rawValueDiff.start + rawValueDiff.added;\n        this.calculateCursorPositionBy(dynamicDestination);\n    }\n\n    private calculateCursorPositionBy(dynamicDestination: number): void {\n        let index = 0;\n        let dynamicCounter = 0;\n\n        while (index < this.destructedValue.length && dynamicCounter < dynamicDestination) {\n            if (this.destructedValue[index++] instanceof MaskCharDynamic) {\n                dynamicCounter++;\n            }\n        }\n\n        this.cursorPos = this.firstHolderAfter(index);\n    }\n\n    private tryInvalidateMaskDataWith(rawValue: string): void {\n        const newPattern = this.newMaskPatternFor(rawValue);\n        if (newPattern) {\n            this.updateMaskDataWith(newPattern);\n        }\n    }\n\n    private newMaskPatternFor(rawValue: string): string | null {\n        const newPattern = phoneMaskPattern(rawValue);\n        const currentPattern = this.maskData.pattern;\n        return newPattern !== currentPattern ? newPattern : null;\n    }\n\n    private updateMaskDataWith(newPattern: string) {\n        return this.updateMaskData({\n            pattern: newPattern,\n            decoding: DEFAULT_DECODING,\n            alwaysVisible: this.maskData.alwaysVisible\n        }, false);\n    }\n\n    onException(exception: WrappedError) {\n        this.logError(exception);\n    }\n}\n\nfunction resolveObject(obj: any) {\n    if ('$ref' in obj) {\n        return data.constants[obj.$ref.split('/').pop() as keyof typeof data.constants];\n    }\n    return obj;\n}\n\nfunction phoneMaskPattern(val: string): string {\n    if (!val) {\n        return UNIVERSAL_MASK;\n    }\n    let current: any = data.properties.value.default_value;\n    let countryCodeInd = 0;\n    while (!('value' in current)) {\n        if (countryCodeInd >= val.length) {\n            current = resolveObject(current[COUNTRY_CODE_END_MARKER]);\n            break;\n        }\n        const digit = val[countryCodeInd++];\n        current = resolveObject(current[digit in current ? digit : COUNTRY_CODE_END_MARKER]);\n    }\n    return current.value + EXTRA_NUMBERS;\n}\n","import { PhoneInputMask } from './mask/phoneInputMask';\nimport type { LogError } from './wrapError';\n\nexport function updatePhoneMask(\n    logError: LogError,\n    oldValue?: PhoneInputMask | null\n): PhoneInputMask | null {\n    if (oldValue) {\n        return oldValue;\n    }\n    return new PhoneInputMask(logError);\n}\n","<script lang=\"ts\" context=\"module\">\n    const isSupportInputMode = typeof document !== 'undefined' && 'inputMode' in document.createElement('input');\n\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        password: 'password'\n    };\n\n    const ALLOWED_BLOCKED_MULTILINE_KEYS = new Set([\n        'Backspace',\n        'Delete',\n        'Tab',\n        'ArrowLeft',\n        'ArrowRight',\n        'ArrowUp',\n        'ArrowDown',\n        'Home',\n        'End',\n        'Control',\n        'Shift',\n        'Alt',\n        'Command',\n        'Meta',\n        'Escape',\n    ]);\n</script>\n\n<script lang=\"ts\">\n    import { getContext, onDestroy, onMount, tick } from 'svelte';\n    import type { HTMLAttributes } from 'svelte/elements';\n\n    import css from './Input.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivInputData, InputEnterKeyType, KeyboardType } from '../../types/input';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import type { FixedLengthInputMask } from '../../utils/mask/fixedLengthInputMask';\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { InputMask } from '../../types/input';\n    import type { AlignmentHorizontal } from '../../types/alignment';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { PhoneInputMask } from '../../utils/mask/phoneInputMask';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\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 { createVariable } from '../../expressions/variable';\n    import { correctNonNegativeNumber } from '../../utils/correctNonNegativeNumber';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { updateFixedMask } from '../../utils/updateFixedMask';\n    import { BaseInputMask } from '../../utils/mask/baseInputMask';\n    import { updateCurrencyMask } from '../../utils/updateCurrencyMask';\n    import { CurrencyInputMask } from '../../utils/mask/currencyInputMask';\n    import { correctAlignmentHorizontal } from '../../utils/correctAlignmentHorizontal';\n    import { type AlignmentVerticalMapped, correctAlignmentVertical } from '../../utils/correctAlignmentVertical';\n    import { calcSelectionOffset, setSelectionOffset } from '../../utils/contenteditable';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { updatePhoneMask } from '../../utils/updatePhoneMask';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import { variationSettingsToString } from '../../utils/variationSettings';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivInputData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let input: HTMLInputElement | HTMLSpanElement;\n    let isPressed = false;\n    let inputMask: BaseInputMask | null = null;\n    let value = '';\n    let contentEditableValue = '';\n    let hasError = false;\n    let hintColor = '';\n    let fontSize = 12;\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let fontVariationSettings = '';\n    let lineHeight: number | undefined = undefined;\n    let letterSpacing = '';\n    let textColor = '#000';\n    let highlightColor = '';\n    let alignmentHorizontal: AlignmentHorizontal = 'start';\n    let alignmentVertical: AlignmentVerticalMapped = 'center';\n    let keyboardType = 'multi_line_text';\n    let inputType = 'text';\n    let inputMode: HTMLAttributes<HTMLInputElement>['inputmode'] = undefined;\n    let maxHeight = '';\n    let selfPadding: EdgeInsets | null = null;\n    let padding = '';\n    let verticalPadding = '';\n    let description = '';\n    let isEnabled = true;\n    let maxLength = Infinity;\n    let autocapitalization: 'characters' | 'off' | 'on' | 'none' | 'sentences' | 'words' = 'off';\n    let enterKeyType: InputEnterKeyType = 'default';\n    let describedBy = '';\n    let mounted = false;\n    let validatorsFirstRun = true;\n    let selectionStart = 0;\n    let selectionEnd = 0;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        hintColor = '';\n        fontSize = 12;\n        fontWeight = undefined;\n        fontFamily = '';\n        fontVariationSettings = '';\n        lineHeight = undefined;\n        textColor = '#000';\n        highlightColor = '';\n        alignmentHorizontal = 'left';\n        alignmentVertical = 'center';\n        keyboardType = 'multi_line_text';\n        inputType = 'text';\n        inputMode = undefined;\n        isEnabled = true;\n        maxLength = Infinity;\n        autocapitalization = 'off';\n        enterKeyType = 'default';\n        describedBy = '';\n        selectionStart = 0;\n        selectionEnd = 0;\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.text_variable;\n    $: rawVariable = componentContext.json.mask?.raw_text_variable;\n\n    $: valueVariable = variable && (componentContext.getVariable(variable, 'string') || rootCtx.awaitGlobalVariable(variable, 'string', '')) || createVariable('temp', 'string', '');\n    $: rawValueVariable = rawVariable && (componentContext.getVariable(rawVariable, 'string') || rootCtx.awaitGlobalVariable(rawVariable, 'string', '')) || createVariable('temp', 'string', '');\n\n    $: jsonHintText = componentContext.getDerivedFromVars(componentContext.json.hint_text);\n    $: jsonHintColor = componentContext.getDerivedFromVars(componentContext.json.hint_color);\n    $: jsonFontSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonFontWeight = componentContext.getDerivedFromVars(componentContext.json.font_weight);\n    $: jsonFontWeightValue = componentContext.getDerivedFromVars(componentContext.json.font_weight_value);\n    $: jsonFontFamily = componentContext.getDerivedFromVars(componentContext.json.font_family);\n    $: jsonFontVariationSettings = componentContext.getDerivedFromVars(\n        componentContext.json.font_variation_settings,\n        undefined,\n        true,\n        0\n    );\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonLetterSpacing = componentContext.getDerivedFromVars(componentContext.json.letter_spacing);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonHighlightColor = componentContext.getDerivedFromVars(componentContext.json.highlight_color);\n    $: jsonAlignmentHorizontal = componentContext.getDerivedFromVars(componentContext.json.text_alignment_horizontal);\n    $: jsonAlignmentVertical = componentContext.getDerivedFromVars(componentContext.json.text_alignment_vertical);\n    $: jsonKeyboardType = componentContext.getDerivedFromVars(componentContext.json.keyboard_type);\n    $: jsonMask = componentContext.getDerivedFromVars(componentContext.json.mask);\n    $: jsonVisibleMaxLines = componentContext.getDerivedFromVars(componentContext.json.max_visible_lines);\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonSelectAll = componentContext.getDerivedFromVars(componentContext.json.select_all_on_focus);\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonMaxLength = componentContext.getDerivedFromVars(componentContext.json.max_length);\n    $: jsonAutocapitalization = componentContext.getDerivedFromVars(componentContext.json.autocapitalization);\n    $: jsonEnterKeyType = componentContext.getDerivedFromVars(componentContext.json.enter_key_type);\n    $: jsonValidators = componentContext.getDerivedFromVars(componentContext.json.validators);\n    $: jsonFilters = componentContext.getDerivedFromVars(componentContext.json.filters);\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"text_variable\" in \"input\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"input\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    function updateMaskData(mask: MaybeMissing<InputMask> | undefined): void {\n        if (mask?.type === 'fixed_length') {\n            inputMask = updateFixedMask(mask, componentContext.logError, inputMask as FixedLengthInputMask);\n        } else if (mask?.type === 'currency') {\n            inputMask = updateCurrencyMask(mask, componentContext.logError, inputMask as CurrencyInputMask);\n        } else if (mask?.type === 'phone') {\n            inputMask = updatePhoneMask(componentContext.logError, inputMask as PhoneInputMask);\n        }\n\n        if (inputMask) {\n            runRawValueMask();\n        }\n    }\n    $: updateMaskData($jsonMask);\n\n    $: if (!inputMask && value !== $valueVariable) {\n        let val = $valueVariable;\n        if (val.length > maxLength) {\n            val = val.slice(0, maxLength);\n            valueVariable.setValue(val);\n        }\n        value = contentEditableValue = val;\n        runValidators();\n    }\n\n    $: if (inputMask && inputMask.rawValue !== $rawValueVariable) {\n        runRawValueMask();\n        runValidators();\n    }\n\n    $: if ($jsonValidators && mounted) {\n        runValidators();\n    }\n\n    $: placeholder = $jsonHintText;\n\n    $: {\n        hintColor = correctColor($jsonHintColor, 1, hintColor);\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n    }\n\n    $: {\n        fontWeight = correctFontWeight($jsonFontWeight, $jsonFontWeightValue, fontWeight);\n        if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n            fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        const newVal = variationSettingsToString($jsonFontVariationSettings);\n        if (newVal !== fontVariationSettings) {\n            fontVariationSettings = newVal;\n        }\n    }\n\n    $: {\n        const val = $jsonLineHeight;\n        if (isPositiveNumber(val)) {\n            lineHeight = val / fontSize;\n        }\n    }\n\n    $: {\n        if (isNumber($jsonLetterSpacing)) {\n            letterSpacing = pxToEm($jsonLetterSpacing);\n        }\n    }\n\n    $: {\n        textColor = correctColor($jsonTextColor, 1, textColor);\n    }\n\n    $: {\n        highlightColor = correctColor($jsonHighlightColor, 1, highlightColor);\n    }\n\n    $: {\n        alignmentHorizontal = correctAlignmentHorizontal($jsonAlignmentHorizontal, $direction, alignmentHorizontal);\n    }\n\n    $: {\n        alignmentVertical = correctAlignmentVertical($jsonAlignmentVertical, alignmentVertical);\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: {\n        maxLength = correctPositiveNumber($jsonMaxLength, maxLength);\n    }\n\n    $: {\n        if ($jsonKeyboardType && $jsonKeyboardType in KEYBOARD_MAP) {\n            inputType = KEYBOARD_MAP[$jsonKeyboardType as KeyboardType];\n            keyboardType = $jsonKeyboardType;\n        }\n\n        if ($jsonMask?.type === 'currency') {\n            inputType = isSupportInputMode ? 'text' : 'tel';\n            inputMode = 'decimal';\n        } else if (keyboardType === 'number') {\n            inputMode = 'decimal';\n        } else {\n            inputMode = undefined;\n        }\n    }\n\n    $: isMultiline = keyboardType === 'multi_line_text';\n\n    $: {\n        if (isPositiveNumber($jsonVisibleMaxLines)) {\n            maxHeight = `calc(${$jsonVisibleMaxLines * (lineHeight || 1.25) * (fontSize / 10) + 'em'} + ${pxToEmWithUnits(correctNonNegativeNumber($jsonPaddings?.top, 0) + correctNonNegativeNumber($jsonPaddings?.bottom, 0))})`;\n        } else {\n            maxHeight = '';\n        }\n        selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n        padding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            right: (Number($direction === 'ltr' ? selfPadding.end : selfPadding.start) || Number(selfPadding.right) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n            left: (Number($direction === 'ltr' ? selfPadding.start : selfPadding.end) || Number(selfPadding.left) || 0) / fontSize * 10\n        }, $direction) : '';\n        verticalPadding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10\n        }, $direction) : '';\n    }\n\n    $: if ($jsonAutocapitalization === 'all_characters') {\n        autocapitalization = 'characters';\n    } else if ($jsonAutocapitalization === 'sentences') {\n        autocapitalization = 'sentences';\n    } else if ($jsonAutocapitalization === 'words') {\n        autocapitalization = 'words';\n    } else if ($jsonAutocapitalization === 'none' || $jsonAutocapitalization === 'auto') {\n        autocapitalization = 'off';\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for input'), {\n            level: 'warn'\n        }));\n    }\n\n    $: if (\n        $jsonEnterKeyType === 'default' || $jsonEnterKeyType === 'done' || $jsonEnterKeyType === 'go' ||\n        $jsonEnterKeyType === 'search' || $jsonEnterKeyType === 'send'\n    ) {\n        enterKeyType = $jsonEnterKeyType;\n    }\n\n    $: mods = {\n        'highlight-color': Boolean(highlightColor),\n        multiline: isMultiline,\n        'alignment-horizontal': alignmentHorizontal,\n        'alignment-vertical': alignmentVertical\n    };\n    $: stl = {\n        '--divkit-input-hint-color': hintColor,\n        '--divkit-input-highlight-color': highlightColor,\n        '--divkit-input-line-height': lineHeight,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        'font-variation-settings': fontVariationSettings,\n        'letter-spacing': letterSpacing,\n        color: textColor,\n        'max-height': maxHeight\n    };\n    $: paddingStl = {\n        'font-size': pxToEm(fontSize),\n        padding\n    };\n    $: verticalPaddingStl = {\n        'font-size': pxToEm(fontSize),\n        padding: verticalPadding\n    };\n\n    function checkFilters(val: string): boolean {\n        if (!Array.isArray($jsonFilters)) {\n            return true;\n        }\n\n        for (const filter of $jsonFilters) {\n            if (!filter) {\n                continue;\n            }\n            if (filter.type === 'regex') {\n                try {\n                    const re = new RegExp('^' + (filter.pattern || '') + '$');\n                    if (!re.test(val)) {\n                        return false;\n                    }\n                } catch (err) {\n                    componentContext.logError(wrapError(new Error('Failed to create a regex'), {\n                        additional: {\n                            originalError: String(err)\n                        }\n                    }));\n                    return true;\n                }\n            } else if (filter.type === 'expression') {\n                if (!filter.condition) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    function onInput(event: Event): void {\n        const input = event.target;\n        let val = (isMultiline ?\n            (input as HTMLDivElement).innerText :\n            (input as HTMLInputElement).value\n        ) || '';\n\n        if (val === '\\n') {\n            val = '';\n        }\n\n        if (val.length > maxLength) {\n            val = contentEditableValue = value;\n            if (input instanceof HTMLInputElement) {\n                input.value = val;\n            }\n        }\n\n        if (value !== val) {\n            if (checkFilters(val)) {\n                value = contentEditableValue = val;\n                valueVariable.setValue(val);\n                if (inputMask) {\n                    runValueMask();\n                }\n                runValidators();\n            } else {\n                value = contentEditableValue = val;\n                if (input instanceof HTMLInputElement) {\n                    input.value = val;\n                }\n                tick().then(() => {\n                    setCursorPosition(selectionStart, selectionEnd);\n                });\n            }\n        }\n    }\n\n    function blockOverflow(event: KeyboardEvent): void {\n        if (\n            value.length >= maxLength &&\n            !ALLOWED_BLOCKED_MULTILINE_KEYS.has(event.key) &&\n            !(event.ctrlKey || event.altKey || event.metaKey)\n        ) {\n            event.preventDefault();\n        }\n    }\n\n    function onKeyDown(event: KeyboardEvent): void {\n        selectionStart = getSelectionStart() || 0;\n        selectionEnd = getSelectionEnd() || 0;\n\n        if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) {\n            return;\n        }\n\n        const actions = componentContext.json.enter_key_actions;\n        if (event.key === 'Enter' && Array.isArray(actions) && actions.length) {\n            event.preventDefault();\n            componentContext.execAnyActions(actions);\n        }\n    }\n\n    function onPaste(event: ClipboardEvent): void {\n        event.preventDefault();\n        if (event.clipboardData) {\n            let text = event.clipboardData.getData('text/plain');\n            text = text.trim();\n            document.execCommand('inserttext', false, text);\n        }\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            if (input instanceof HTMLInputElement) {\n                input.select();\n            } else {\n                const selection = window.getSelection();\n                const range = document.createRange();\n                range.selectNodeContents(input);\n                if (selection) {\n                    selection.removeAllRanges();\n                    selection.addRange(range);\n                }\n            }\n        }\n    }\n\n    function getSelectionStart(): number | undefined {\n        if (input instanceof HTMLInputElement) {\n            return input.selectionStart === null ? undefined : input.selectionStart;\n        }\n\n        return calcSelectionOffset(input, 'start');\n    }\n\n    function getSelectionEnd(): number | undefined {\n        if (input instanceof HTMLInputElement) {\n            return input.selectionEnd === null ? undefined : input.selectionEnd;\n        }\n\n        return calcSelectionOffset(input, 'end');\n    }\n\n    function setCursorPosition(start: number, end: number): void {\n        if (input instanceof HTMLInputElement) {\n            input.selectionStart = start;\n            input.selectionEnd = end;\n        } else {\n            const sel = window.getSelection();\n            if (sel) {\n                sel.removeAllRanges();\n                const range = document.createRange();\n                setSelectionOffset(input, range, 'start', start);\n                setSelectionOffset(input, range, 'end', end);\n                sel.addRange(range);\n            }\n        }\n    }\n\n    async function runValueMask(): Promise<void> {\n        if (!input || !inputMask) {\n            return;\n        }\n\n        const start = getSelectionStart() || 0;\n        const end = getSelectionEnd() || 0;\n\n        inputMask.applyChangeFrom(value, end === start ? end : 0);\n\n        rawValueVariable.set(inputMask.rawValue);\n        $valueVariable = value = contentEditableValue = inputMask.value;\n        const cursorPosition = inputMask.cursorPosition;\n\n        await tick();\n\n        if (document.activeElement === input) {\n            setCursorPosition(cursorPosition, cursorPosition);\n        }\n    }\n\n    async function runRawValueMask(): Promise<void> {\n        if (!input || !inputMask) {\n            return;\n        }\n\n        inputMask.overrideRawValue($rawValueVariable);\n\n        rawValueVariable.set(inputMask.rawValue);\n        $valueVariable = value = contentEditableValue = inputMask.value;\n        const cursorPosition = inputMask.cursorPosition;\n\n        await tick();\n\n        if (document.activeElement === input) {\n            setCursorPosition(cursorPosition, cursorPosition);\n        }\n    }\n\n    function runValidators(): void {\n        const isFirstRun = validatorsFirstRun;\n        validatorsFirstRun = false;\n\n        const validators = componentContext.json.validators;\n        if (!Array.isArray(validators) || !validators.length) {\n            return;\n        }\n\n        const evalledValidators = componentContext.getJsonWithVars(validators);\n        const filtered = evalledValidators.filter(it => (it.type === 'regex' || it.type === 'expression') && it.label_id && it.variable);\n        const describeList: string[] = [];\n\n        filtered.forEach(validator => {\n            const variable = componentContext.getVariable(validator.variable as string);\n            if (!variable) {\n                return;\n            }\n\n            if (variable.getType() !== 'boolean') {\n                if (isFirstRun) {\n                    componentContext.logError(wrapError(new Error('Incorrect variable type for the validator'), {\n                        additional: {\n                            variable: validator.variable\n                        }\n                    }));\n                }\n                return;\n            }\n\n            let isValid = false;\n            if (value === '' && (validator.allow_empty === true || validator.allow_empty === 1)) {\n                isValid = true;\n            } else if (validator.type === 'regex') {\n                if (!validator.pattern || typeof validator.pattern !== 'string') {\n                    return;\n                }\n                try {\n                    const re = new RegExp('^' + validator.pattern + '$');\n                    isValid = re.test(value);\n                } catch (err) {\n                    if (isFirstRun) {\n                        componentContext.logError(wrapError(new Error('Failed to create a regular expression using the validator pattern'), {\n                            additional: {\n                                pattern: validator.pattern\n                            }\n                        }));\n                    }\n                    return;\n                }\n            } else if (validator.type === 'expression') {\n                isValid = validator.condition === true || validator.condition === 1;\n            } else {\n                return;\n            }\n\n            variable.setValue(isValid);\n\n            if (!isValid) {\n                const htmlId = rootCtx.getComponentId(validator.label_id as string);\n                if (htmlId) {\n                    describeList.push(htmlId);\n                }\n            }\n        });\n        describedBy = describeList.join(' ');\n    }\n\n    $: if (input && componentContext.json) {\n        componentContext.detachViewInfo('focus');\n        componentContext.detachViewInfo('setCursorPosition');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('focus', () => {\n                if (input) {\n                    input.focus();\n                    setCursorPosition(value.length, value.length);\n                }\n            });\n            componentContext.attachViewInfo('setCursorPosition', (start, end) => {\n                if (document.activeElement !== input) {\n                    input.focus();\n                }\n                setCursorPosition(start === -1 ? value.length : start, end === -1 ? value.length : end);\n            });\n        }\n    }\n\n    onMount(() => {\n        mounted = true;\n\n        if (input && inputMask) {\n            if ($rawValueVariable) {\n                inputMask.overrideRawValue($rawValueVariable);\n                $valueVariable = value = contentEditableValue = inputMask.value;\n            }\n        }\n    });\n\n    onDestroy(() => {\n        mounted = false;\n\n        componentContext.detachViewInfo('focus');\n        componentContext.detachViewInfo('setCursorPosition');\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        let:hasCustomFocus\n        alwaysCustomFocus\n        cls={genClassName('input', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions=\"input\"\n        customPaddings={true}\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        {#if isMultiline}\n            <span class={css['input__scroll-wrapper']}>\n                {#if !contentEditableValue && placeholder}\n                    <div\n                        class={css.input__placeholder}\n                        aria-hidden=\"true\"\n                        style={makeStyle(paddingStl)}\n                    >\n                        {placeholder}\n                    </div>\n                {/if}\n\n                <!-- zero-width space, so other baseline-elements could be aligned without value -->\n                <span\n                    class={css.input__aligner}\n                    aria-hidden=\"true\"\n                    style={makeStyle(verticalPaddingStl)}\n                >​</span>\n\n                {#if isEnabled}\n                    <span\n                        bind:this={input}\n                        class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, multiline: true })}\n                        autocapitalize={autocapitalization}\n                        contenteditable=\"true\"\n                        role=\"textbox\"\n                        tabindex=\"0\"\n                        aria-label={description}\n                        aria-multiline=\"true\"\n                        enterkeyhint={enterKeyType === 'default' ? undefined : enterKeyType}\n                        aria-describedby={describedBy || undefined}\n                        style={makeStyle(paddingStl)}\n                        bind:innerText={contentEditableValue}\n                        on:input={onInput}\n                        on:keydown={blockOverflow}\n                        on:keydown={onKeyDown}\n                        on:paste={onPaste}\n                        on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n                        on:click={$jsonSelectAll ? onClick : undefined}\n                        on:focus={focusHandler}\n                        on:blur={blurHandler}\n                    >\n                    </span>\n                {:else}\n                    <span\n                        bind:this={input}\n                        class={genClassName('input__input', css, { multiline: true })}\n                        autocapitalize={autocapitalization}\n                        contenteditable=\"false\"\n                        role=\"textbox\"\n                        aria-label={description}\n                        aria-disabled=\"true\"\n                        aria-multiline=\"true\"\n                        aria-describedby={describedBy || undefined}\n                        style={makeStyle(paddingStl)}\n                        bind:innerText={contentEditableValue}\n                    >\n                    </span>\n                {/if}\n            </span>\n        {:else}\n            <input\n                bind:this={input}\n                type={inputType}\n                inputmode={inputMode}\n                class={genClassName('input__input', css, { 'has-custom-focus': hasCustomFocus, singleline: true })}\n                autocomplete=\"off\"\n                autocapitalize={autocapitalization}\n                aria-label={description}\n                aria-describedby={describedBy || undefined}\n                style={makeStyle(paddingStl)}\n                disabled={!isEnabled}\n                maxlength={maxLength === Infinity ? undefined : maxLength}\n                {placeholder}\n                {value}\n                enterkeyhint={enterKeyType === 'default' ? undefined : enterKeyType}\n                on:input={onInput}\n                on:keydown={onKeyDown}\n                on:mousedown={$jsonSelectAll ? onMousedown : undefined}\n                on:click={$jsonSelectAll ? onClick : undefined}\n                on:focus={focusHandler}\n                on:blur={blurHandler}\n            >\n        {/if}\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Select.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { DivSelectData } from '../../types/select';\n    import type { EdgeInsets } from '../../types/edgeInserts';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { pxToEm } 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 { createVariable } from '../../expressions/variable';\n    import { correctEdgeInsertsObject } from '../../utils/correctEdgeInsertsObject';\n    import { edgeInsertsToCss } from '../../utils/edgeInsertsToCss';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import { variationSettingsToString } from '../../utils/variationSettings';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivSelectData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n\n    const direction = rootCtx.direction;\n\n    let select: HTMLSelectElement;\n    let hasError = false;\n    let selectText = '';\n    let selfPadding: EdgeInsets | null = null;\n    let padding = '';\n    let hintColor = 'rgba(0,0,0,.45)';\n    let fontSize = 12;\n    let fontWeight: number | undefined = undefined;\n    let fontFamily = '';\n    let fontVariationSettings = '';\n    let lineHeight: number | undefined = undefined;\n    let letterSpacing = '';\n    let textColor = '#000';\n    let description = '';\n    let prevWarnValue: string | undefined;\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        selfPadding = null;\n        hintColor = 'rgba(0,0,0,.45)';\n        fontSize = 12;\n        fontWeight = undefined;\n        fontFamily = '';\n        fontVariationSettings = '';\n        lineHeight = undefined;\n        letterSpacing = '';\n        textColor = '#000';\n        description = '';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.value_variable;\n    $: items = componentContext.json.options;\n    $: filteredItems = Array.isArray(items) && items.filter(it => typeof it.value === 'string') || [];\n\n    $: valueVariable = variable && (componentContext.getVariable(variable, 'string') || rootCtx.awaitGlobalVariable(variable, 'string', '')) || createVariable('temp', 'string', '');\n\n    $: jsonPaddings = componentContext.getDerivedFromVars(componentContext.json.paddings);\n    $: jsonHintText = componentContext.getDerivedFromVars(componentContext.json.hint_text);\n    $: jsonHintColor = componentContext.getDerivedFromVars(componentContext.json.hint_color);\n    $: jsonFontSize = componentContext.getDerivedFromVars(componentContext.json.font_size);\n    $: jsonFontWeight = componentContext.getDerivedFromVars(componentContext.json.font_weight);\n    $: jsonFontWeightValue = componentContext.getDerivedFromVars(componentContext.json.font_weight_value);\n    $: jsonFontFamily = componentContext.getDerivedFromVars(componentContext.json.font_family);\n    $: jsonFontVariationSettings = componentContext.getDerivedFromVars(\n        componentContext.json.font_variation_settings,\n        undefined,\n        true,\n        0\n    );\n    $: jsonLineHeight = componentContext.getDerivedFromVars(componentContext.json.line_height);\n    $: jsonLetterSpacing = componentContext.getDerivedFromVars(componentContext.json.letter_spacing);\n    $: jsonTextColor = componentContext.getDerivedFromVars(componentContext.json.text_color);\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n\n    $: if (!(Array.isArray(filteredItems) && filteredItems.length)) {\n        componentContext.logError(wrapError(new Error('Empty selection \"items\" in \"select\"')));\n    }\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            hasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"value_variable\" in \"select\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"select\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    $: {\n        const item = filteredItems.find(it => {\n            return it.value === $valueVariable;\n        });\n        if (item) {\n            selectText = (typeof item.text === 'string' ? item.text : item.value) || '';\n        } else {\n            selectText = '';\n            if ($valueVariable && prevWarnValue !== $valueVariable) {\n                prevWarnValue = $valueVariable;\n                componentContext.logError(wrapError(new Error('Value from the variable was not found in the selection items for \"select\"')));\n            }\n        }\n    }\n\n    $: {\n        selfPadding = correctEdgeInsertsObject(($jsonPaddings) ? $jsonPaddings : undefined, selfPadding);\n        padding = selfPadding ? edgeInsertsToCss({\n            top: (Number(selfPadding.top) || 0) / fontSize * 10,\n            right: (Number($direction === 'ltr' ? selfPadding.end : selfPadding.start) || Number(selfPadding.right) || 0) / fontSize * 10,\n            bottom: (Number(selfPadding.bottom) || 0) / fontSize * 10,\n            left: (Number($direction === 'ltr' ? selfPadding.start : selfPadding.end) || Number(selfPadding.left) || 0) / fontSize * 10\n        }, $direction) : '';\n    }\n\n    $: {\n        hintColor = correctColor($jsonHintColor, 1, hintColor);\n    }\n\n    $: {\n        fontSize = correctPositiveNumber($jsonFontSize, fontSize);\n    }\n\n    $: {\n        fontWeight = correctFontWeight($jsonFontWeight, $jsonFontWeightValue, fontWeight);\n        if ($jsonFontFamily && typeof $jsonFontFamily === 'string') {\n            fontFamily = rootCtx.typefaceProvider($jsonFontFamily, {\n                fontWeight: fontWeight || 400\n            });\n        } else {\n            fontFamily = '';\n        }\n    }\n\n    $: {\n        const newVal = variationSettingsToString($jsonFontVariationSettings);\n        if (newVal !== fontVariationSettings) {\n            fontVariationSettings = newVal;\n        }\n    }\n\n    $: {\n        const val = $jsonLineHeight;\n        if (isPositiveNumber(val)) {\n            lineHeight = val / fontSize;\n        }\n    }\n\n    $: {\n        if (isNumber($jsonLetterSpacing)) {\n            letterSpacing = pxToEm($jsonLetterSpacing / fontSize * 10);\n        }\n    }\n\n    $: {\n        textColor = correctColor($jsonTextColor, 1, textColor);\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for select'), {\n            level: 'warn'\n        }));\n    }\n\n    $: mods = {\n        hint: !selectText\n    };\n    $: stl = {\n        '--divkit-input-hint-color': hintColor,\n        'font-weight': fontWeight,\n        'font-family': fontFamily,\n        'font-variation-settings': fontVariationSettings,\n        color: textColor\n    };\n    $: innerStl = {\n        padding,\n        'font-size': pxToEm(fontSize),\n        'line-height': lineHeight,\n        'letter-spacing': letterSpacing\n    };\n    $: selectStl = {\n        'font-size': pxToEm(fontSize),\n        'line-height': lineHeight,\n        'letter-spacing': letterSpacing\n    };\n\n    $: if (componentContext.json && select) {\n        componentContext.detachViewInfo('focus');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('focus', () => {\n                if (select) {\n                    select.focus();\n                }\n            });\n        }\n    }\n\n    onDestroy(() => {\n        componentContext.detachViewInfo('focus');\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:hasCustomFocus\n        let:focusHandler\n        let:blurHandler\n        cls={genClassName('select', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions=\"select\"\n        customPaddings={true}\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        <span class={css['select__select-text']} style={makeStyle(innerStl)} aria-hidden=\"true\">\n            <!--Space holder should have height even it has no value-->\n            {selectText || $jsonHintText || '​'}\n        </span>\n\n        <select\n            class={genClassName('select__select', css, { 'has-custom-focus': hasCustomFocus })}\n            aria-label={description}\n            bind:this={select}\n            bind:value={$valueVariable}\n            style={makeStyle(selectStl)}\n            on:focus={focusHandler}\n            on:blur={blurHandler}\n        >\n            {#each filteredItems as item}\n                <option class={css.select__option} value={item.value}>{item.text || item.value}</option>\n            {/each}\n        </select>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { VideoSource } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nexport interface PreparedVideoSource {\n    src: string;\n    type?: string;\n}\n\nexport function correctVideoSource(\n    data: MaybeMissing<VideoSource>[] | undefined,\n    defaultValue: PreparedVideoSource[]\n): PreparedVideoSource[] {\n    if (Array.isArray(data) && data.length) {\n        return data.filter(it => {\n            return it?.type === 'video_source' && typeof it.url === 'string' && typeof it.mime_type === 'string';\n        }).map(it => {\n            const res: PreparedVideoSource = {\n                src: it.url as string\n            };\n\n            if (it.mime_type) {\n                res.type = it.mime_type;\n            }\n\n            return res;\n        });\n    }\n\n    return defaultValue;\n}\n","import type { VideoScale } from '../../typings/common';\n\nexport function videoSize(scale?: VideoScale): string {\n    if (scale === 'fill') {\n        return 'cover';\n    /* } else if (scale === 'stretch') {\n        return 'fill'; */\n    } else if (scale === 'no_scale') {\n        return 'none';\n    }\n\n    // 'fit' and default\n    return 'contain';\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n    import type { Unsubscriber } from 'svelte/store';\n\n    import css from './Video.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivVideoData } from '../../types/video';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { VideoPlayerInstance, VideoPlayerProviderClient, VideoPlayerProviderData, VideoPlayerProviderServer, VideoSource } from '../../../typings/common';\n    import type { MaybeMissing } from '../../expressions/json';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { createVariable } from '../../expressions/variable';\n    import { type PreparedVideoSource, correctVideoSource } from '../../utils/correctVideoSource';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import Outer from '../utilities/Outer.svelte';\n    import { prepareBase64 } from '../../utils/prepareBase64';\n    import { videoSize } from '../../utils/video';\n    import { makeStyle } from '../../utils/makeStyle';\n    import { isPositiveNumber } from '../../utils/isPositiveNumber';\n    import { genClassName } from '../../utils/genClassName';\n    import { correctPositiveNumber } from '../../utils/correctPositiveNumber';\n\n    export let componentContext: ComponentContext<DivVideoData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const videoPlayerProvider = rootCtx.videoPlayerProvider;\n\n    let isSelfVariableSet = false;\n    let videoElem: HTMLVideoElement;\n    let videoParentElem: HTMLElement;\n    let sources: PreparedVideoSource[] = [];\n    let loop = false;\n    let autoplay = false;\n    let muted = false;\n    let preload = false;\n    let poster: string | undefined = undefined;\n    let scale = 'fit';\n    let playbackSpeed = 1;\n    let aspectPaddingBottom = '0';\n    let isAbsolute = false;\n    let elapsedVariableUnsubscriber: Unsubscriber | undefined;\n    let providedVideoTemplate = '';\n    let customVideoInstance: VideoPlayerInstance | undefined;\n    let shouldUseVideoProvider = Boolean(videoPlayerProvider);\n\n    if (import.meta.env.SSR && videoPlayerProvider) {\n        const provider = videoPlayerProvider as VideoPlayerProviderServer;\n        if (typeof provider.template === 'string') {\n            providedVideoTemplate = provider.template;\n        } else {\n            const data = calcVideoProviderData(componentContext.json);\n            if (data) {\n                providedVideoTemplate = provider.template(data);\n            } else {\n                shouldUseVideoProvider = false;\n            }\n        }\n    }\n\n    function calcVideoProviderData(json: MaybeMissing<DivVideoData>): VideoPlayerProviderData | undefined {\n        const evalled = componentContext.getJsonWithVars({\n            sources: json.video_sources,\n            repeatable: json.repeatable,\n            autostart: json.autostart,\n            preloadRequired: json.preload_required,\n            muted: json.muted,\n            preview: json.preview,\n            aspect: json.aspect,\n            scale: json.scale,\n            payload: json.player_settings_payload\n        });\n        const repeatable = correctBooleanInt(evalled.repeatable, false);\n        const autostart = correctBooleanInt(evalled.autostart, false);\n        const preloadRequired = correctBooleanInt(evalled.preloadRequired, false);\n        const muted = correctBooleanInt(evalled.muted, false);\n        const aspect = evalled.aspect?.ratio && isPositiveNumber(evalled.aspect.ratio) ?\n            evalled.aspect.ratio :\n            undefined;\n\n        if (!evalled.sources?.length) {\n            return;\n        }\n\n        return {\n            sources: evalled.sources as VideoSource[],\n            repeatable,\n            autostart,\n            preloadRequired,\n            muted,\n            preview: evalled.preview,\n            aspect,\n            scale: evalled.scale,\n            payload: evalled.payload\n        };\n    }\n\n    $: if (componentContext.json) {\n        loop = false;\n        autoplay = false;\n        muted = false;\n        preload = false;\n        poster = undefined;\n        scale = 'fit';\n        playbackSpeed = 1;\n        isAbsolute = false;\n        shouldUseVideoProvider = Boolean(videoPlayerProvider);\n    }\n\n    $: if (componentContext.json && customVideoInstance && (\n        $jsonSource ||\n        $jsonRepeatable ||\n        $jsonAutostart ||\n        $jsonMuted ||\n        $jsonPreload ||\n        $jsonPreview ||\n        $jsonScale ||\n        $jsonAspect\n    )) {\n        const data = calcVideoProviderData(componentContext.json);\n        if (data) {\n            customVideoInstance.update?.(data);\n        }\n    }\n\n    $: elapsedVariableName = componentContext.json.elapsed_time_variable;\n    $: elapsedVariable = elapsedVariableName && (componentContext.getVariable(elapsedVariableName, 'integer') || rootCtx.awaitGlobalVariable(elapsedVariableName, 'integer', 0)) || createVariable('temp', 'integer', 0);\n\n    function variableListener(val: number): void {\n        if (isSelfVariableSet) {\n            isSelfVariableSet = false;\n            return;\n        }\n        if (customVideoInstance) {\n            customVideoInstance.seek?.(Number(val));\n        } else if (videoElem) {\n            videoElem.currentTime = Number(val) / 1000;\n        }\n    }\n\n    $: if (elapsedVariable) {\n        if (elapsedVariableUnsubscriber) {\n            elapsedVariableUnsubscriber();\n        }\n        elapsedVariableUnsubscriber = elapsedVariable.subscribe(variableListener);\n    }\n\n    $: jsonSource = componentContext.getDerivedFromVars(componentContext.json.video_sources);\n    $: jsonRepeatable = componentContext.getDerivedFromVars(componentContext.json.repeatable);\n    $: jsonAutostart = componentContext.getDerivedFromVars(componentContext.json.autostart);\n    $: jsonMuted = componentContext.getDerivedFromVars(componentContext.json.muted);\n    $: jsonPreload = componentContext.getDerivedFromVars(componentContext.json.preload_required);\n    $: jsonPreview = componentContext.getDerivedFromVars(componentContext.json.preview);\n    $: jsonScale = componentContext.getDerivedFromVars(componentContext.json.scale);\n    $: jsonAspect = componentContext.getDerivedFromVars(componentContext.json.aspect);\n    $: jsonPlaybackSpeed = componentContext.getDerivedFromVars(componentContext.json.playback_speed);\n    $: jsonWidth = componentContext.getDerivedFromVars(componentContext.json.width);\n    $: jsonHeight = componentContext.getDerivedFromVars(componentContext.json.height);\n\n    $: {\n        sources = correctVideoSource($jsonSource, sources);\n\n        if (!sources.length && !componentContext.json.player_settings_payload) {\n            componentContext.logError(wrapError(new Error('Missing \"video_sources\" or \"player_settings_payload\" in \"video\"')));\n        }\n    }\n\n    $: loop = correctBooleanInt($jsonRepeatable, loop);\n\n    $: autoplay = correctBooleanInt($jsonAutostart, autoplay);\n\n    $: muted = correctBooleanInt($jsonMuted, muted);\n\n    $: preload = correctBooleanInt($jsonPreload, preload);\n\n    $: poster = typeof $jsonPreview === 'string' ? prepareBase64($jsonPreview) : poster;\n\n    $: {\n        scale = videoSize($jsonScale) || scale;\n    }\n\n    $: {\n        playbackSpeed = correctPositiveNumber($jsonPlaybackSpeed, playbackSpeed);\n    }\n\n    $: {\n        const newRatio = $jsonAspect?.ratio;\n        if (newRatio && isPositiveNumber(newRatio)) {\n            aspectPaddingBottom = (100 / Number(newRatio)).toFixed(2);\n            isAbsolute = true;\n        } else {\n            aspectPaddingBottom = '0';\n            isAbsolute = (!$jsonWidth || $jsonWidth.type === 'match_parent') && $jsonHeight?.type === 'match_parent';\n        }\n    }\n\n    function pause(): void {\n        if (customVideoInstance) {\n            customVideoInstance.pause();\n        } else {\n            videoElem?.pause();\n        }\n    }\n\n    function start(): void {\n        if (customVideoInstance) {\n            customVideoInstance.play();\n            return;\n        }\n\n        const res = videoElem?.play();\n        if (res) {\n            res.catch(err => {\n                componentContext.logError(wrapError(new Error('Video playing error'), {\n                    level: 'error',\n                    additional: {\n                        originalText: String(err)\n                    }\n                }));\n            });\n        }\n    }\n\n    $: if (componentContext.json) {\n        componentContext.detachViewInfo('video');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('video', {\n                start,\n                pause,\n            });\n        }\n    }\n\n    // Video will not start after autoplay set in setData, do it manually\n    $: if (componentContext.json && $jsonAutostart && videoElem) {\n        start();\n    }\n\n    $: mods = {\n        absolute: isAbsolute\n    };\n\n    $: style = {\n        'object-fit': scale\n    };\n\n    $: if (videoElem) {\n        try {\n            videoElem.playbackRate = playbackSpeed;\n        } catch (err) {\n            // do nothing\n        }\n    }\n\n    function onTimeUpdate(): void {\n        if (videoElem) {\n            isSelfVariableSet = true;\n            elapsedVariable.setValue(Math.floor(videoElem.currentTime * 1000));\n        }\n    }\n\n    function onEnd(): void {\n        componentContext.execAnyActions(componentContext.json.end_actions);\n    }\n\n    function onPlaying(): void {\n        componentContext.execAnyActions(componentContext.json.resume_actions);\n    }\n\n    function onPause(): void {\n        componentContext.execAnyActions(componentContext.json.pause_actions);\n    }\n\n    function onWaiting(): void {\n        componentContext.execAnyActions(componentContext.json.buffering_actions);\n    }\n\n    function onError(): void {\n        componentContext.execAnyActions(componentContext.json.fatal_actions);\n    }\n\n    onMount(() => {\n        if (videoPlayerProvider && videoParentElem) {\n            const data = calcVideoProviderData(componentContext.json);\n            if (data) {\n                const res = (videoPlayerProvider as VideoPlayerProviderClient).instance(videoParentElem, data);\n                if (res) {\n                    customVideoInstance = res;\n                } else {\n                    shouldUseVideoProvider = false;\n                }\n            }\n        }\n    });\n\n    onDestroy(() => {\n        componentContext.detachViewInfo('video');\n\n        if (elapsedVariableUnsubscriber) {\n            elapsedVariableUnsubscriber();\n            elapsedVariableUnsubscriber = undefined;\n        }\n\n        if (customVideoInstance) {\n            customVideoInstance.destroy();\n            customVideoInstance = undefined;\n        }\n    });\n</script>\n\n<Outer\n    cls={genClassName('video', css, mods)}\n    customActions=\"video\"\n    {componentContext}\n    {layoutParams}\n    heightByAspect={aspectPaddingBottom !== '0'}\n>\n    {#if aspectPaddingBottom !== '0'}\n        <div class={css['video__aspect-wrapper']} style:padding-bottom=\"{aspectPaddingBottom}%\">\n            {#if shouldUseVideoProvider}\n                <div class={css.video__container} bind:this={videoParentElem}>\n                    <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                    {@html providedVideoTemplate}\n                </div>\n            {:else}\n                <video\n                    bind:this={videoElem}\n                    class={css.video__video}\n                    style={makeStyle(style)}\n                    playsinline\n                    {loop}\n                    {autoplay}\n                    {muted}\n                    {poster}\n                    preload={preload ? 'metadata' : 'auto'}\n                    on:timeupdate={onTimeUpdate}\n                    on:ended={onEnd}\n                    on:playing={onPlaying}\n                    on:pause={onPause}\n                    on:waiting={onWaiting}\n                    on:error={onError}\n                >\n                    {#each sources as source}\n                        {#key source}\n                            <source src={source.src} type={source.type} on:error={onError}>\n                        {/key}\n                    {/each}\n                </video>\n            {/if}\n        </div>\n    {:else}\n        {#if shouldUseVideoProvider}\n            <div class={css.video__container} bind:this={videoParentElem}>\n                <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                {@html providedVideoTemplate}\n            </div>\n        {:else}\n            <video\n                bind:this={videoElem}\n                class={css.video__video}\n                style={makeStyle(style)}\n                playsinline\n                {loop}\n                {autoplay}\n                {muted}\n                {poster}\n                preload={preload ? 'metadata' : 'auto'}\n                on:timeupdate={onTimeUpdate}\n                on:ended={onEnd}\n                on:playing={onPlaying}\n                on:pause={onPause}\n                on:waiting={onWaiting}\n                on:error={onError}\n            >\n                {#each sources as source}\n                    {#key source}\n                        <source src={source.src} type={source.type} on:error={onError}>\n                    {/key}\n                {/each}\n            </video>\n        {/if}\n    {/if}\n</Outer>\n","import type { BooleanInt } from '../../typings/common';\n\nexport function booleanInt(val: BooleanInt): boolean {\n    return val === true || val === 1;\n}\n","<script lang=\"ts\">\n    import { getContext, onDestroy } from 'svelte';\n\n    import css from './Switch.module.css';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivSwitchData } from '../../types/switch';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { ACTION_CTX, type ActionCtxValue } from '../../context/action';\n    import { genClassName } from '../../utils/genClassName';\n    import { wrapError } from '../../utils/wrapError';\n    import { correctColor, parseColor, stringifyColorToCss } from '../../utils/correctColor';\n    import { createVariable } from '../../expressions/variable';\n    import { correctBooleanInt } from '../../utils/correctBooleanInt';\n    import { booleanInt } from '../../utils/booleanInt';\n    import { composeAccessibilityDescription } from '../../utils/composeAccessibilityDescription';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivSwitchData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n    const actionCtx = getContext<ActionCtxValue>(ACTION_CTX);\n    const direction = rootCtx.direction;\n\n    let input: HTMLInputElement;\n    let value = false;\n    let hasError = false;\n    let description = '';\n    let isEnabled = true;\n    let onColor = '#129386';\n    let onSubColor = '#1293864c';\n\n    $: origJson = componentContext.origJson;\n\n    function rebind(): void {\n        isEnabled = true;\n        onColor = '#129386';\n        onSubColor = '#1293864c';\n    }\n\n    $: if (origJson) {\n        rebind();\n    }\n\n    $: variable = componentContext.json.is_on_variable;\n\n    $: valueVariable = variable && (componentContext.getVariable(variable, 'boolean') || rootCtx.awaitGlobalVariable(variable, 'boolean', false)) || createVariable('temp', 'boolean', false);\n\n    $: jsonAccessibility = componentContext.getDerivedFromVars(componentContext.json.accessibility);\n    $: jsonIsEnabled = componentContext.getDerivedFromVars(componentContext.json.is_enabled);\n    $: jsonOnColor = componentContext.getDerivedFromVars(componentContext.json.on_color);\n\n    $: {\n        let newHasError = false;\n\n        if (!variable) {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Missing \"is_on_variable\" in \"switch\"')));\n        } else if (actionCtx.hasAction() || $jsonAccessibility?.mode === 'exclude') {\n            newHasError = true;\n            componentContext.logError(wrapError(new Error('Cannot show \"switch\" inside component with an action or inside accessibility mode=exclude')));\n        }\n\n        if (hasError !== newHasError) {\n            hasError = newHasError;\n        }\n    }\n\n    $: if (booleanInt(value) !== booleanInt($valueVariable)) {\n        value = booleanInt($valueVariable);\n    }\n\n    $: {\n        isEnabled = correctBooleanInt($jsonIsEnabled, isEnabled);\n    }\n\n    $: {\n        onColor = correctColor($jsonOnColor, 1, onColor);\n\n        if (typeof $jsonOnColor === 'string') {\n            const parsed = parseColor($jsonOnColor);\n            if (parsed) {\n                parsed.a *= .3;\n                onSubColor = stringifyColorToCss(parsed);\n            }\n        }\n    }\n\n    $: if ($jsonAccessibility?.description) {\n        description = composeAccessibilityDescription($jsonAccessibility);\n    } else {\n        componentContext.logError(wrapError(new Error('Missing accessibility \"description\" for switch'), {\n            level: 'warn'\n        }));\n    }\n\n    $: mods = {\n        disabled: !isEnabled,\n        direction: $direction\n    };\n    $: stl = {\n        '--divkit-switch-on-color': onColor,\n        '--divkit-switch-on-sub-color': onSubColor\n    };\n\n    function onInput(event: Event): void {\n        value = (event.target as HTMLInputElement).checked;\n        valueVariable.setValue(value);\n    }\n\n    $: if (input && componentContext.json) {\n        componentContext.detachViewInfo('focus');\n\n        if (componentContext.id && !componentContext.fakeElement) {\n            componentContext.attachViewInfo('focus', () => {\n                if (input) {\n                    input.focus();\n                }\n            });\n        }\n    }\n\n    onDestroy(() => {\n        componentContext.detachViewInfo('focus');\n    });\n</script>\n\n{#if !hasError}\n    <Outer\n        let:focusHandler\n        let:blurHandler\n        let:hasCustomFocus\n        cls={genClassName('switch', css, mods)}\n        style={stl}\n        customDescription={true}\n        customActions=\"switch\"\n        hasInnerFocusable={true}\n        {componentContext}\n        {layoutParams}\n    >\n        <div\n            class={genClassName('switch__tumbler', css, { checked: value })}\n        >\n            <div class={css.switch__thumb}></div>\n        </div>\n        <input\n            bind:this={input}\n            type=\"checkbox\"\n            class={genClassName('switch__input', css, { 'has-custom-focus': hasCustomFocus })}\n            autocomplete=\"off\"\n            aria-label={description}\n            disabled={!isEnabled}\n            checked={value}\n            on:input={onInput}\n            on:focus={focusHandler}\n            on:blur={blurHandler}\n        >\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","<script lang=\"ts\">\n    import { getContext, onDestroy, onMount } from 'svelte';\n\n    import type { LayoutParams } from '../../types/layoutParams';\n    import type { DivCustomData } from '../../types/custom';\n    import type { CustomComponentDescription } from '../../../typings/custom';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import Unknown from '../utilities/Unknown.svelte';\n    import Outer from '../utilities/Outer.svelte';\n    import DevtoolHolder from '../utilities/DevtoolHolder.svelte';\n\n    export let componentContext: ComponentContext<DivCustomData>;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let customElem: HTMLElement;\n    let desc: CustomComponentDescription | null = null;\n    let templateContent = '';\n    // shadowrootmode is an unknown attribute in TS :(\n    let templateAttrs: any = {};\n    let items: ComponentContext[] = [];\n\n    $: if (\n        typeof componentContext.json.custom_type === 'string' &&\n        componentContext.json.custom_type &&\n        rootCtx.customComponents?.has(componentContext.json.custom_type)\n    ) {\n        desc = rootCtx.customComponents.get(componentContext.json.custom_type)!;\n        if (typeof desc.template === 'function') {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            const variables: Map<string, string | number | boolean | unknown[] | object> = new Map();\n            for (const [key, varaible] of ctx.variables) {\n                variables.set(key, varaible.getValue());\n            }\n\n            templateContent = desc.template({\n                props: componentContext.json.custom_props,\n                variables\n            });\n        } else if (desc.template && typeof desc.template === 'string') {\n            templateContent = desc.template;\n        } else {\n            templateContent = '';\n        }\n        templateAttrs = {\n            shadowrootmode: desc.shadowRootMode || 'open'\n        };\n    } else {\n        desc = null;\n        templateContent = ';';\n        componentContext.logError(wrapError(new Error('Unknown or incorrect \"custom_type\" prop for div \"custom\"')));\n    }\n\n    let hasItemsError = false;\n    $: jsonItems = componentContext.json.items;\n    $: {\n        if (jsonItems !== undefined && !Array.isArray(jsonItems)) {\n            hasItemsError = true;\n            componentContext.logError(wrapError(new Error('Incorrect \"items\" prop for div \"custom\"')));\n        } else {\n            hasItemsError = false;\n        }\n    }\n\n    $: {\n        items.forEach(context => {\n            context.destroy();\n        });\n\n        items = (!hasItemsError && jsonItems || []).map((item, index) => {\n            return componentContext.produceChildContext(item, {\n                path: index\n            });\n        });\n    }\n\n    onMount(() => {\n        if (customElem && 'divKitApiCallback' in customElem && typeof customElem.divKitApiCallback === 'function') {\n            const ctx = rootCtx.getExtensionContext(componentContext);\n            customElem.divKitApiCallback(ctx);\n        }\n    });\n\n    onDestroy(() => {\n        items.forEach(context => {\n            context.destroy();\n        });\n    });\n</script>\n\n{#if desc}\n    <Outer\n        {componentContext}\n        {layoutParams}\n    >\n        <svelte:element\n            bind:this={customElem}\n            this={desc.element}\n            {...(componentContext.json.custom_props || {})}\n        >\n            {#if templateContent}\n                <template {...templateAttrs}>\n                    <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n                    {@html templateContent}\n                </template>\n            {/if}\n\n            {#if !hasItemsError && jsonItems}\n                {#key jsonItems}\n                    {#each items as item}\n                        <Unknown\n                            componentContext={item}\n                        />\n                    {/each}\n                {/key}\n            {/if}\n        </svelte:element>\n    </Outer>\n{:else if process.env.DEVTOOL}\n    <DevtoolHolder\n        {componentContext}\n    />\n{/if}\n","import type { ComponentType } from 'svelte';\n// Force import order\nimport './utilities/Outer.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';\nimport Select from './select/Select.svelte';\nimport Video from './video/Video.svelte';\nimport Switch from './switch/Switch.svelte';\nimport Custom from './custom/Custom.svelte';\n\nexport const TYPE_MAP: Record<string, ComponentType> = {\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    select: Select,\n    video: Video,\n    switch: Switch,\n    custom: Custom\n};\n","<script lang=\"ts\">\n    import { getContext } from 'svelte';\n    import type { ComponentType } from 'svelte';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { LayoutParams } from '../../types/layoutParams';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { wrapError } from '../../utils/wrapError';\n    import { TYPE_MAP } from '../typeMap';\n\n    export let componentContext: ComponentContext;\n    export let layoutParams: LayoutParams | undefined = undefined;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    let component: ComponentType | undefined;\n\n    $: {\n        const childJson = componentContext.json;\n\n        component = childJson?.type && TYPE_MAP[childJson.type] || undefined;\n\n        if (!component) {\n            let errorText: string;\n            if (childJson?.type && rootCtx.hasTemplate(childJson.type)) {\n                errorText = 'Recursive template';\n            } else {\n                errorText = 'Unknown component';\n            }\n\n            componentContext.logError(wrapError(new Error(errorText), {\n                additional: {\n                    component: childJson?.type || '<missing>'\n                }\n            }));\n        }\n    }\n</script>\n\n{#if component}\n    <svelte:component\n        this={component}\n        {componentContext}\n        {layoutParams}\n    />\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","import { wrapError, type 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            }\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 { Node } from './ast';\n\n/**\n * LRU cache\n * JavaScript Map iteration is guaranteed to be performed in the insertation order\n * On usage, remove the item from the Map and insert it in the end\n */\n\nconst MAX_ENTRIES = 128;\n\nconst cache = new Map();\nlet latestItem: string | undefined;\n\nexport function cacheGet(expr: string): Node | undefined {\n    return cache.get(expr);\n}\n\nexport function cacheSet(expr: string, ast: Node): void {\n    if (expr === latestItem) {\n        return;\n    }\n\n    cache.delete(expr);\n\n    if (cache.size >= MAX_ENTRIES) {\n        cache.delete(cache.keys().next().value);\n    }\n\n    cache.set(expr, ast);\n\n    latestItem = expr;\n}\n","import type { DivFunction } from '../../../typings/common';\nimport type { Node } from '../ast';\nimport { evalExpression, type EvalTypes, type VariablesMap } from '../eval';\nimport { parse } from '../expressions';\nimport type { MaybeMissing } from '../json';\nimport { cacheGet, cacheSet } from '../parserCache';\nimport { createConstVariable, Variable } from '../variable';\nimport { funcToKey, type Func } from './funcs';\n\nexport type CustomFunctions = Map<string, Func[]>;\n\nconst supportedTypes = new Set<EvalTypes>([\n    'string',\n    'integer',\n    'number',\n    'boolean',\n    'datetime',\n    'color',\n    'url',\n    'dict',\n    'array'\n]);\n\nexport function checkCustomFunction(func: MaybeMissing<DivFunction>): void {\n    if (!(typeof func.name === 'string' && func.name)) {\n        throw new Error('Incorrect function name');\n    }\n\n    if (!(typeof func.body === 'string' && func.body)) {\n        throw new Error('Incorrect function body');\n    }\n\n    if (!(func.return_type && supportedTypes.has(func.return_type))) {\n        throw new Error('Incorrect function return_type');\n    }\n\n    if (!Array.isArray(func.arguments)) {\n        throw new Error('Incorrect function arguments');\n    }\n\n    const argumentsNames = new Set<string>();\n    func.arguments.forEach(arg => {\n        if (!(typeof arg.name === 'string' && arg.name)) {\n            throw new Error('Incorrect argument name');\n        }\n\n        if (!(arg.type && supportedTypes.has(arg.type))) {\n            throw new Error('Incorrect argument type');\n        }\n\n        if (argumentsNames.has(arg.name)) {\n            throw new Error('Duplicate argument name');\n        }\n        argumentsNames.add(arg.name);\n    });\n}\n\nexport function customFunctionWrap(fn: DivFunction): Func {\n    let ast: Node | undefined;\n\n    return {\n        name: fn.name,\n        args: fn.arguments.map(it => {\n            return {\n                type: it.type\n            };\n        }),\n        cb(ctx, ...args) {\n            if (!ast) {\n                ast = cacheGet(fn.body) || parse(fn.body, {\n                    startRule: 'JsonStringContents'\n                });\n                cacheSet(fn.body, ast);\n            }\n\n            const vars: VariablesMap = new Map();\n            args.forEach((arg, index) => {\n                if (arg.type === 'function') {\n                    throw new Error('Incorrect argument type: function');\n                }\n                const instance = createConstVariable(fn.arguments[index].name, arg.type, arg.value);\n                // DatetimeVariable doesnt exist right know, but works fine\n                vars.set(instance.getName(), instance as Variable);\n            });\n\n            const res = evalExpression(vars, ctx.customFunctions, ctx.store, ast, {\n                weekStartDay: ctx.weekStartDay\n            });\n            res.warnings.forEach(warn => {\n                ctx.warnings.push(warn);\n            });\n            const result = res.result;\n\n            if (result.type === 'error') {\n                throw new Error(result.value);\n            }\n\n            if (result.type !== fn.return_type) {\n                throw new Error('Incorrect function return_type');\n            }\n\n            return result;\n        },\n    };\n}\n\nexport function mergeCustomFunctions(\n    map0: CustomFunctions | undefined,\n    map1: CustomFunctions | undefined\n): CustomFunctions | undefined {\n    if (!map0) {\n        return map1 || undefined;\n    }\n    if (!map1) {\n        return map0 || undefined;\n    }\n\n    const merged = new Map();\n    const defined = new Set<string>();\n    for (const [name, funcs] of map1) {\n        for (const func of funcs) {\n            const key = funcToKey(name, func);\n            defined.add(key);\n        }\n        merged.set(name, funcs);\n    }\n    for (const [name, funcs] of map0) {\n        for (const func of funcs) {\n            const key = funcToKey(name, func);\n            if (!defined.has(key)) {\n                defined.add(key);\n                const list = merged.get(name) || [];\n                list.push(func);\n                merged.set(name, list);\n            }\n        }\n    }\n\n    return merged;\n}\n","import type { DivJson } from '../../typings/common';\nimport { wrapError, type 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","export function uniq(list: string[]): string[] {\n    return [...new Set(list)];\n}\n","/* eslint-disable max-depth */\nimport type { Node } from './ast';\nimport type { Variable, VariableValue } from './variable';\nimport type { Store } from '../../typings/store';\nimport { uniq } from '../utils/uniq';\nimport { parse } from './expressions';\nimport { evalExpression, type VariablesMap } from './eval';\nimport { dateToString, gatherVarsFromAst, stringifyColor } from './utils';\nimport { type LogError, wrapError } from '../utils/wrapError';\nimport { parseColor } from '../utils/correctColor';\nimport { simpleUnescapeString } from './simpleUnescapeString';\nimport { cacheGet, cacheSet } from './parserCache';\nimport type { CustomFunctions } from './funcs/customFuncs';\n\nclass ExpressionBinding {\n    private readonly ast: Node;\n    private readonly expr: string;\n\n    constructor(ast: Node, expr: string) {\n        this.ast = ast;\n        this.expr = expr;\n    }\n\n    /**\n     * Applies variables into ast\n     * @param variables\n     * @param logError\n     */\n    apply<T>(\n        {\n            variables,\n            customFunctions,\n            logError,\n            store,\n            weekStartDay,\n            keepComplex\n        }: {\n            variables: VariablesMap;\n            customFunctions: CustomFunctions | undefined;\n            logError: LogError;\n            store: Store | undefined;\n            weekStartDay: number;\n            keepComplex?: boolean;\n        }\n    ): {\n        result: T;\n        usedVars?: Set<Variable>;\n    } {\n        let res: ReturnType<typeof evalExpression> | undefined;\n\n        try {\n            res = evalExpression(variables, customFunctions, store, this.ast, {\n                weekStartDay\n            });\n            res.warnings.forEach(logError);\n            const result = res.result;\n\n            if (result.type === 'error') {\n                logError(wrapError(new Error('Expression execution error'), {\n                    additional: {\n                        message: result.value,\n                        expression: this.expr\n                    }\n                }));\n                return {\n                    result: undefined as T,\n                    usedVars: res.usedVars\n                };\n            }\n\n            const value = result.value;\n            if (value instanceof Date) {\n                return {\n                    result: dateToString(value) as T,\n                    usedVars: res.usedVars\n                };\n            }\n            if (result.type === 'boolean') {\n                return {\n                    result: Boolean(value) as T,\n                    usedVars: res.usedVars\n                };\n            }\n            if (result.type === 'color') {\n                const parsed = parseColor(String(value));\n                if (parsed) {\n                    return {\n                        result: stringifyColor(parsed) as T,\n                        usedVars: res.usedVars\n                    };\n                }\n                logError(wrapError(new Error('Expression execution error')));\n            }\n            if (result.type === 'integer') {\n                if ((value as number) > Number.MAX_SAFE_INTEGER || (value as number) < Number.MIN_SAFE_INTEGER) {\n                    logError(wrapError(new Error('Expression result is out of safe int range')));\n                    return {\n                        result: undefined as T,\n                        usedVars: res.usedVars\n                    };\n                }\n                return {\n                    result: Number(value) as T,\n                    usedVars: res.usedVars\n                };\n            }\n            if (result.type === 'function') {\n                return {\n                    result: `<${result.value[0]?.name || 'Function'}>` as T,\n                    usedVars: res.usedVars\n                };\n            }\n            if (!keepComplex && (result.type === 'array' || result.type === 'dict')) {\n                try {\n                    return {\n                        result: JSON.stringify(value) as T,\n                        usedVars: res.usedVars\n                    };\n                } catch (err) {\n                    logError(wrapError(new Error(`Failed to stringify ${result.type}`)));\n                    return {\n                        result: `<${result.type}>` as T,\n                        usedVars: res.usedVars\n                    };\n                }\n            }\n            return {\n                result: value as T,\n                usedVars: res.usedVars\n            };\n        } catch (err) {\n            logError(wrapError(new Error('Expression execution error'), {\n                additional: {\n                    expression: this.expr\n                }\n            }));\n            return {\n                result: undefined as T,\n                usedVars: res?.usedVars\n            };\n        }\n    }\n}\n\nclass VariableBinding {\n    private readonly variable: string;\n\n    constructor(variable: string) {\n        this.variable = variable;\n    }\n\n    /**\n     * Applies variables into ast\n     * @param variables\n     * @param logError\n     */\n    apply(variables: VariablesMap): VariableValue | string | undefined {\n        const varInstance = variables.get(this.variable);\n        if (varInstance) {\n            return varInstance.getValue();\n        }\n\n        return undefined;\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    maxDepth: number\n): unknown {\n    if (jsonProp) {\n        if (typeof jsonProp === 'string') {\n            if (hasExpressions(jsonProp)) {\n                store.hasExpression = true;\n\n                if (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) {\n                    try {\n                        const ast = cacheGet(jsonProp) || parse(jsonProp, {\n                            startRule: 'JsonStringContents'\n                        });\n                        cacheSet(jsonProp, ast);\n                        const propVars = gatherVarsFromAst(ast);\n                        store.vars.push(...propVars);\n\n                        return new ExpressionBinding(ast, jsonProp);\n                    } catch (err) {\n                        logError(wrapError(new Error('Unable to parse expression'), {\n                            additional: {\n                                expression: jsonProp\n                            }\n                        }));\n                        return undefined;\n                    }\n                } else {\n                    if (jsonProp === '@{}') {\n                        return '';\n                    } else if (jsonProp.startsWith('@{') && jsonProp.endsWith('}')) {\n                        return new VariableBinding(jsonProp.substring(2, jsonProp.length - 1));\n                    }\n                    try {\n                        return simpleUnescapeString(jsonProp);\n                    } catch (err: any) {\n                        logError(wrapError(err as Error, {\n                            additional: {\n                                expression: jsonProp\n                            }\n                        }));\n                        return undefined;\n                    }\n                }\n            }\n        } else if (Array.isArray(jsonProp) && maxDepth > 0) {\n            return jsonProp.map(item => prepareVarsObj(item, store, logError, maxDepth - 1));\n        } else if (typeof jsonProp === 'object' && maxDepth > 0) {\n            const res: Record<string, unknown> = {};\n            for (const key in jsonProp) {\n                res[key] = prepareVarsObj(jsonProp[key], store, logError, maxDepth - 1);\n            }\n            return res;\n        }\n    }\n    return jsonProp;\n}\n\nfunction applyVars<T>(\n    jsonProp: T,\n    opts: {\n        variables: VariablesMap;\n        customFunctions: CustomFunctions | undefined;\n        logError: LogError;\n        store: Store | undefined;\n        weekStartDay: number;\n        keepComplex?: boolean;\n    }\n): {\n    result: MaybeMissing<T>;\n    usedVars?: Set<Variable>;\n} {\n    if (jsonProp) {\n        if (\n            (process.env.ENABLE_EXPRESSIONS || process.env.ENABLE_EXPRESSIONS === undefined) &&\n            jsonProp instanceof ExpressionBinding\n        ) {\n            return jsonProp.apply<T>(opts);\n        } else if (\n            (!process.env.ENABLE_EXPRESSIONS && process.env.ENABLE_EXPRESSIONS !== undefined) &&\n            jsonProp instanceof VariableBinding\n        ) {\n            return {\n                result: jsonProp.apply(opts.variables) as T\n            };\n        } else if (Array.isArray(jsonProp)) {\n            let usedVars: Set<Variable> | undefined;\n            const arr = jsonProp.map(it => {\n                const subres = applyVars(it, opts);\n\n                if (subres.usedVars) {\n                    if (!usedVars) {\n                        usedVars = new Set();\n                    }\n                    for (const instance of subres.usedVars) {\n                        usedVars.add(instance);\n                    }\n                }\n\n                return subres.result;\n            });\n\n            return {\n                result: arr as MaybeMissing<T>,\n                usedVars\n            };\n        } else if (typeof jsonProp === 'object') {\n            const res: Record<string, unknown> = {};\n            let usedVars: Set<Variable> | undefined;\n            for (const key in jsonProp) {\n                const subres = applyVars(jsonProp[key as keyof typeof jsonProp], opts);\n                res[key] = subres.result;\n\n                if (subres.usedVars) {\n                    if (!usedVars) {\n                        usedVars = new Set();\n                    }\n                    for (const instance of subres.usedVars) {\n                        usedVars.add(instance);\n                    }\n                }\n            }\n            return {\n                result: res as MaybeMissing<T>,\n                usedVars\n            };\n        }\n    }\n    return {\n        result: jsonProp\n    };\n}\n\nexport interface PreparedExpression<T> {\n    vars: string[];\n    hasExpression: boolean;\n    applyVars: (\n        variables: VariablesMap,\n        customFunctions?: CustomFunctions,\n        keepComplex?: boolean\n    ) => {\n        result: MaybeMissing<T>;\n        usedVars?: Set<Variable>;\n    };\n}\n\nexport function prepareVars<T>(\n    jsonProp: T,\n    logError: LogError,\n    store: Store | undefined,\n    weekStartDay: number,\n    maxDepth = Infinity\n): PreparedExpression<T> {\n    const result: {\n        vars: string[];\n        hasExpression: boolean;\n    } = {\n        vars: [],\n        hasExpression: false\n    };\n    const root = prepareVarsObj(jsonProp, result, logError, maxDepth);\n\n    const vars = uniq(result.vars);\n\n    return {\n        vars,\n        hasExpression: result.hasExpression,\n        applyVars(variables, customFunctions, keepComplex) {\n            return applyVars<T>(root as T, {\n                variables,\n                customFunctions,\n                logError,\n                store,\n                weekStartDay,\n                keepComplex\n            });\n        }\n    };\n}\n","import type { Readable } from 'svelte/store';\nimport { writable } from 'svelte/store';\nimport type { Variable } from './variable';\n\nexport class GlobalVariablesController {\n    private _vars: Map<string, Variable> = new Map();\n    private _lastAddedVariable = writable('');\n\n    setVariable(variable: Variable): void {\n        const name = variable.getName();\n\n        if (this._vars.has(name)) {\n            throw new Error('Variable with the same name already exist');\n        } else {\n            this._vars.set(name, variable);\n            this._lastAddedVariable.set(name);\n        }\n    }\n\n    getVariable(variableName: string): Variable | undefined {\n        return this._vars.get(variableName);\n    }\n\n    list(): IterableIterator<Variable> {\n        return this._vars.values();\n    }\n\n    getVariables(): Map<string, Variable> {\n        return this._vars;\n    }\n\n    getLastAddedVariableStore(): Readable<string> {\n        return this._lastAddedVariable;\n    }\n}\n\nexport function createGlobalVariablesController() {\n    return new GlobalVariablesController();\n}\n","import type { DivTimer } from '../../typings/common';\nimport type { ExecAnyActionsFunc } from '../context/root';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { VariableType } from '../expressions/variable';\nimport { type LogError, wrapError } from './wrapError';\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\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 | undefined, action: string | null | undefined) {\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 async tickOrUnholdAction(timer: TimerState): Promise<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        await 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(async() => {\n                this.updateVariable(timer, duration);\n                if (\n                    timer.tickCountPredict &&\n                    timer.tickCount !== undefined &&\n                    timer.tickCount < timer.tickCountPredict\n                ) {\n                    await 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(async() => {\n                    await this.tickOrUnholdAction(timer);\n                    timer.tickPassed = ((performance.now() - started) - duration) % tick;\n                    if (timer.state === 'running') {\n                        startTick();\n                    }\n                }, duration);\n            };\n\n            startTick();\n        }\n    }\n\n    private applyVarsInt(val: string | number | undefined): number | undefined {\n        let res = this.applyVars(val);\n\n        if (typeof res === 'string') {\n            if (res === val) {\n                // non-expression, simple string - incorrect value\n                return undefined;\n            }\n            res = Number(res);\n        }\n        if (res === undefined || Number.isNaN(res) || Math.round(res) !== res) {\n            return undefined;\n        }\n        return res;\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        // duration < 0 is incorrect\n        // tick_interval <= is incorrect\n        if (timer.definition.duration !== undefined) {\n            timer.duration = this.applyVarsInt(timer.definition.duration);\n            if (timer.duration === undefined || timer.duration < 0) {\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.definition.tick_interval !== undefined) {\n            timer.tick = this.applyVarsInt(timer.definition.tick_interval);\n            if (timer.tick === undefined || timer.tick <= 0) {\n                this.logError(wrapError(new Error('Incorrect timer properties'), {\n                    additional: {\n                        id: timer.definition.id\n                    }\n                }));\n                return;\n            }\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 async callActions(timer: TimerState, type: 'tick' | 'end'): Promise<void> {\n        const actions = timer.definition[type === 'end' ? 'end_actions' : 'tick_actions'];\n\n        if (actions) {\n            return this.execAnyActions(actions, {\n                processUrls: false\n            });\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 async unholdAll(): Promise<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                    await this.tickOrUnholdAction(timer);\n                }\n\n                this.startOrResume(timer);\n            }\n        }\n    }\n}\n","import type { ActionArrayInsertValue, ActionArrayRemoveValue, ActionArraySetValue, WrappedError } from '../../typings/common';\nimport type { ArrayVariable, Variable } from '../../typings/variables';\nimport type { MaybeMissing } from '../expressions/json';\nimport { convertTypedValue } from '../expressions/utils';\nimport type { ComponentContext } from '../types/componentContext';\nimport { wrapError } from '../utils/wrapError';\n\nexport function arrayInsert(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayInsertValue>\n): void {\n    const { variable_name: name, index, value } = actionTyped;\n\n    if (!value || typeof index !== 'number' && index !== undefined) {\n        logError(wrapError(new Error('Incorrect array_insert_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index > list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else if (!value.type) {\n            logError(wrapError(new Error('Incorrect value type'), {\n                additional: {\n                    name\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            const val = convertTypedValue(value);\n            if (typeof index === 'number') {\n                newList.splice(index, 0, val);\n            } else {\n                newList.push(val);\n            }\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nexport function arrayRemove(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayRemoveValue>\n): void {\n    const { variable_name: name, index } = actionTyped;\n\n    if (typeof index !== 'number') {\n        logError(wrapError(new Error('Incorrect array_remove_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index >= list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            newList.splice(index, 1);\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nexport function arraySet(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArraySetValue>\n): void {\n    const { variable_name: name, index, value } = actionTyped;\n\n    if (!value || typeof index !== 'number') {\n        logError(wrapError(new Error('Incorrect array_set_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    handle(componentContext, variables, logError, actionTyped, variableInstance => {\n        const list = variableInstance.getValue();\n        if (typeof index === 'number' && (index < 0 || index >= list.length)) {\n            logError(wrapError(new Error(`Index out of bound for mutation ${actionTyped.type}`), {\n                additional: {\n                    name,\n                    index,\n                    length: list.length\n                }\n            }));\n        } else if (!value.type) {\n            logError(wrapError(new Error('Incorrect value type'), {\n                additional: {\n                    name\n                }\n            }));\n        } else {\n            const newList = list.slice();\n            newList[index] = convertTypedValue(value);\n            variableInstance.setValue(newList);\n        }\n    });\n}\n\nfunction handle(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionArrayRemoveValue | ActionArrayInsertValue | ActionArraySetValue>,\n    cb: (variableInstance: ArrayVariable) => void\n): void {\n    const { variable_name: name } = actionTyped;\n\n    if (!name) {\n        logError(wrapError(new Error(`Incorrect ${actionTyped.type} action`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n\n    if (!variableInstance) {\n        logError(wrapError(new Error('Cannot find variable'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const type = variableInstance.getType();\n    if (type === 'array') {\n        cb(variableInstance as ArrayVariable);\n    } else {\n        logError(wrapError(new Error('Trying to insert value into the non-array'), {\n            additional: {\n                name,\n                type\n            }\n        }));\n    }\n}\n","import type { ActionDictSetValue, WrappedError } from '../../typings/common';\nimport type { Variable } from '../../typings/variables';\nimport type { MaybeMissing } from '../expressions/json';\nimport { convertTypedValue } from '../expressions/utils';\nimport type { ComponentContext } from '../types/componentContext';\nimport { wrapError } from '../utils/wrapError';\n\nexport function dictSetValue(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionDictSetValue>\n): void {\n    const { variable_name: name, key, value } = actionTyped;\n\n    if (typeof key !== 'string') {\n        logError(wrapError(new Error('Incorrect dict_set_value action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    if (!name) {\n        logError(wrapError(new Error(`Incorrect ${actionTyped.type} action`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    if (value && !value.type) {\n        logError(wrapError(new Error('Incorrect value type'), {\n            additional: {\n                name\n            }\n        }));\n    }\n\n    const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n\n    if (!variableInstance) {\n        logError(wrapError(new Error('Cannot find variable'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const type = variableInstance.getType();\n    if (type === 'dict') {\n        const dict = variableInstance.getValue() as Record<string, unknown>;\n        const newDict = { ...dict };\n        if (value) {\n            newDict[key] = convertTypedValue(value);\n        } else {\n            delete newDict[key];\n        }\n        variableInstance.setValue(newDict);\n    } else {\n        logError(wrapError(new Error('Trying to set value into the non-dict'), {\n            additional: {\n                name,\n                type\n            }\n        }));\n    }\n}\n","import type { ActionCopyToClipboard, WrappedError } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport { wrapError } from '../utils/wrapError';\n\nexport function copyToClipboard(\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionCopyToClipboard>\n): void {\n    if (!(\n        actionTyped.content && (actionTyped.content.type === 'text' || actionTyped.content.type === 'url') &&\n        typeof actionTyped.content.value === 'string'\n    )) {\n        logError(wrapError(new Error('Incorrect action'), {\n            additional: {\n                action: actionTyped\n            }\n        }));\n        return;\n    }\n\n    if (!(\n        typeof navigator !== 'undefined' &&\n        'clipboard' in navigator &&\n        navigator.clipboard &&\n        'writeText' in navigator.clipboard &&\n        typeof navigator.clipboard.writeText === 'function'\n    )) {\n        logError(wrapError(new Error('Clipboard is unavailable'), {\n            additional: {\n                action: actionTyped\n            }\n        }));\n        return;\n    }\n\n    navigator.clipboard.writeText(actionTyped.content.value).catch(err => {\n        logError(wrapError(new Error('Failed to copy to the clipboard'), {\n            additional: {\n                originalError: String(err)\n            }\n        }));\n    });\n}\n","import type { AnimatorDirection, TypedValue } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\nimport type { Animator } from '../types/base';\nimport type { Variable, VariableType } from '../../typings/variables';\nimport type { ExecAnyActionsFunc } from '../context/root';\nimport { stringifyColor } from '../expressions/utils';\nimport { clamp } from './clamp';\nimport { parseColor } from './correctColor';\nimport { correctNonNegativeNumber } from './correctNonNegativeNumber';\nimport { correctPositiveNumber } from './correctPositiveNumber';\nimport { getEasing } from './easing';\nimport { lerp } from './lerp';\nimport { isPrefersReducedMotion } from './isPrefersReducedMotion';\n\nfunction correctDirection(direction: string | undefined): AnimatorDirection | undefined {\n    if (direction === 'normal' || direction === 'reverse' || direction === 'alternate' || direction === 'alternate_reverse') {\n        return direction;\n    }\n}\n\nexport type CalcedAnimator = MaybeMissing<Animator & {\n    start_value_typed: TypedValue;\n    end_value_typed: TypedValue;\n}>;\n\nexport interface AnimatorInstance {\n    stop(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createAnimator(\n    animator: CalcedAnimator,\n    variableInstance: Variable<any, VariableType>,\n    onEnd: () => void,\n    execAnyActions: ExecAnyActionsFunc\n): AnimatorInstance | undefined {\n    const duration = correctPositiveNumber(animator.duration, 0);\n\n    if (!duration || animator.type !== 'color_animator' && animator.type !== 'number_animator') {\n        return;\n    }\n\n    const startValue = (animator.start_value_typed ? animator.start_value_typed.value : animator.start_value) ??\n        variableInstance.getValue();\n    const endValue = animator.end_value_typed ? animator.end_value_typed.value : animator.end_value;\n\n    if (startValue === undefined || endValue === undefined) {\n        return;\n    }\n\n    if (\n        animator.type === 'color_animator' && (typeof startValue !== 'string' && startValue !== undefined || typeof endValue !== 'string') ||\n        animator.type === 'number_animator' && (typeof startValue !== 'number' && startValue !== undefined || typeof endValue !== 'number')\n    ) {\n        return;\n    }\n\n    const parsedStart = animator.type === 'color_animator' && parseColor(startValue as string);\n    const parsedEnd = animator.type === 'color_animator' && parseColor(endValue as string);\n    if (animator.type === 'color_animator' && (!parsedStart || !parsedEnd)) {\n        return;\n    }\n\n    const delay = correctNonNegativeNumber(animator.start_delay, 0);\n    const easing = getEasing(animator.interpolator || 'linear');\n    const direction = correctDirection(animator.direction) || 'normal';\n    // eslint-disable-next-line no-nested-ternary\n    const repeatCount = animator.repeat_count?.type === 'infinity' ?\n        Infinity :\n        (animator.repeat_count?.type === 'fixed' ? correctNonNegativeNumber(animator.repeat_count?.value, 1) : 1);\n\n    let animationTime = 0;\n    let localTime = performance.now();\n\n    const iterationDuration = (repeatCount === Infinity || !isPrefersReducedMotion()) ?\n        duration :\n        0;\n\n    const maxTime = repeatCount === Infinity ? Infinity : repeatCount * iterationDuration + delay;\n\n    function mix(t: number): string | number {\n        if (animator.type === 'color_animator') {\n            if (!parsedStart || !parsedEnd) {\n                throw new Error('Missing start/end value');\n            }\n            return stringifyColor({\n                a: clamp(lerp(parsedStart.a, parsedEnd.a, t), 0, 255),\n                r: clamp(lerp(parsedStart.r, parsedEnd.r, t), 0, 255),\n                g: clamp(lerp(parsedStart.g, parsedEnd.g, t), 0, 255),\n                b: clamp(lerp(parsedStart.b, parsedEnd.b, t), 0, 255)\n            });\n        }\n        return lerp(startValue as number, endValue as number, t);\n    }\n\n    function tick(now: number) {\n        const diff = now - localTime;\n        localTime = now;\n\n        animationTime += diff;\n\n        if (animationTime >= delay) {\n            let iterationNumber = Math.floor((animationTime - delay) / iterationDuration);\n\n            let t = (animationTime - delay - iterationNumber * iterationDuration) / iterationDuration;\n\n            if (iterationNumber >= repeatCount) {\n                iterationNumber = repeatCount - 1;\n                t = 1;\n            }\n\n            let dir: 'normal' | 'reverse';\n            if (\n                direction === 'normal' ||\n                (direction === 'alternate' && iterationNumber % 2 === 0) ||\n                direction === 'alternate_reverse' && iterationNumber % 2 === 1\n            ) {\n                dir = 'normal';\n            } else {\n                dir = 'reverse';\n            }\n\n            if (dir === 'reverse') {\n                t = 1 - t;\n            }\n\n            const value = mix(easing(t));\n            variableInstance.setValue(value);\n        }\n\n        if (animationTime < maxTime) {\n            timer = requestAnimationFrame(tick);\n        } else {\n            onEnd();\n            execAnyActions(animator.end_actions);\n        }\n    }\n\n    let timer = requestAnimationFrame(tick);\n\n    return {\n        stop() {\n            cancelAnimationFrame(timer);\n            execAnyActions(animator.cancel_actions);\n            execAnyActions(animator.end_actions);\n        }\n    };\n}\n","import type { ComponentContext } from '../types/componentContext';\n\nexport function getTooltipContext(componentContext: ComponentContext | undefined): ComponentContext | undefined {\n    let ctx = componentContext;\n    while (ctx && !ctx.isTooltipRoot) {\n        ctx = ctx.parent;\n    }\n    return ctx;\n}\n\nexport function getStateContext(componentContext: ComponentContext | undefined): ComponentContext | undefined {\n    let ctx = componentContext;\n    while (ctx?.parent && ctx.json.type !== 'state' && !ctx.isRootState && !ctx.isTooltipRoot) {\n        ctx = ctx.parent;\n    }\n    return ctx;\n}\n","import type { ActionSubmit, ActionSubmitHeader, ActionSubmitMethod } from '../../typings/common';\nimport type { MaybeMissing } from '../expressions/json';\n\nfunction checkString(str: string | undefined): boolean {\n    return Boolean(str && typeof str === 'string');\n}\n\nconst allowedMethods = new Set([\n    'get',\n    'post',\n    'put',\n    'patch',\n    'delete',\n    'head',\n    'options'\n]);\n\nfunction checkMethod(method: ActionSubmitMethod | undefined): boolean {\n    return method === undefined || allowedMethods.has(method);\n}\n\nfunction checkHeaders(headers: MaybeMissing<ActionSubmitHeader>[] | undefined): boolean {\n    return headers === undefined ||\n        Array.isArray(headers) &&\n            headers.every(header => checkString(header.name) && checkString(header.value));\n}\n\nexport function checkSubmitAction(action: MaybeMissing<ActionSubmit>): action is ActionSubmit {\n    return checkString(action.container_id) &&\n        checkString(action.request?.url) &&\n        checkMethod(action.request?.method) &&\n        checkHeaders(action.request?.headers);\n}\n","import type { ActionUpdateStructure, WrappedError } from '../../typings/common';\nimport type { Variable } from '../../typings/variables';\nimport type { MaybeMissing } from '../expressions/json';\nimport { convertTypedValue } from '../expressions/utils';\nimport type { ComponentContext } from '../types/componentContext';\nimport { wrapError } from '../utils/wrapError';\n\nexport function updateStructure(\n    componentContext: ComponentContext | undefined,\n    variables: Map<string, Variable>,\n    logError: (error: WrappedError) => void,\n    actionTyped: MaybeMissing<ActionUpdateStructure>\n): void {\n    const { variable_name: name, path, value } = actionTyped;\n\n    if (!value?.value) {\n        logError(wrapError(new Error('Missing value for an action'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    if (typeof path !== 'string' || !path || path.charAt(0) === '/' || path.charAt(path.length - 1) === '/') {\n        logError(wrapError(new Error(`Value '${path}' for key 'path' is not valid`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    if (!name) {\n        logError(wrapError(new Error(`Incorrect ${actionTyped.type} action`), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n\n    if (!variableInstance) {\n        logError(wrapError(new Error('Cannot find variable'), {\n            additional: {\n                name\n            }\n        }));\n        return;\n    }\n\n    const type = variableInstance.getType();\n    if (type === 'dict' || type === 'array') {\n        const obj = variableInstance.getValue() as Record<string, unknown>;\n        const processed = path.replace(/\\/+/g, '/');\n        if (processed === '/') {\n            logError(wrapError(new Error(`Value '${path}' for key 'path' is not valid`), {\n                additional: {\n                    name,\n                    type,\n                    path\n                }\n            }));\n            return;\n        }\n        const parts = processed.split('/');\n        const newObj = type === 'array' ? (obj as unknown as unknown[]).slice() : { ...obj };\n        let temp: any = newObj;\n        for (let i = 0; i < parts.length; ++i) {\n            const part = parts[i];\n\n            if (!part) {\n                logError(wrapError(new Error('Path is empty'), {\n                    additional: {\n                        name,\n                        type,\n                        path\n                    }\n                }));\n                return;\n            }\n\n            if (!temp || typeof temp !== 'object') {\n                logError(wrapError(new Error(`Element with path '${parts.slice(0, i).join('/')}' is not ${temp === undefined ? 'found' : 'a structure'}`), {\n                    additional: {\n                        name,\n                        type,\n                        path\n                    }\n                }));\n                return;\n            }\n            if (Array.isArray(temp)) {\n                const int = Number(part);\n                if (Number.isNaN(int)) {\n                    logError(wrapError(new Error(`Unable to use '${part}' as array index`), {\n                        additional: {\n                            name,\n                            type,\n                            path\n                        }\n                    }));\n                    return;\n                }\n                if (i + 1 === parts.length && (int < 0 || int > temp.length)) {\n                    logError(wrapError(new Error(`Position '${int}' is out of array bounds`), {\n                        additional: {\n                            name,\n                            type,\n                            path\n                        }\n                    }));\n                    return;\n                }\n            }\n\n            if (i + 1 < parts.length) {\n                temp = temp[part];\n            }\n        }\n\n        temp[parts[parts.length - 1]] = convertTypedValue(value);\n        variableInstance.setValue(newObj);\n    } else {\n        logError(wrapError(new Error('Action requires array or dictionary variable'), {\n            additional: {\n                name,\n                type\n            }\n        }));\n    }\n}\n","import { cubicInOut } from 'svelte/easing';\nimport type { Animation, AnyAnimation } from '../types/animation';\nimport { flattenAnimation } from './flattenAnimation';\nimport type { MaybeMissing } from '../expressions/json';\nimport { isPrefersReducedMotion } from './isPrefersReducedMotion';\nimport { getEasing } from './easing';\n\nconst DEFAULT_DURATION = 300;\nconst DEFAULT_DELAY = 0;\n\nexport function calcMaxDuration(transitions: MaybeMissing<AnyAnimation>[]): 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 function inOutAnimation(_node: HTMLElement, {\n    animations,\n    direction\n}: {\n    animations: MaybeMissing<Animation | undefined>;\n    direction: 'in' | 'out';\n}) {\n    if (!animations) {\n        return {};\n    }\n\n    const flattenList: MaybeMissing<AnyAnimation>[] = flattenAnimation(animations);\n    const maxDuration = calcMaxDuration(flattenList);\n    const hasNoAnimation = flattenList.some(it => it.name === 'no_animation');\n\n    if (hasNoAnimation) {\n        return {};\n    }\n\n    return {\n        duration: isPrefersReducedMotion() ? 0 : 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            }[] = flattenList.map(it => {\n                const delay = Number(it.start_delay) || DEFAULT_DELAY;\n                const duration = Number(it.duration) || DEFAULT_DURATION;\n                const relative = direction === 'in' ?\n                    Math.max(0, Math.min(1, (tMs - delay) / duration)) :\n                    Math.max(0, Math.min(1, (tMs - (maxDuration - duration) + delay) / duration));\n\n                const easing = getEasing(it.interpolator || 'ease_in_out') || cubicInOut;\n                const eased = easing(relative);\n\n                if (it.name === 'fade') {\n                    const startValue = direction === 'in' ? it.start_value ?? 0 : it.end_value ?? 0;\n                    const endValue = direction === 'in' ? it.end_value ?? 1 : it.start_value ?? 1;\n\n                    return {\n                        active: eased > 0 && eased < 1,\n                        opacity: (1 - eased) * startValue + eased * endValue\n                    };\n                } else if (it.name === 'translate') {\n                    const startValue = -(direction === 'in' ? it.start_value ?? 10 : it.end_value ?? 10);\n                    const endValue = -(direction === 'in' ? it.end_value ?? 0 : it.start_value ?? 0);\n\n                    return {\n                        active: eased > 0 && eased < 1,\n                        translate: `translateY(${(1 - eased) * startValue + eased * endValue}${(direction === 'in' && it.start_value !== undefined || direction === 'out' && it.end_value !== undefined) ? '%' : 'px'})`\n                    };\n                } else if (it.name === 'scale') {\n                    const startValue = direction === 'in' ? it.start_value ?? 0 : it.end_value ?? 0;\n                    const endValue = direction === 'in' ? it.end_value ?? 1 : it.start_value ?? 1;\n\n                    return {\n                        active: eased > 0 && eased < 1,\n                        scale: `scale(${(1 - eased) * startValue + eased * endValue})`\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 const hasDialogSupport = typeof window !== 'undefined' && 'HTMLDialogElement' in window;\n","<script lang=\"ts\" context=\"module\">\n    const DEFAULT_ANIMATION: Animation = {\n        name: 'set',\n        items: [{\n            name: 'translate'\n        }, {\n            name: 'fade'\n        }]\n    };\n\n    let openedTooltipsStack: HTMLElement[] = [];\n</script>\n\n<script lang=\"ts\">\n    import { afterUpdate, getContext, onDestroy, onMount } from 'svelte';\n\n    import rootCss from '../Root.module.css';\n    import css from './Tooltip.module.css';\n\n    import type { Tooltip } from '../../types/base';\n    import type { Animation } from '../../types/animation';\n    import type { ComponentContext } from '../../types/componentContext';\n    import type { MaybeMissing } from '../../expressions/json';\n    import Unknown from '../utilities/Unknown.svelte';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import { calcMaxDuration, inOutAnimation } from '../../utils/inOutAnimation';\n    import { hasDialogSupport } from '../../utils/hasDialogSupport';\n    import { flattenAnimation } from '../../utils/flattenAnimation';\n    import { isPrefersReducedMotion } from '../../utils/isPrefersReducedMotion';\n\n    export let ownerNode: HTMLElement;\n    export let data: MaybeMissing<Tooltip>;\n    export let internalId: number;\n    export let parentComponentContext: ComponentContext;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const isDesktop = rootCtx.isDesktop;\n\n    const creationTime = Date.now();\n\n    let tooltipNode: HTMLDialogElement | HTMLElement;\n    let childrenContainer: HTMLDivElement | HTMLElement;\n    let substrateContainer: HTMLDivElement | undefined;\n    let substratePlace: HTMLDivElement | undefined;\n    let visible = false;\n    let tooltipX = '';\n    let tooltipY = '';\n    let tooltipWidth = '';\n    let tooltipHeight = '';\n    let resizeObserver: ResizeObserver | null = null;\n    let componentContext: ComponentContext;\n    let substrateComponentContext: ComponentContext | undefined;\n    let modal = true;\n    let prevFocusedElement: Element | null = null;\n    let bringToTopNode: HTMLElement | undefined;\n    let bringToTopOrigVisibility = '';\n    let bringToTopClone: HTMLElement | undefined;\n    let bringToTopCloneContainer: HTMLElement;\n    let bringToTopObserver: ResizeObserver | undefined;\n\n    $: {\n        if (componentContext) {\n            componentContext.destroy();\n        }\n        componentContext = parentComponentContext.produceChildContext(data.div || {}, {\n            isTooltipRoot: true\n        });\n        if (data.substrate_div) {\n            substrateComponentContext = parentComponentContext.produceChildContext(data.substrate_div, {\n                isTooltipRoot: true\n            });\n        }\n    }\n\n    $: position = parentComponentContext.getDerivedFromVars(data.position);\n    $: offsetX = parentComponentContext.getDerivedFromVars(data.offset?.x?.value);\n    $: offsetY = parentComponentContext.getDerivedFromVars(data.offset?.y?.value);\n\n    $: animationIn = parentComponentContext.getDerivedFromVars(data.animation_in);\n    $: animationOut = parentComponentContext.getDerivedFromVars(data.animation_out);\n\n    $: animationInDuration = isPrefersReducedMotion() ?\n        0 :\n        calcMaxDuration(flattenAnimation($animationIn || DEFAULT_ANIMATION));\n    $: animationOutDuration = isPrefersReducedMotion() ?\n        0 :\n        calcMaxDuration(flattenAnimation($animationOut || DEFAULT_ANIMATION));\n\n    $: if (data.mode?.type === 'non_modal') {\n        modal = false;\n    } else {\n        modal = true;\n    }\n\n    $: mods = {\n        visible,\n        modal\n    };\n\n    function reposition(): void {\n        if (!tooltipNode || !ownerNode) {\n            return;\n        }\n        const parent = tooltipNode.parentElement;\n        if (!parent) {\n            return;\n        }\n\n        const prevTransform = tooltipNode.style.cssText;\n        // Override transform from the css animation in the inOutAnimation\n        // So it happens in the order:\n        // 1) Attach dom node\n        // 2) Run in-out transition\n        // 3) Call afterUpdate\n        tooltipNode.style.cssText += ';transform: none !important';\n\n        const ownerBbox = ownerNode.getBoundingClientRect();\n        const tooltipBbox = tooltipNode.getBoundingClientRect();\n        const parentBbox = parent.getBoundingClientRect();\n\n        tooltipNode.style.cssText = prevTransform;\n\n        let x = 0;\n        let y = 0;\n        let width: number | null = null;\n        let height: number | null = null;\n        let calcedWidth = 0;\n        let calcedHeight = 0;\n\n        const jsonWidth = componentContext?.json?.width;\n        const jsonHeight = componentContext?.json?.height;\n\n        if (!jsonWidth || jsonWidth.type === 'match_parent') {\n            calcedWidth = width = window.innerWidth;\n        } else if (jsonWidth.type === 'fixed' && jsonWidth.value) {\n            calcedWidth = width = jsonWidth.value;\n        } else {\n            calcedWidth = tooltipBbox.width;\n        }\n        if (jsonHeight?.type === 'match_parent') {\n            calcedHeight = height = window.innerHeight;\n        } else if (jsonHeight?.type === 'fixed' && jsonHeight.value) {\n            calcedHeight = height = jsonHeight.value;\n        } else {\n            calcedHeight = tooltipBbox.height;\n        }\n\n        if ($position === 'left' || $position === 'bottom-left' || $position === 'top-left') {\n            x = ownerBbox.left - calcedWidth;\n        } else if ($position === 'top' || $position === 'bottom' || $position === 'center') {\n            x = (ownerBbox.left + ownerBbox.right) / 2 - calcedWidth / 2;\n        } else if ($position === 'right' || $position === 'bottom-right' || $position === 'top-right') {\n            x = ownerBbox.right;\n        } else {\n            return;\n        }\n\n        if ($position === 'top' || $position === 'top-left' || $position === 'top-right') {\n            y = ownerBbox.top - calcedHeight;\n        } else if ($position === 'left' || $position === 'right' || $position === 'center') {\n            y = (ownerBbox.top + ownerBbox.bottom) / 2 - calcedHeight / 2;\n        } else if ($position === 'bottom-left' || $position === 'bottom' || $position === 'bottom-right') {\n            y = ownerBbox.bottom;\n        } else {\n            return;\n        }\n\n        if (!(hasDialogSupport && modal)) {\n            x -= parentBbox.left;\n            y -= parentBbox.top;\n        }\n\n        x += $offsetX || 0;\n        y += $offsetY || 0;\n\n        tooltipX = `${x}px`;\n        tooltipY = `${y}px`;\n        tooltipWidth = width !== null ? `${width}px` : '';\n        tooltipHeight = height !== null ? `${height}px` : '';\n        visible = true;\n\n        if (width === null || height === null) {\n            // wrap_content by any side\n            if (typeof ResizeObserver !== 'undefined' && !resizeObserver) {\n                resizeObserver = new ResizeObserver(() => {\n                    requestAnimationFrame(reposition);\n                });\n                resizeObserver.observe(tooltipNode);\n            }\n        } else {\n            resizeObserver?.disconnect();\n        }\n    }\n\n    function onOutClick(event: Event): void {\n        if (openedTooltipsStack.length && openedTooltipsStack[openedTooltipsStack.length - 1] !== tooltipNode) {\n            return;\n        }\n\n        const path = event.composedPath();\n\n        if (\n            Date.now() - creationTime < 100 ||\n            path.includes(tooltipNode) && !(hasDialogSupport && path[0] === tooltipNode)\n        ) {\n            return;\n        }\n\n        closeByOutside();\n    }\n\n    function closeByOutside(event?: Event): void {\n        event?.stopPropagation();\n        event?.preventDefault();\n\n        if (componentContext.getJsonWithVars(data.close_by_tap_outside) !== false) {\n            openedTooltipsStack = openedTooltipsStack.filter(it => it !== tooltipNode);\n            rootCtx.onTooltipClose(internalId);\n        }\n\n        if (data.tap_outside_actions) {\n            componentContext.execAnyActions(data.tap_outside_actions, {\n                processUrls: true\n            });\n        }\n    }\n\n    function onWindowResize(): void {\n        reposition();\n    }\n\n    function onKeyDown(event: KeyboardEvent): void {\n        if (openedTooltipsStack.length && openedTooltipsStack[openedTooltipsStack.length - 1] !== tooltipNode) {\n            return;\n        }\n\n        if (event.key === 'Escape' && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {\n            openedTooltipsStack = openedTooltipsStack.filter(it => it !== tooltipNode);\n            rootCtx.onTooltipClose(internalId);\n        }\n    }\n\n    function onClose(event: Event): void {\n        openedTooltipsStack = openedTooltipsStack.filter(it => it !== tooltipNode);\n        rootCtx.onTooltipClose(internalId);\n        event.preventDefault();\n    }\n\n    function onIntroStart(): void {\n        if (substrateContainer) {\n            // Manual animation, so it doesn't delay the dialog lifetime\n            substrateContainer.animate({ opacity: [0, 1] }, {\n                duration: animationInDuration,\n                easing: 'ease-in-out'\n            });\n        }\n    }\n\n    function onIntroEnd(): void {\n        if (substrateContainer) {\n            tooltipNode.insertBefore(substrateContainer, childrenContainer);\n            tooltipNode.insertBefore(bringToTopCloneContainer, childrenContainer);\n        }\n    }\n\n    function onOutroStart(): void {\n        if (substratePlace?.parentElement && substrateContainer) {\n            substratePlace.parentElement.insertBefore(substrateContainer, substratePlace);\n            substratePlace.parentElement.insertBefore(bringToTopCloneContainer, substratePlace);\n            substrateContainer.animate({ opacity: [1, 0] }, {\n                duration: animationOutDuration,\n                easing: 'ease-in-out'\n            });\n        }\n    }\n\n    function updateBringToTopClone(): void {\n        if (!bringToTopClone || !bringToTopNode) {\n            return;\n        }\n\n        const bbox = bringToTopNode.getBoundingClientRect();\n        bringToTopClone.style.position = 'absolute';\n        bringToTopClone.style.left = `${bbox.left}px`;\n        bringToTopClone.style.top = `${bbox.top}px`;\n        bringToTopClone.style.width = `${bbox.width}px`;\n        bringToTopClone.style.height = `${bbox.height}px`;\n        bringToTopClone.style.margin = '0';\n    }\n\n    onMount(() => {\n        try {\n            prevFocusedElement = document.activeElement;\n        } catch (_err) {}\n\n        if (rootCtx.tooltipRoot) {\n            const computed = window.getComputedStyle(tooltipNode);\n            tooltipNode.style.fontSize = computed.fontSize;\n            tooltipNode.style.fontFamily = computed.fontFamily;\n            tooltipNode.style.lineHeight = computed.lineHeight;\n            rootCtx.tooltipRoot.appendChild(tooltipNode);\n        }\n\n        if (hasDialogSupport && tooltipNode && tooltipNode instanceof HTMLDialogElement) {\n            tooltipNode[modal ? 'showModal' : 'show']();\n        }\n        if (modal) {\n            openedTooltipsStack.push(tooltipNode);\n        }\n\n        if (substrateComponentContext && substrateContainer && data.bring_to_top_id) {\n            bringToTopNode = rootCtx.findComponentById(data.bring_to_top_id)?.getViewInfo('node')?.() || undefined;\n\n            if (bringToTopNode) {\n                bringToTopClone = bringToTopNode.cloneNode(true) as HTMLElement;\n                bringToTopCloneContainer.appendChild(bringToTopClone);\n                bringToTopOrigVisibility = bringToTopNode.style.visibility;\n                bringToTopNode.style.visibility = 'hidden';\n\n                bringToTopObserver = new ResizeObserver(updateBringToTopClone);\n                bringToTopObserver.observe(bringToTopNode);\n                updateBringToTopClone();\n            }\n        } else {\n            bringToTopNode = undefined;\n        }\n    });\n\n    afterUpdate(() => {\n        if (!visible) {\n            reposition();\n        }\n    });\n\n    onDestroy(() => {\n        if (componentContext) {\n            componentContext.destroy();\n        }\n        if (substrateComponentContext) {\n            substrateComponentContext.destroy();\n        }\n\n        if (bringToTopNode && bringToTopClone) {\n            bringToTopNode.style.visibility = bringToTopOrigVisibility;\n        }\n\n        if (bringToTopObserver) {\n            bringToTopObserver.disconnect();\n        }\n\n        resizeObserver?.disconnect();\n\n        openedTooltipsStack = openedTooltipsStack.filter(it => it !== tooltipNode);\n\n        if (modal && prevFocusedElement && prevFocusedElement instanceof HTMLElement) {\n            if (hasDialogSupport && tooltipNode && tooltipNode instanceof HTMLDialogElement) {\n                tooltipNode.close();\n            }\n\n            try {\n                prevFocusedElement.focus({\n                    preventScroll: true\n                });\n            } catch (_err) {}\n        }\n    });\n</script>\n\n<svelte:window\n    on:resize={onWindowResize}\n/>\n\n<svelte:body\n    on:click|capture={onOutClick}\n/>\n\n{#if hasDialogSupport}\n    {#if substrateComponentContext}\n        <div\n            bind:this={substrateContainer}\n            class={css.tooltip__substrate}\n        >\n            <Unknown\n                componentContext={substrateComponentContext}\n            />\n        </div>\n\n        <div bind:this={substratePlace}></div>\n        <div\n            class={css['tooltip__clone-container']}\n            bind:this={bringToTopCloneContainer}\n            inert\n        ></div>\n    {/if}\n\n    <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n    <dialog\n        bind:this={tooltipNode}\n        class=\"{genClassName('tooltip', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''}\"\n        style:top={tooltipY}\n        style:left={tooltipX}\n        style:width={tooltipWidth}\n        style:height={tooltipHeight}\n        in:inOutAnimation|global={{ animations: $animationIn || DEFAULT_ANIMATION, direction: 'in' }}\n        out:inOutAnimation|global={{ animations: $animationOut || DEFAULT_ANIMATION, direction: 'out' }}\n        on:keydown={onKeyDown}\n        on:close={onClose}\n        on:cancel={onClose}\n        on:click={onOutClick}\n        on:introstart={onIntroStart}\n        on:introend={onIntroEnd}\n        on:outrostart={onOutroStart}\n    >\n        {#if visible && modal && data.background_accessibility_description}\n            <button\n                class={css.tooltip__overlay}\n                type=\"button\"\n                aria-label={data.background_accessibility_description}\n                on:click={closeByOutside}\n            ></button>\n        {/if}\n\n        <div class={css.tooltip__inner} bind:this={childrenContainer}>\n            <Unknown\n                {componentContext}\n            />\n        </div>\n    </dialog>\n{:else}\n    {#if visible && modal}\n        {#if data.background_accessibility_description}\n            <button\n                class={css.tooltip__overlay}\n                type=\"button\"\n                aria-label={data.background_accessibility_description}\n                on:click={closeByOutside}\n            ></button>\n        {:else}\n            <!-- svelte-ignore a11y-click-events-have-key-events -->\n            <!-- svelte-ignore a11y-no-static-element-interactions -->\n            <div\n                class={css.tooltip__overlay}\n                on:click={closeByOutside}\n            ></div>\n        {/if}\n    {/if}\n\n    {#if substrateComponentContext}\n        <div\n            bind:this={substrateContainer}\n            class={css.tooltip__substrate}\n        >\n            <Unknown\n                componentContext={substrateComponentContext}\n            />\n        </div>\n\n        <div bind:this={substratePlace}></div>\n        <div\n            class={css['tooltip__clone-container']}\n            bind:this={bringToTopCloneContainer}\n            inert\n        ></div>\n    {/if}\n\n    <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n    <div\n        bind:this={tooltipNode}\n        class=\"{genClassName('tooltip', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''}\"\n        role=\"dialog\"\n        aria-modal={modal}\n        style:top={tooltipY}\n        style:left={tooltipX}\n        style:width={tooltipWidth}\n        style:height={tooltipHeight}\n        in:inOutAnimation|global={{ animations: $animationIn || DEFAULT_ANIMATION, direction: 'in' }}\n        out:inOutAnimation|global={{ animations: $animationOut || DEFAULT_ANIMATION, direction: 'out' }}\n        on:keydown={onKeyDown}\n        on:introstart={onIntroStart}\n        on:introend={onIntroEnd}\n        on:outrostart={onOutroStart}\n    >\n        <div class={css.tooltip__inner} bind:this={childrenContainer}>\n            <Unknown\n                {componentContext}\n            />\n        </div>\n    </div>\n{/if}\n","import { cubicOut, cubicInOut, linear } from '../easing/index.js';\nimport { assign, split_css_unit, is_function } from '../internal/index.js';\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * https://svelte.dev/docs/svelte-transition#blur\n * @param {Element} node\n * @param {import('./public').BlurParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * https://svelte.dev/docs/svelte-transition#fade\n * @param {Element} node\n * @param {import('./public').FadeParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * https://svelte.dev/docs/svelte-transition#fly\n * @param {Element} node\n * @param {import('./public').FlyParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [xValue, xUnit] = split_css_unit(x);\n\tconst [yValue, yUnit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\n/**\n * Slides an element in and out.\n *\n * https://svelte.dev/docs/svelte-transition#slide\n * @param {Element} node\n * @param {import('./public').SlideParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => `${e[0].toUpperCase()}${e.slice(1)}`\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values.\n *\n * https://svelte.dev/docs/svelte-transition#scale\n * @param {Element} node\n * @param {import('./public').ScaleParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * https://svelte.dev/docs/svelte-transition#draw\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {import('./public').DrawParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs#template-syntax-element-directives-transition-fn) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * https://svelte.dev/docs/svelte-transition#crossfade\n * @param {import('./public').CrossfadeParams & {\n * \tfallback?: (node: Element, params: import('./public').CrossfadeParams, intro: boolean) => import('./public').TransitionConfig;\n * }} params\n * @returns {[(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig, (node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {import('./public').CrossfadeParams} params\n\t * @returns {import('./public').TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubicOut\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: is_function(duration) ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\tt + (1 - t) * dh\n\t\t\t});\n\t\t\t`\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(other_node, node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","<script lang=\"ts\">\n    import { afterUpdate, createEventDispatcher, getContext, onDestroy, onMount } from 'svelte';\n    import { fly } from 'svelte/transition';\n\n    import rootCss from '../Root.module.css';\n    import css from './Menu.module.css';\n\n    import type { MaybeMissing } from '../../expressions/json';\n    import type { ActionMenuItem } from '../../../typings/common';\n    import type { ComponentContext } from '../../types/componentContext';\n    import { genClassName } from '../../utils/genClassName';\n    import { ROOT_CTX, type RootCtxValue } from '../../context/root';\n    import Actionable from '../utilities/Actionable.svelte';\n\n    export let ownerNode: HTMLElement;\n    export let items: MaybeMissing<ActionMenuItem[]>;\n    export let parentComponentContext: ComponentContext;\n\n    const rootCtx = getContext<RootCtxValue>(ROOT_CTX);\n\n    const popupMix = rootCtx.getCustomization('menuPopupClass') || '';\n    const itemMix = rootCtx.getCustomization('menuItemClass') || '';\n\n    const isDesktop = rootCtx.isDesktop;\n\n    const creationTime = Date.now();\n\n    const dispatch = createEventDispatcher();\n\n    let menuNode: HTMLElement;\n    let visible = false;\n    let menuX = '';\n    let menuY = '';\n    let menuWidth = '';\n    let menuHeight = '';\n    let resizeObserver: ResizeObserver | null = null;\n\n    $: mods = {\n        visible\n    };\n\n    function reposition(): void {\n        if (!menuNode || !ownerNode) {\n            return;\n        }\n        const parent = menuNode.parentElement;\n        if (!parent) {\n            return;\n        }\n\n        const ownerBbox = ownerNode.getBoundingClientRect();\n        const menuBbox = menuNode.getBoundingClientRect();\n        const parentBbox = parent.getBoundingClientRect();\n        const windowWidth = window.innerWidth;\n        const windowHeight = window.innerHeight;\n\n        let x = 0;\n        let y = 0;\n        let width: number | null = null;\n        let height: number | null = null;\n        let calcedWidth = menuBbox.width;\n        let calcedHeight = menuBbox.height;\n\n        x = ownerBbox.left - parentBbox.left;\n        y = ownerBbox.bottom - parentBbox.top;\n\n        if (x + calcedWidth > windowWidth) {\n            x = windowWidth - calcedWidth;\n        }\n        if (x < 0) {\n            x = 0;\n        }\n        if (y + calcedHeight > windowHeight) {\n            if (ownerBbox.top - parentBbox.top - calcedHeight > 0) {\n                y = ownerBbox.top - parentBbox.top - calcedHeight;\n            } else {\n                y = windowHeight - calcedHeight;\n            }\n        }\n        if (y < 0) {\n            y = 0;\n        }\n\n        menuX = `${x}px`;\n        menuY = `${y}px`;\n        menuWidth = width !== null ? `${width}px` : '';\n        menuHeight = height !== null ? `${height}px` : '';\n        visible = true;\n\n        if (width === null || height === null) {\n            // wrap_content by any side\n            if (typeof ResizeObserver !== 'undefined' && !resizeObserver) {\n                resizeObserver = new ResizeObserver(() => {\n                    requestAnimationFrame(reposition);\n                });\n                resizeObserver.observe(menuNode);\n            }\n        } else {\n            resizeObserver?.disconnect();\n        }\n    }\n\n    function onWindowClick(event: Event): void {\n        if (Date.now() - creationTime < 100 || event.composedPath().includes(menuNode)) {\n            return;\n        }\n\n        dispatch('close');\n    }\n\n    function onWindowResize(): void {\n        reposition();\n    }\n\n    function onItemAction(): boolean {\n        dispatch('close');\n        return true;\n    }\n\n    onMount(() => {\n        if (rootCtx.tooltipRoot) {\n            const computed = window.getComputedStyle(menuNode);\n            menuNode.style.fontSize = computed.fontSize;\n            menuNode.style.fontFamily = computed.fontFamily;\n            menuNode.style.lineHeight = computed.lineHeight;\n            rootCtx.tooltipRoot.appendChild(menuNode);\n        }\n    });\n\n    afterUpdate(() => {\n        if (!visible) {\n            reposition();\n        }\n    });\n\n    onDestroy(() => {\n        resizeObserver?.disconnect();\n    });\n</script>\n\n<svelte:window\n    on:click={onWindowClick}\n    on:resize={onWindowResize}\n/>\n\n<div\n    bind:this={menuNode}\n    class=\"{genClassName('menu', css, mods)} {$isDesktop ? rootCss.root_platform_desktop : ''} {popupMix}\"\n    style:top={menuY}\n    style:left={menuX}\n    style:width={menuWidth}\n    style:height={menuHeight}\n    transition:fly={{ y: 20 }}\n>\n    <ul class={css.menu__list}>\n        {#each items as item}\n            <li>\n                <Actionable\n                    componentContext={parentComponentContext}\n                    actions={item.actions || (item.action && [item.action])}\n                    cls=\"{css.menu__item} {itemMix}\"\n                    customAction={onItemAction}\n                >\n                    {item.text}\n                </Actionable>\n            </li>\n        {/each}\n    </ul>\n</div>\n","<script lang=\"ts\" context=\"module\">\n    import { get, type Readable, type Unsubscriber, type Writable, writable } from 'svelte/store';\n\n    let isPointerFocus = writable(true);\n    let rootInstancesCount = 0;\n\n    function onWindowKeyDown() {\n        isPointerFocus.set(false);\n    }\n\n    function onWindowPointerDown() {\n        isPointerFocus.set(true);\n    }\n\n    const AVAIL_SET_STORED_TYPES = new Set(['string', 'integer', 'number', 'url', 'color', 'boolean']);\n    const AVAIL_SET_STORED_ALL_TYPES = new Set(['string', 'integer', 'number', 'url', 'color', 'boolean', 'array', 'dict']);\n</script>\n\n<script lang=\"ts\">\n    import { onDestroy, onMount, setContext, tick } from 'svelte';\n    import { derived } 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        DivExtension,\n        DivExtensionContext,\n        DivExtensionClass,\n        TypefaceProvider,\n        DerivedExpression,\n        DisappearAction,\n        FetchInit,\n        DivVariable,\n        Direction,\n        ActionMenuItem,\n        Patch,\n        VariableTrigger,\n        DownloadCallbacks,\n        ActionSubmit,\n        SubmitCallback,\n        ActionScrollTo,\n        ActionScrollBy,\n        Overflow,\n        VideoPlayerProvider,\n        DivFunction,\n        DivPropertyVariable,\n        CustomActionCallbackWithTyped\n    } from '../../typings/common';\n    import type { CustomComponentDescription } from '../../typings/custom';\n    import type { Animator, AppearanceTransition, DivBaseData, Tooltip, TransitionChange } from '../types/base';\n    import type { TintMode } from '../types/image';\n    import type { ComponentContext, InfoGetter, StateSetter } from '../types/componentContext';\n    import type { Store, StoreAllTypes, StoreScope, StoreTypes } from '../../typings/store';\n    import Unknown from './utilities/Unknown.svelte';\n    import RootSvgFilters from './utilities/RootSvgFilters.svelte';\n    import { ROOT_CTX, type NodeGetter, type ParentMethods, type RootCtxValue, type Running } from '../context/root';\n    import { applyTemplate } from '../utils/applyTemplate';\n    import { type LogError, wrapError, type WrappedError } from '../utils/wrapError';\n    import { checkCustomFunction, customFunctionWrap, mergeCustomFunctions, type CustomFunctions } from '../expressions/funcs/customFuncs';\n    import { simpleCheckInput } from '../utils/simpleCheckInput';\n    import { ACTION_CTX, type ActionCtxValue } from '../context/action';\n    import { STATE_CTX, type StateCtxValue } from '../context/state';\n    import { constStore } from '../utils/constStore';\n    import {\n        type MaybeMissing,\n        prepareVars\n    } from '../expressions/json';\n    import { evalExpression } from '../expressions/eval';\n    import { Truthy } from '../utils/truthy';\n    import { createConstVariable, createVariable, TYPE_TO_CLASS, Variable, variableValueFromString, type VariableType } from '../expressions/variable';\n    import { GlobalVariablesController } from '../expressions/globalVariablesController';\n    import { getUrlSchema, isBuiltinSchema } from '../utils/url';\n    import { TimersController } from '../utils/timers';\n    import { arrayInsert, arrayRemove, arraySet } from '../actions/array';\n    import { dictSetValue } from '../actions/dict';\n    import { copyToClipboard } from '../actions/copyToClipboard';\n    import { filterEnabledActions } from '../utils/filterEnabledActions';\n    import { ENABLED_CTX, type EnabledCtxValue } from '../context/enabled';\n    import { createAnimator, type AnimatorInstance } from '../utils/animators';\n    import { getStateContext, getTooltipContext } from '../utils/componentUtils';\n    import { checkSubmitAction } from '../utils/checkSubmitAction';\n    import { updateStructure } from '../actions/updateStructure';\n    import { VISIBILITY_CTX, type VisibilityCtxValue } from '../context/visibility';\n    import TooltipView from './tooltip/Tooltip.svelte';\n    import Menu from './menu/Menu.svelte';\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 themeVariableName: string | undefined = undefined;\n    export let globalVariablesController: GlobalVariablesController | undefined = undefined;\n    export let mix = '';\n    export let customization: Customization = {};\n    export let builtinProtocols: string[] = ['http', 'https', 'tel', 'mailto', 'intent'];\n    export let extensions: Map<string, DivExtensionClass> = new Map();\n    export let onError: ErrorCallback | undefined = undefined;\n    export let onStat: StatCallback | undefined = undefined;\n    export let onSubmit: SubmitCallback | undefined = undefined;\n    export let onCustomAction: CustomActionCallback | CustomActionCallbackWithTyped | undefined = undefined;\n    export let onComponent: ComponentCallback | undefined = undefined;\n    export let typefaceProvider: TypefaceProvider = _fontFamily => '';\n    export let fetchInit: FetchInit = {};\n    export let tooltipRoot: HTMLElement | undefined = undefined;\n    export let customComponents: Map<string, CustomComponentDescription> | undefined = undefined;\n    export let direction: Direction = 'ltr';\n    export let store: Store | undefined = undefined;\n    export let pagerChildrenClipEnabled = true;\n    export let pagerMouseDragEnabled = true;\n    export let weekStartDay = 0;\n    export let videoPlayerProvider: VideoPlayerProvider | undefined = undefined;\n    export let devtoolCreateHierarchy: 'lazy' | 'eager' = 'lazy';\n\n    let isMounted = true;\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    let themeVariable: Variable | undefined;\n    themeInit();\n\n    function themeInit(): void {\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\n    $: if (currentTheme) {\n        updateTheme();\n    }\n\n    const directionStore = writable<Direction>(direction === 'rtl' ? 'rtl' : 'ltr');\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        themeInit();\n    }\n\n    export function getDebugVariables() {\n        if (!process.env.DEVTOOL) {\n            return new Map<string, Variable>();\n        }\n\n        return localVariables;\n    }\n\n    export function getDebugAllVariables() {\n        if (!process.env.DEVTOOL) {\n            return new Map<string, Variable>();\n        }\n\n        return variables;\n    }\n\n    export function setData(newJson: Partial<DivJson>) {\n        json = newJson;\n    }\n\n    export function applyPatch(json: Patch): boolean {\n        return applyPatchInternal(json, logError);\n    }\n\n    const builtinSet = new Set(builtinProtocols);\n\n    let hasError = false;\n    let hasIdError = false;\n\n    $: {\n        hasError = false;\n\n        const initialError = simpleCheckInput(json);\n        if (initialError) {\n            hasError = true;\n            logError(initialError);\n        }\n    }\n\n    if (!id) {\n        hasIdError = true;\n        logError(wrapError(new Error('\"id\" prop is required')));\n    }\n\n    $: templates = json.templates || {};\n\n    const running: Record<Running, boolean> = {\n        stateChange: false\n    };\n\n    const variablesController = globalVariablesController || new GlobalVariablesController();\n\n    // Will notify about new global variables\n    const globalVariablesStore = variablesController.getLastAddedVariableStore();\n    // Global variables only\n    const globalVariables = variablesController.getVariables();\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    const awaitingGlobalVariablesFacades = new Map<string, Variable>();\n\n    let timersController: TimersController | null = null;\n\n    const allRunningAnimators: Set<AnimatorInstance> = new Set();\n\n    let tooltipCounter = 0;\n    let tooltips: {\n        internalId: number;\n        ownerNode: HTMLElement;\n        desc: MaybeMissing<Tooltip>;\n        timeoutId: number | null;\n        componentContext: ComponentContext;\n    }[] = [];\n    let menu: {\n        items: MaybeMissing<ActionMenuItem>[];\n        node: HTMLElement;\n        componentContext: ComponentContext | undefined;\n    } | undefined;\n\n    const timeouts: number[] = [];\n\n    function mergeMaps<T>(\n        variables0: Map<string, T>,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T>;\n    function mergeMaps<T>(\n        variables0: Map<string, T> | undefined,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T> | undefined;\n    function mergeMaps<T>(\n        variables0: Map<string, T> | undefined,\n        variables1: Map<string, T> | undefined\n    ): Map<string, T> | undefined {\n        if (variables0 && variables1) {\n            return new Map([...variables0, ...variables1]);\n        } else if (variables0) {\n            return variables0;\n        } else if (variables1) {\n            return variables1;\n        }\n\n        return undefined;\n    }\n\n    function getCustomization<K extends keyof Customization>(prop: K): Customization[K] | undefined {\n        return customization?.[prop];\n    }\n\n    function getDerivedFromVars<T>(\n        logError: LogError,\n        jsonProp: T,\n        {\n            additionalVars,\n            keepComplex = false,\n            customFunctions,\n            emptyVarsError,\n            maxDepth\n        }: {\n            additionalVars?: Map<string, Variable>;\n            keepComplex?: boolean;\n            customFunctions?: CustomFunctions;\n            emptyVarsError?: () => void,\n            maxDepth?: number\n        } = {}\n    ): Readable<MaybeMissing<T>> {\n        if (!jsonProp) {\n            return constStore(jsonProp);\n        }\n\n        const vars = mergeMaps(variables, additionalVars);\n\n        const prepared = prepareVars(jsonProp as T, logError, store, weekStartDay, maxDepth);\n        if (!prepared.vars.length) {\n            if (prepared.hasExpression) {\n                const res = prepared.applyVars(vars, customFunctions);\n\n                if (!res.usedVars?.size) {\n                    if (emptyVarsError) {\n                        emptyVarsError();\n                    }\n                    return constStore(res.result);\n                }\n            } else {\n                if (emptyVarsError) {\n                    emptyVarsError();\n                }\n                return constStore(jsonProp);\n            }\n        }\n\n        const stores = prepared.vars.map(name => {\n            return vars.get(name) || awaitVariableChanges(name);\n        }).filter(Truthy);\n\n        return writable<MaybeMissing<T>>(undefined, set => {\n            const usedVars = new Map<Variable, Unsubscriber>();\n            let unsubscribeDerived: (() => void) | undefined;\n\n            const evalExpr = () => {\n                const res = prepared.applyVars(vars, customFunctions, keepComplex);\n\n                for (const [instance, unsubscribe] of usedVars) {\n                    if (!res.usedVars?.has(instance)) {\n                        unsubscribe();\n                        usedVars.delete(instance);\n                    }\n                }\n                if (res.usedVars) {\n                    for (const instance of res.usedVars) {\n                        if (!usedVars.has(instance)) {\n                            let isFirst = true;\n                            usedVars.set(instance, instance.subscribe(() => {\n                                if (!isFirst) {\n                                    set(evalExpr());\n                                }\n                                isFirst = false;\n                            }));\n                        }\n                    }\n                }\n\n                return res.result;\n            };\n\n            unsubscribeDerived = derived(stores, evalExpr).subscribe(derivedResult => {\n                set(derivedResult);\n            });\n\n            return () => {\n                unsubscribeDerived?.();\n                for (const [_instance, unsubscribe] of usedVars) {\n                    unsubscribe();\n                }\n            };\n        });\n    }\n\n    function getJsonWithVars<T>(\n        logError: LogError,\n        jsonProp: T,\n        additionalVars?: Map<string, Variable>,\n        keepComplex = false,\n        customFunctions: CustomFunctions | undefined = undefined\n    ): MaybeMissing<T> {\n        const prepared = prepareVars(jsonProp, logError, store, weekStartDay);\n\n        if (!prepared.hasExpression) {\n            return jsonProp;\n        }\n\n        const vars = mergeMaps(variables, additionalVars);\n\n        return prepared.applyVars(vars, customFunctions, keepComplex).result;\n    }\n\n    function preparePrototypeVariables(\n        name: string,\n        data: Record<string, unknown>,\n        index: number\n    ): Map<string, Variable> {\n        const map = new Map<string, Variable>();\n\n        const dict = createConstVariable(name, 'dict', data);\n        map.set(name, dict);\n\n        const indexVar = createConstVariable('index', 'integer', index);\n        map.set('index', indexVar);\n\n        return map;\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: MaybeMissing<DivBaseData>, templateContext: TemplateContext): {\n        json: MaybeMissing<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 && 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 componentDevtoolReal({\n        type,\n        node,\n        json,\n        origJson,\n        templateContext,\n        componentContext,\n        devapi\n    }: {\n        type: 'mount' | 'update' | 'destroy';\n        node: HTMLElement | null;\n        json: MaybeMissing<DivBaseData>;\n        origJson: MaybeMissing<DivBaseData> | undefined;\n        templateContext: TemplateContext;\n        componentContext: ComponentContext;\n        devapi?: object;\n    }): void {\n        if (onComponent) {\n            onComponent({\n                type,\n                node,\n                json: json as DivBase,\n                origJson: origJson as DivBase | undefined,\n                templateContext,\n                componentContext,\n                devapi\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    const idPrefix = genId('byid') + '-id-';\n    const nodeGettersById = new Map<string, NodeGetter[]>();\n    const nodeById = new Map<string, HTMLElement>();\n\n    function fullId(id: string): string {\n        return idPrefix + id;\n    }\n\n    function registerId(id: string, getter: NodeGetter): () => void {\n        let arr = nodeGettersById.get(id) || [];\n        if (!nodeGettersById.has(id)) {\n            nodeGettersById.set(id, arr);\n        }\n        arr.push(getter);\n\n        return () => {\n            arr = arr.filter(it => it !== getter);\n            if (!arr.length) {\n                nodeGettersById.delete(id);\n            }\n\n            const full = fullId(id);\n\n            if (nodeById.has(full)) {\n                nodeById.delete(full);\n            }\n        };\n    }\n\n    function getComponentId(id: string): string {\n        const node = nodeGettersById.get(id)?.[0]?.node();\n\n        if (node) {\n            const full = fullId(id);\n            const prev = nodeById.get(full);\n\n            if (prev && prev !== node) {\n                prev.removeAttribute('id');\n            }\n            node.setAttribute('id', full);\n            nodeById.set(full, node);\n\n            return full;\n        }\n\n        return '';\n    }\n\n    async function setState(\n        stateId: string | null | undefined,\n        componentContext: ComponentContext | undefined\n    ): Promise<void> {\n        if (!stateId) {\n            throw new Error('Missing state id');\n        }\n\n        let parts = stateId.split('/');\n        const tooltipCtx = parts.length % 2 === 0 && getTooltipContext(componentContext);\n        let ctx: ComponentContext | undefined = tooltipCtx || rootComponentContext;\n        const log = (componentContext?.logError || logError);\n\n        if (!tooltipCtx) {\n            if (ctx.states?.root) {\n                const setters = ctx.states.root;\n                if (setters.length > 1) {\n                    log(wrapError(new Error('Error resolving state. Found multiple elements that respond to path'), {\n                        additional: {\n                            stateId\n                        }\n                    }));\n                    return;\n                }\n                ctx = await setters[0](parts[0]);\n                if (!ctx) {\n                    return;\n                }\n                parts = parts.slice(1);\n            } else {\n                return;\n            }\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            if (ctx.states?.[divId]) {\n                const setters: StateSetter[] = ctx.states[divId];\n                if (setters.length > 1) {\n                    log(wrapError(new Error('Error resolving state. Found multiple elements that respond to path'), {\n                        additional: {\n                            stateId\n                        }\n                    }));\n                    return;\n                }\n                ctx = await setters[0](selectedStateId);\n                if (!ctx) {\n                    return;\n                }\n            } else {\n                return;\n            }\n        }\n    }\n\n    async function callSubmit(\n        componentContext: ComponentContext | undefined,\n        action: MaybeMissing<ActionSubmit>,\n        origAction: MaybeMissing<ActionSubmit>,\n        targetContext: ComponentContext\n    ) {\n        const log = (componentContext?.logError || logError);\n\n        if (!checkSubmitAction(action)) {\n            log(wrapError(new Error('Incorrect submit action'), {\n                additional: {\n                    containerId: action.container_id\n                }\n            }));\n            return;\n        }\n\n        const vals: Record<string, unknown> = {};\n\n        if (targetContext.variables) {\n            for (const [key, variable] of targetContext.variables) {\n                const val = variable.getValue();\n\n                if (typeof val === 'bigint') {\n                    vals[key] = Number(val);\n                } else {\n                    vals[key] = val;\n                }\n            }\n        }\n\n        if (onSubmit) {\n            Promise.resolve()\n                .then(() => onSubmit(action, vals))\n                .then(() => {\n                    execAnyActions(origAction.on_success_actions, {\n                        componentContext\n                    });\n                })\n                .catch(() => {\n                    execAnyActions(origAction.on_fail_actions, {\n                        componentContext\n                    });\n                });\n\n            return;\n        }\n\n        const hasBody = Object.keys(vals).length > 0;\n        const method = (action.request.method || 'post').toLowerCase();\n\n        if ((method === 'get' || method === 'head') && hasBody) {\n            log(wrapError(new Error('Can\\'t send variables using the get/head method.'), {\n                additional: {\n                    url: action.request.url\n                }\n            }));\n            return;\n        }\n\n        let hasContentType = false;\n        const headers: [string, string][] = [];\n        action.request.headers?.forEach(header => {\n            headers.push([header.name, header.value]);\n            if (header.name.toLowerCase() === 'content-type') {\n                hasContentType = true;\n            }\n        });\n        if (!hasContentType) {\n            headers.push(['Content-Type', 'application/json']);\n        }\n\n        let init;\n        if (typeof fetchInit === 'function') {\n            init = fetchInit(action.request.url);\n        } else {\n            init = fetchInit;\n        }\n\n        // no await!\n        fetch(action.request.url, {\n            ...init,\n            method,\n            headers,\n            body: hasBody ? JSON.stringify(vals) : undefined\n        }).then(res => {\n            if (!res.ok) {\n                throw new Error('Response is not ok');\n            }\n            execAnyActions(origAction.on_success_actions, {\n                componentContext\n            });\n        }).catch(err => {\n            log(wrapError(new Error('Failed to submit'), {\n                additional: {\n                    url: action.request.url,\n                    originalError: err\n                }\n            }));\n            execAnyActions(origAction.on_fail_actions, {\n                componentContext\n            });\n        });\n    }\n\n    function callScrollTo(\n        scopeContext: ComponentContext,\n        actionTyped: MaybeMissing<ActionScrollTo>,\n        isScopeFound: boolean\n    ): void {\n        const target = findComponentContextWithInfo(scopeContext, actionTyped.id, 'scrollable', isScopeFound);\n        if (!target) {\n            return;\n        }\n\n        const info = target.getViewInfo('scrollable');\n        if (!info) {\n            return;\n        }\n\n        if (actionTyped.animated !== undefined && typeof actionTyped.animated !== 'boolean') {\n            scopeContext.logError(wrapError(new Error('Missing properties for \"scroll_to\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        switch (actionTyped.destination?.type) {\n            case 'index': {\n                if (typeof actionTyped.destination.value === 'number') {\n                    info.setCurrentItem(actionTyped.destination.value, actionTyped.animated ?? true);\n                }\n                break;\n            }\n            case 'offset': {\n                if (typeof actionTyped.destination.value === 'number') {\n                    info.scrollToPosition?.(actionTyped.destination.value, actionTyped.animated ?? true);\n                }\n                break;\n            }\n            case 'start': {\n                info.scrollToStart?.(actionTyped.animated ?? true);\n                break;\n            }\n            case 'end': {\n                info.scrollToEnd?.(actionTyped.animated ?? true);\n                break;\n            }\n            case 'item_id': {\n                if (actionTyped.destination.value && typeof actionTyped.destination.value === 'string') {\n                    info.scrollToItemId?.(actionTyped.destination.value, actionTyped.animated ?? true);\n                }\n                break;\n            }\n            default: {\n                scopeContext.logError(wrapError(new Error('Unknown destination for \"scroll_to\" action'), {\n                    additional: {\n                        id: actionTyped.id,\n                        destination: actionTyped.destination?.type\n                    }\n                }));\n            }\n        }\n    }\n\n    function callScrollBy(\n        scopeContext: ComponentContext,\n        actionTyped: MaybeMissing<ActionScrollBy>,\n        isScopeFound: boolean\n    ): void {\n        const target = findComponentContextWithInfo(scopeContext, actionTyped.id, 'scrollable', isScopeFound);\n        if (!target) {\n            return;\n        }\n\n        const info = target.getViewInfo('scrollable');\n        if (!info) {\n            return;\n        }\n\n        if (\n            typeof actionTyped.item_count !== 'number' && actionTyped.item_count !== undefined ||\n            typeof actionTyped.offset !== 'number' && actionTyped.offset !== undefined ||\n            actionTyped.overflow !== undefined && actionTyped.overflow !== 'clamp' && actionTyped.overflow !== 'ring' ||\n            actionTyped.animated !== undefined && typeof actionTyped.animated !== 'boolean'\n        ) {\n            scopeContext.logError(wrapError(new Error('Missing properties for \"scroll_by\" action'), {\n                additional: {\n                    id: actionTyped.id\n                }\n            }));\n            return;\n        }\n        info.scrollCombined?.({\n            step: actionTyped.item_count,\n            offset: actionTyped.offset,\n            overflow: actionTyped.overflow,\n            animated: actionTyped.animated\n        });\n    }\n\n    function switchElementAction(\n        scopeContext: ComponentContext,\n        isScopeFound: boolean,\n        type: 'set_current_item' | 'set_previous_item' | 'set_next_item' | 'scroll_to_start' |\n            'scroll_to_end' | 'scroll_backward' | 'scroll_forward' | 'scroll_to_position' |\n            'scroll_to_item_id',\n        id: string | null,\n        {\n            item,\n            step,\n            overflow,\n            animated,\n            itemId\n        }: {\n            item?: string | null;\n            step?: string | null;\n            overflow?: string | null;\n            animated?: string | null;\n            itemId?: string | null;\n        }\n    ): void {\n        if (!id) {\n            throw new Error(`Missing id for \"${type}\" action`);\n        }\n\n        const itemVal = Number(item);\n        if (type === 'set_current_item' && Number.isNaN(itemVal)) {\n            throw new Error(`Incorrect item for \"${type}\" action`);\n        }\n\n        let stepVal = Number(step);\n        if (!step && (type === 'set_previous_item' || type === 'set_next_item')) {\n            stepVal = 1;\n        }\n        if (\n            !step && (type === 'scroll_backward' || type === 'scroll_forward' || type === 'scroll_to_position') ||\n            Number.isNaN(stepVal)\n        ) {\n            throw new Error(`Incorrect step value for \"${type}\" action`);\n        }\n\n        if (overflow && overflow !== 'clamp' && overflow !== 'ring') {\n            throw new Error(`Incorrect overflow value for \"${type}\" action`);\n        }\n        overflow = overflow || 'clamp';\n\n        const isAnimated = animated === null || animated !== '0' && animated !== 'false';\n\n        const target = findComponentContextWithInfo(scopeContext, id, 'scrollable', isScopeFound);\n        if (!target) {\n            return;\n        }\n\n        const info = target.getViewInfo('scrollable');\n        if (!info) {\n            return;\n        }\n\n        switch (type) {\n            case 'set_current_item':\n                info.setCurrentItem(itemVal, isAnimated);\n                return;\n            case 'set_previous_item':\n                info.setPreviousItem(stepVal, overflow as Overflow, isAnimated);\n                return;\n            case 'set_next_item':\n                info.setNextItem(stepVal, overflow as Overflow, isAnimated);\n                return;\n            case 'scroll_to_start':\n                info.scrollToStart?.(isAnimated);\n                return;\n            case 'scroll_to_end':\n                info.scrollToEnd?.(isAnimated);\n                return;\n            case 'scroll_backward':\n                info.scrollCombined?.({\n                    offset: -stepVal,\n                    overflow: overflow as Overflow,\n                    animated: isAnimated\n                });\n                return;\n            case 'scroll_forward':\n                info.scrollCombined?.({\n                    offset: stepVal,\n                    overflow: overflow as Overflow,\n                    animated: isAnimated\n                });\n                return;\n            case 'scroll_to_position':\n                info.scrollToPosition?.(stepVal, isAnimated);\n                return;\n            case 'scroll_to_item_id':\n                if (itemId && typeof itemId === 'string') {\n                    info.scrollToItemId?.(itemId, isAnimated);\n                }\n                return;\n        }\n    }\n\n    function applyPatchInternal(json: Patch, log: LogError, url?: string): boolean {\n        if (json.templates) {\n            for (const name in json.templates) {\n                if (!templates.hasOwnProperty(name)) {\n                    templates[name] = json.templates[name];\n                }\n            }\n        }\n        if (Array.isArray(json.patch?.changes)) {\n            if (json.patch.mode === 'transactional') {\n                const failed = json.patch.changes.find(change => {\n                    const methods = parentOfMap.get(change.id);\n                    if (!methods) {\n                        return true;\n                    }\n                    const newItemsLen = Array.isArray(change.items) ? change.items.length : 0;\n                    if (methods.isSingleMode && newItemsLen !== 1) {\n                        return true;\n                    }\n                    return false;\n                });\n                if (failed) {\n                    log(wrapError(new Error('Skipping transactional, child is not found or broken'), {\n                        additional: {\n                            url,\n                            id: failed.id\n                        }\n                    }));\n                    execAnyActions(json.patch?.on_failed_actions);\n                    return false;\n                }\n            }\n            json.patch.changes.forEach(change => {\n                const methods = parentOfMap.get(change.id);\n                if (methods) {\n                    methods.replaceWith(change.id, change.items);\n                }\n            });\n            execAnyActions(json.patch?.on_applied_actions);\n            return true;\n        }\n\n        return false;\n    }\n\n    function callDownloadAction(\n        url: string | null | undefined,\n        callbacks: MaybeMissing<DownloadCallbacks | undefined>,\n        componentContext?: ComponentContext\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (url) {\n            let init;\n            if (typeof fetchInit === 'function') {\n                init = fetchInit(url);\n            } else {\n                init = fetchInit;\n            }\n            fetch(url, init).then(res => {\n                if (!res.ok) {\n                    throw new Error('Response is not ok');\n                }\n                return res.json();\n            }).then((json: Patch) => {\n                if (!json) {\n                    log(wrapError(new Error('Incorrect patch'), {\n                        additional: {\n                            url\n                        }\n                    }));\n                    execAnyActions(callbacks?.on_fail_actions, {\n                        componentContext\n                    });\n                    return;\n                }\n                if (applyPatchInternal(json, log, url)) {\n                    execAnyActions(callbacks?.on_success_actions, {\n                        componentContext\n                    });\n                } else {\n                    execAnyActions(callbacks?.on_fail_actions, {\n                        componentContext\n                    });\n                }\n            }).catch(err => {\n                log(wrapError(new Error('Failed to download the patch'), {\n                    additional: {\n                        url,\n                        originalError: err\n                    }\n                }));\n                execAnyActions(callbacks?.on_fail_actions, {\n                    componentContext\n                });\n            });\n        } else {\n            log(wrapError(new Error('Missing url in download action'), {\n                additional: {\n                    url\n                }\n            }));\n        }\n    }\n\n    function callShowTooltip(\n        id: string | null | undefined,\n        multiple: string | boolean | null | undefined,\n        componentContext: ComponentContext | undefined,\n        scopeContext: ComponentContext,\n        isScopeFound: boolean\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (!id) {\n            log(wrapError(new Error('Missing id in show_tooltip action')));\n            return;\n        }\n\n        const targetContexts = findTooltip(scopeContext, id, isScopeFound, false);\n        const targetContext = targetContexts?.[0];\n        if (!targetContext) {\n            return;\n        }\n\n        const tooltipsList = targetContext.getViewInfo('tooltips');\n        const node = targetContext.getViewInfo('node')?.();\n\n        const tooltip = tooltipsList?.find(it => it.id === id);\n        if (!tooltip || !node) {\n            log(wrapError(new Error('Tooltip with the provided id is not found'), {\n                additional: {\n                    id\n                }\n            }));\n            return;\n        }\n        if ((multiple !== 'true' && multiple !== true) && targetContext.shownTooltips?.has(id)) {\n            return;\n        }\n        targetContext.shownTooltips ||= new Set();\n        targetContext.shownTooltips.add(id);\n\n        const info = {\n            internalId: ++tooltipCounter,\n            ownerNode: node,\n            desc: tooltip,\n            timeoutId: 0,\n            componentContext: targetContext\n        };\n        tooltips = [...tooltips, info];\n\n        const duration = tooltip.duration ?? 5000;\n        if (duration) {\n            info.timeoutId = window.setTimeout(() => {\n                info.timeoutId = 0;\n                tooltips = tooltips.filter(it => it.internalId !== info.internalId);\n            }, duration);\n        }\n    }\n\n    function callHideTooltip(\n        id: string | null | undefined,\n        componentContext: ComponentContext | undefined,\n        scopeContext: ComponentContext,\n        isScopeFound: boolean\n    ): void {\n        const log = (componentContext?.logError || logError);\n\n        if (!id) {\n            log(wrapError(new Error('Missing id in hide_tooltip action')));\n            return;\n        }\n\n        const targetContexts = findTooltip(scopeContext, id, isScopeFound, true);\n        if (!targetContexts?.length) {\n            return;\n        }\n\n        tooltips = tooltips.filter(it => {\n            const res = !(it.desc.id === id && targetContexts.includes(it.componentContext));\n\n            if (!res && it.timeoutId) {\n                clearTimeout(it.timeoutId);\n                it.timeoutId = null;\n            }\n\n            return res;\n        });\n    }\n\n    // eslint-disable-next-line max-params\n    function callSetStoredValue(\n        componentContext: ComponentContext | undefined,\n        name: string | null | undefined,\n        value: object | string | bigint | number | boolean | null | undefined,\n        type: string | null | undefined,\n        lifetime: string | number | null | undefined,\n        scope?: string | null | undefined\n    ): void {\n        const log = componentContext?.logError || logError;\n        if (!store) {\n            log(wrapError(new Error('Store is not configured')));\n            return;\n        }\n\n        let val = value;\n\n        if (!name || !val || !type || !lifetime) {\n            log(wrapError(new Error('Missing required params for set_stored_value')));\n            return;\n        }\n        if (!AVAIL_SET_STORED_ALL_TYPES.has(type)) {\n            log(wrapError(new Error('Incorrect stored type')));\n            return;\n        }\n\n        if (type === 'boolean') {\n            val = val === 'true' || val === '1';\n        }\n\n        const scopeValue: StoreScope | undefined = (scope === 'global' || scope === 'card') ?\n            scope :\n            undefined;\n\n        if (store.set) {\n            store.set(name, type as StoreAllTypes, val, Number(lifetime), scopeValue);\n        } else if (store.setValue) {\n            if (!AVAIL_SET_STORED_TYPES.has(type)) {\n                log(wrapError(new Error('Incorrect stored type')));\n                return;\n            }\n            if (typeof val !== 'string' && typeof val !== 'number' && typeof val !== 'boolean') {\n                log(wrapError(new Error('Incorrect stored value')));\n                return;\n            }\n            if (type === 'integer' || type === 'number') {\n                val = Number(val);\n            }\n            store.setValue(name, type as StoreTypes, val, Number(lifetime));\n        }\n    }\n\n    export function execAction(action: MaybeMissing<Action | VisibilityAction | DisappearAction>): void {\n        execActionInternal(getJsonWithVars(logError, action, undefined, true), action);\n    }\n\n    function findComponentContextWithInfo<K extends keyof InfoGetter>(\n        scope: ComponentContext,\n        id: string | null | undefined,\n        infoName: K,\n        isScopeFound: boolean\n    ): ComponentContext | undefined {\n        if (!id) {\n            return;\n        }\n\n        const found = new Set<ComponentContext>();\n\n        const walk = (context: ComponentContext) => {\n            if (context.children) {\n                for (const child of context.children) {\n                    walk(child);\n                }\n            }\n            if (context.id === id && context.getViewInfo(infoName)) {\n                found.add(context);\n            }\n        };\n        walk(scope);\n\n        if (found.size === 1) {\n            return [...found][0];\n        } else if (found.size > 1) {\n            scope.logError(wrapError(new Error(`Element with id '${id}' is ambiguous${isScopeFound ? ' in scope' : ''}`), {\n                additional: {\n                    count: found.size\n                }\n            }));\n        } else {\n            scope.logError(wrapError(new Error(`Element with id '${id}' not found${isScopeFound ? ' in scope' : ''}`)));\n        }\n    }\n\n    function findAnimator(\n        scope: ComponentContext,\n        animatorId: string,\n        isScopeFound: boolean\n    ): ComponentContext | undefined {\n        const found = new Set<ComponentContext>();\n\n        const walk = (context: ComponentContext) => {\n            if (context.children) {\n                for (const child of context.children) {\n                    walk(child);\n                }\n            }\n            const animator = context.getAnimator(animatorId);\n            if (animator) {\n                found.add(context);\n            }\n        };\n        walk(scope);\n\n        if (found.size === 1) {\n            return [...found][0];\n        } else if (found.size > 1) {\n            scope.logError(wrapError(new Error(`Animator with id '${animatorId}' is ambiguous${isScopeFound ? ' in scope' : ''}`), {\n                additional: {\n                    count: found.size\n                }\n            }));\n        } else {\n            scope.logError(wrapError(new Error(`Animator with id '${animatorId}' not found${isScopeFound ? ' in scope' : ''}`)));\n        }\n    }\n\n    function findTooltip(\n        scope: ComponentContext,\n        tooltipId: string,\n        isScopeFound: boolean,\n        multiple: boolean\n    ): ComponentContext[] | undefined {\n        const found = new Set<ComponentContext>();\n\n        const walk = (context: ComponentContext) => {\n            if (context.children) {\n                for (const child of context.children) {\n                    walk(child);\n                }\n            }\n            const tooltips = context.getViewInfo('tooltips');\n            if (tooltips) {\n                for (const tooltip of tooltips) {\n                    if (tooltip.id === tooltipId) {\n                        found.add(context);\n                    }\n                }\n            }\n        };\n        walk(scope);\n\n        if (found.size === 1 || found.size > 1 && multiple) {\n            return [...found];\n        } else if (found.size > 1) {\n            scope.logError(wrapError(new Error(`Tooltip with id '${tooltipId}' is ambiguous${isScopeFound ? ' in scope' : ''}`), {\n                additional: {\n                    count: found.size\n                }\n            }));\n        } else {\n            scope.logError(wrapError(new Error(`Tooltip with id '${tooltipId}' not found${isScopeFound ? ' in scope' : ''}`)));\n        }\n    }\n\n    async function execActionInternal(\n        action: MaybeMissing<Action | VisibilityAction | DisappearAction>,\n        origAction: MaybeMissing<Action | VisibilityAction | DisappearAction>,\n        componentContext?: ComponentContext\n    ): Promise<void> {\n        if (!filterEnabledActions(action)) {\n            return;\n        }\n\n        const scopeId = action.scope_id;\n        const log = (componentContext?.logError || logError);\n        const actionTyped = action.typed;\n        const typedType = actionTyped?.type;\n\n        const actionUrl = action.url ? String(action.url) : '';\n        const urlType = actionUrl.startsWith('div-action://') ? /^div-action:\\/\\/(.+)($|\\?)/.exec(actionUrl)?.[0] : '';\n\n        const isNewLogic =\n            typedType === 'focus_element' ||\n            typedType === 'clear_focus' ||\n            typedType === 'set_cursor_position' ||\n            typedType === 'animator_start' ||\n            typedType === 'animator_stop' ||\n            typedType === 'video' ||\n            urlType === 'video' ||\n            typedType === 'scroll_to' ||\n            typedType === 'scroll_by' ||\n            urlType === 'set_current_item' ||\n            urlType === 'set_previous_item' ||\n            urlType === 'set_next_item' ||\n            urlType === 'scroll_to_start' ||\n            urlType === 'scroll_to_end' ||\n            urlType === 'scroll_backward' ||\n            urlType === 'scroll_forward' ||\n            urlType === 'scroll_to_position' ||\n            urlType === 'scroll_to_item_id' ||\n            typedType === 'submit' ||\n            typedType === 'show_tooltip' ||\n            typedType === 'hide_tooltip' ||\n            urlType === 'show_tooltip' ||\n            urlType === 'hide_tooltip';\n\n        let scopeContext = rootComponentContext;\n        let isScopeFound = false;\n\n        if (scopeId) {\n            const set = componentContextMap.get(scopeId);\n            if (set && set?.size > 1) {\n                if (isNewLogic) {\n                    logError(wrapError(new Error(`Scope with id '${scopeId}' is ambiguous`), {\n                        additional: {\n                            count: set.size\n                        }\n                    }));\n                    return;\n                    // eslint-disable-next-line no-else-return\n                } else {\n                    log(wrapError(new Error(`Ambiguous scope id. There are ${set.size} divs with id '${scopeId}'`), {\n                        additional: {\n                            count: set.size,\n                            scopeId\n                        }\n                    }));\n                }\n            } else if (set?.size === 1) {\n                const first = set.values().next().value;\n                if (first) {\n                    scopeContext = first;\n                    componentContext = first;\n                    isScopeFound = true;\n                }\n            } else {\n                // eslint-disable-next-line no-lonely-if\n                if (isNewLogic) {\n                    log(wrapError(new Error(`Scope with id '${scopeId}' not found`)));\n                } else {\n                    log(wrapError(new Error('The scope with the specified scope_id is missing'), {\n                        additional: {\n                            scopeId\n                        }\n                    }));\n                    return;\n                }\n            }\n        }\n\n        if (actionTyped) {\n            switch (actionTyped.type) {\n                case 'set_variable': {\n                    const { variable_name: name, value } = actionTyped;\n                    if (name && value) {\n                        const variableInstance = componentContext?.getVariable(name) || variables.get(name);\n                        if (variableInstance) {\n                            const type = variableInstance.getType();\n                            if (type === value.type) {\n                                variableInstance.setValue(value.value);\n                            } else {\n                                log(wrapError(new Error('Trying to set value with invalid type'), {\n                                    additional: {\n                                        name,\n                                        type: value.type\n                                    }\n                                }));\n                            }\n                        } else {\n                            log(wrapError(new Error('Cannot find variable'), {\n                                additional: {\n                                    name\n                                }\n                            }));\n                        }\n                    } else {\n                        log(wrapError(new Error('Incorrect set_variable action'), {\n                            additional: {\n                                name\n                            }\n                        }));\n                    }\n                    break;\n                }\n                case 'array_insert_value':\n                    arrayInsert(componentContext, variables, log, actionTyped);\n                    break;\n                case 'array_remove_value':\n                    arrayRemove(componentContext, variables, log, actionTyped);\n                    break;\n                case 'array_set_value':\n                    arraySet(componentContext, variables, log, actionTyped);\n                    break;\n                case 'copy_to_clipboard':\n                    copyToClipboard(log, actionTyped);\n                    break;\n                case 'focus_element': {\n                    const target = findComponentContextWithInfo(scopeContext, actionTyped.element_id, 'focus', isScopeFound);\n                    if (target) {\n                        const info = target.getViewInfo('focus');\n                        if (info) {\n                            info();\n                        }\n                    }\n                    break;\n                }\n                case 'clear_focus': {\n                    try {\n                        if (document.activeElement instanceof HTMLElement) {\n                            document.activeElement.blur();\n                        }\n                    } catch (err) {\n                        // do nothing\n                    }\n                    break;\n                }\n                case 'dict_set_value': {\n                    dictSetValue(componentContext, variables, log, actionTyped);\n                    break;\n                }\n                case 'animator_start': {\n                    const animatorId = actionTyped.animator_id;\n                    if (!animatorId) {\n                        log(wrapError(new Error('Incorrect animator_start action')));\n                        return;\n                    }\n\n                    const targetContext = findAnimator(scopeContext, animatorId, isScopeFound);\n                    const animatorDef = targetContext?.getAnimator(animatorId);\n\n                    if (!targetContext || !animatorDef) {\n                        return;\n                    }\n\n                    const {\n                        duration,\n                        start_delay,\n                        interpolator,\n                        direction,\n                        repeat_count,\n                        start_value: start_value_typed,\n                        end_value: end_value_typed\n                    } = actionTyped;\n\n                    const evalledDef = targetContext.getJsonWithVars(animatorDef);\n\n                    const props = {\n                        ...evalledDef,\n                        end_actions: animatorDef.end_actions,\n                        cancel_actions: animatorDef.cancel_actions,\n                        duration: duration !== undefined ? duration : evalledDef.duration,\n                        start_delay: start_delay !== undefined ? start_delay : evalledDef.start_delay,\n                        interpolator: interpolator !== undefined ? interpolator : evalledDef.interpolator,\n                        direction: direction !== undefined ? direction : evalledDef.direction,\n                        repeat_count: repeat_count !== undefined ? repeat_count : evalledDef.repeat_count,\n                        start_value_typed,\n                        end_value_typed\n                    };\n\n                    const instance = animatorDef.variable_name &&\n                        (\n                            targetContext.getVariable(animatorDef.variable_name) ||\n                            variables.get(animatorDef.variable_name)\n                        );\n                    if (!instance) {\n                        return;\n                    }\n\n                    const runningAnimators = targetContext.runningAnimators || new Map();\n                    targetContext.runningAnimators ||= runningAnimators;\n\n                    const prevAnimator = runningAnimators.get(animatorDef.id as string);\n                    if (prevAnimator) {\n                        prevAnimator.stop();\n                    }\n\n                    const animator = createAnimator(props, instance, () => {\n                        runningAnimators.delete(animatorDef.id as string);\n                        if (animator) {\n                            allRunningAnimators.delete(animator);\n                        }\n                    }, (actions, opts) => {\n                        return targetContext.execAnyActions(actions, opts);\n                    });\n                    if (animator) {\n                        runningAnimators.set(animatorDef.id as string, animator);\n                        allRunningAnimators.add(animator);\n                    }\n\n                    break;\n                }\n                case 'animator_stop': {\n                    const animatorId = actionTyped.animator_id as string;\n                    const targetContext = findAnimator(scopeContext, animatorId, isScopeFound);\n                    const runningAnimators = targetContext?.runningAnimators;\n                    const animator = runningAnimators?.get(animatorId);\n                    if (runningAnimators && animator) {\n                        animator.stop();\n                        runningAnimators.delete(animatorId);\n                        allRunningAnimators.delete(animator);\n                    }\n\n                    break;\n                }\n                case 'show_tooltip': {\n                    callShowTooltip(actionTyped.id, actionTyped.multiple, componentContext, scopeContext, isScopeFound);\n                    break;\n                }\n                case 'hide_tooltip': {\n                    callHideTooltip(actionTyped.id, componentContext, scopeContext, isScopeFound);\n                    break;\n                }\n                case 'timer': {\n                    if (timersController) {\n                        timersController.execTimerAction(actionTyped.id, actionTyped.action);\n                    } else {\n                        log(wrapError(new Error('Incorrect timer action'), {\n                            additional: {\n                                id: actionTyped.id,\n                                action: actionTyped.action\n                            }\n                        }));\n                    }\n                    break;\n                }\n                case 'download': {\n                    callDownloadAction(actionTyped.url, origAction.typed as DownloadCallbacks, componentContext);\n                    break;\n                }\n                case 'video': {\n                    const target = findComponentContextWithInfo(scopeContext, actionTyped.id, 'video', isScopeFound);\n                    if (target) {\n                        const info = target.getViewInfo('video');\n                        if (info && (actionTyped.action === 'start' || actionTyped.action === 'pause')) {\n                            info[actionTyped.action]();\n                        }\n                    }\n                    break;\n                }\n                case 'set_stored_value': {\n                    callSetStoredValue(\n                        componentContext,\n                        actionTyped.name,\n                        actionTyped.value?.value,\n                        actionTyped.value?.type,\n                        actionTyped.lifetime,\n                        actionTyped.scope\n                    );\n                    break;\n                }\n                case 'set_state': {\n                    await setState(actionTyped.state_id, componentContext);\n                    break;\n                }\n                case 'submit': {\n                    const targetContext = findComponentContextWithInfo(scopeContext, actionTyped.container_id, 'node', isScopeFound);\n                    if (targetContext) {\n                        await callSubmit(\n                            componentContext,\n                            actionTyped,\n                            origAction.typed as MaybeMissing<ActionSubmit>,\n                            targetContext\n                        );\n                    }\n                    break;\n                }\n                case 'scroll_to': {\n                    callScrollTo(scopeContext, actionTyped, isScopeFound);\n                    break;\n                }\n                case 'scroll_by': {\n                    callScrollBy(scopeContext, actionTyped, isScopeFound);\n                    break;\n                }\n                case 'update_structure': {\n                    updateStructure(componentContext, variables, log, actionTyped);\n                    break;\n                }\n                case 'custom': {\n                    execCustomAction({\n                        ...origAction,\n                        // todo remove in major release\n                        url: ''\n                    } as (Action | VisibilityAction) & { url: string }, componentContext);\n                    break;\n                }\n                case 'set_cursor_position': {\n                    const start = actionTyped.position?.start;\n                    const end = actionTyped.position?.end ?? start;\n                    if (typeof start === 'number' && typeof end === 'number' && actionTyped.position?.type === 'absolute') {\n                        const target = findComponentContextWithInfo(scopeContext, actionTyped.id, 'setCursorPosition', isScopeFound);\n                        if (target) {\n                            const info = target.getViewInfo('setCursorPosition');\n                            if (info) {\n                                info(start, end);\n                            }\n                        }\n                    } else {\n                        log(wrapError(new Error('Incorrect set_cursor_position action'), {\n                            additional: {\n                                elementId: actionTyped.id\n                            }\n                        }));\n                    }\n                    break;\n                }\n                default: {\n                    log(wrapError(new Error('Unknown type of action'), {\n                        additional: {\n                            type: actionTyped.type\n                        }\n                    }));\n                }\n            }\n        } else 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                        await setState(params.get('state_id'), componentContext);\n                        break;\n                    case 'set_current_item':\n                    case 'set_previous_item':\n                    case 'set_next_item':\n                    case 'scroll_to_start':\n                    case 'scroll_to_end':\n                    case 'scroll_backward':\n                    case 'scroll_forward':\n                    case 'scroll_to_position':\n                    case 'scroll_to_item_id':\n                        switchElementAction(\n                            scopeContext,\n                            isScopeFound,\n                            parts[1],\n                            params.get('id'),\n                            {\n                                item: params.get('item'),\n                                step: params.get('step'),\n                                overflow: params.get('overflow'),\n                                animated: params.get('animated'),\n                                itemId: params.get('item_id')\n                            }\n                        );\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 = componentContext?.getVariable(name) || variables.get(name);\n                            if (variableInstance) {\n                                variableInstance.set(value);\n                            } else {\n                                log(wrapError(new Error('Cannot find variable'), {\n                                    additional: {\n                                        name\n                                    }\n                                }));\n                            }\n                        } else {\n                            log(wrapError(new Error('Incorrect set_variable_action'), {\n                                additional: {\n                                    url\n                                }\n                            }));\n                        }\n                        break;\n                    case 'timer':\n                        const timerAction = params.get('action');\n                        const id = params.get('id');\n\n                        if (timersController) {\n                            timersController.execTimerAction(id, timerAction);\n                        } else {\n                            log(wrapError(new Error('Incorrect timer action'), {\n                                additional: {\n                                    id,\n                                    action: timerAction\n                                }\n                            }));\n                        }\n                        break;\n                    case 'video': {\n                        const target = findComponentContextWithInfo(scopeContext, params.get('id'), 'video', isScopeFound);\n                        const action = params.get('action');\n                        if (target) {\n                            const info = target.getViewInfo('video');\n                            if (info && (action === 'start' || action === 'pause')) {\n                                info[action]();\n                            }\n                        }\n                        break;\n                    }\n                    case 'download':\n                        callDownloadAction(params.get('url'), origAction.download_callbacks, componentContext);\n                        break;\n                    case 'show_tooltip':\n                        callShowTooltip(params.get('id'), params.get('multiple'), componentContext, scopeContext, isScopeFound);\n                        break;\n                    case 'hide_tooltip':\n                        callHideTooltip(params.get('id'), componentContext, scopeContext, isScopeFound);\n                        break;\n                    case 'set_stored_value': {\n                        callSetStoredValue(\n                            componentContext,\n                            params.get('name'),\n                            params.get('value'),\n                            params.get('type'),\n                            params.get('lifetime'),\n                            params.get('scope')\n                        );\n                        break;\n                    }\n                    default:\n                        log(wrapError(new Error('Unknown type of action'), {\n                            additional: {\n                                url: actionUrl\n                            }\n                        }));\n                }\n            } catch (err: any) {\n                log(wrapError(err, {\n                    additional: {\n                        url: actionUrl\n                    }\n                }));\n            }\n        }\n    }\n\n    async function execAnyActions(\n        actions: MaybeMissing<Action[]> | undefined,\n        opts: {\n            componentContext?: ComponentContext;\n            processUrls?: boolean;\n            node?: HTMLElement;\n            logType?: string;\n            additionalVars?: Map<string, Variable>;\n        } = {}\n    ): Promise<void> {\n        if (!actions || !Array.isArray(actions)) {\n            return;\n        }\n\n        const log = opts.componentContext?.logError || logError;\n        const getJson = (val: any) =>\n            opts.componentContext ?\n                opts.componentContext.getJsonWithVars(val, opts.additionalVars, true) :\n                getJsonWithVars(log, val, opts.additionalVars, true);\n        const filtered: Action[] = [];\n\n        for (let i = 0; i < actions.length; ++i) {\n            let action = getJson(actions[i]) as Action;\n            const isEnabled = action.is_enabled;\n            if (isEnabled === 0 || isEnabled === false) {\n                continue;\n            }\n            filtered.push(action);\n\n            const actionUrl = action.url;\n            const actionTyped = action.typed;\n            if (actionTyped) {\n                await execActionInternal(action, actions[i], opts.componentContext);\n            } else if (actionUrl) {\n                const schema = getUrlSchema(actionUrl);\n                if (schema) {\n                    if (isBuiltinSchema(schema, builtinSet)) {\n                        if (opts.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                        await execActionInternal(action, actions[i], opts.componentContext);\n                        await tick();\n                    } else if (action.log_id) {\n                        execCustomAction(action as Action & { url: string }, opts.componentContext);\n                        await tick();\n                    }\n                }\n            } else if (opts.node && Array.isArray(action.menu_items) && action.menu_items.length) {\n                const items = action.menu_items.filter(item => {\n                    const actions = Array.isArray(item.actions) ? item.actions : (item.action && [item.action] || []);\n\n                    return actions.filter(action => {\n                        return action.is_enabled !== false;\n                    }).length > 0;\n                });\n                if (items.length > 0) {\n                    menu = {\n                        items,\n                        node: opts.node,\n                        componentContext: opts.componentContext\n                    };\n                }\n            }\n        }\n        actions.forEach(action => {\n            if (action.log_id) {\n                logStat(opts.logType || 'click', action as Action);\n            }\n        });\n    }\n\n    function execCustomAction(\n        action: (Action | VisibilityAction) & { url: string },\n        componentContext: ComponentContext | undefined\n    ): void {\n        onCustomAction?.(action, getExtensionContext(componentContext));\n    }\n\n    function processVariableTriggers(\n        componentContext: ComponentContext | undefined,\n        variableTriggers: MaybeMissing<VariableTrigger>[] | undefined\n    ): (() => void) | undefined {\n        const log = componentContext?.logError || logError;\n\n        if (!Array.isArray(variableTriggers) || !variableTriggers.length) {\n            return;\n        }\n        if (!process.env.ENABLE_EXPRESSIONS) {\n            log(wrapError(new Error('variable_trigger is not supported')));\n            return;\n        }\n\n        const list: (() => void)[] = [];\n\n        variableTriggers.forEach(trigger => {\n            let prevConditionResult = false;\n\n            if (typeof trigger.condition !== 'string') {\n                log(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            if (!Array.isArray(trigger.actions)) {\n                log(wrapError(new Error('variable_trigger has no actions'), {\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                log(wrapError(new Error('variable_trigger has an unsupported mode'), {\n                    additional: {\n                        mode\n                    }\n                }));\n                return;\n            }\n\n            // Use condition inside object, so store will be updated every time\n            const derived = getDerivedFromVars(log, {\n                condition: trigger.condition\n            }, {\n                additionalVars: componentContext?.variables,\n                customFunctions: componentContext?.customFunctions,\n                emptyVarsError: () => {\n                    log(wrapError(new Error('variable_trigger must have variables in the condition'), {\n                        additional: {\n                            condition: trigger.condition\n                        }\n                    }));\n                }\n            });\n\n            const unsubscribe = derived.subscribe(async conditionResult => {\n                if (conditionResult.condition === undefined) {\n                    // Error, already logged\n                    return;\n                }\n\n                if (\n                    // if condition is truthy\n                    conditionResult.condition &&\n                    // and trigger mode matches\n                    (mode === 'on_variable' || mode === 'on_condition' && prevConditionResult === false)\n                ) {\n                    prevConditionResult = Boolean(conditionResult.condition);\n\n                    if (componentContext) {\n                        await componentContext.execAnyActions(trigger.actions, {\n                            logType: 'trigger'\n                        });\n                    } else {\n                        await execAnyActions(trigger.actions, {\n                            logType: 'trigger'\n                        });\n                    }\n                } else {\n                    prevConditionResult = Boolean(conditionResult.condition);\n                }\n            });\n\n            list.push(unsubscribe);\n        });\n\n        return () => {\n            list.forEach(cb => {\n                cb();\n            });\n        };\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    const parentOfMap: Map<string, ParentMethods> = new Map();\n    const componentContextMap: Map<string, Set<ComponentContext>> = new Map();\n    function registerInstance<T>(id: string, block: T, duplicateErrorLevel: 'error' | 'warn' = 'error') {\n        if (instancesMap.has(id)) {\n            logError(wrapError(new Error('Duplicate instance id'), {\n                level: duplicateErrorLevel,\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    function registerParentOf(id: string, methods: ParentMethods): void {\n        parentOfMap.set(id, methods);\n    }\n\n    function unregisterParentOf(id: string): void {\n        parentOfMap.delete(id);\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 awaitGlobalVariable(variableName: string, variableType: VariableType, value: unknown): Variable {\n        const exist = awaitingGlobalVariablesFacades.get(variableName);\n        if (exist) {\n            return exist;\n        }\n\n        const instance = createVariable(variableName, variableType, value);\n\n        awaitingGlobalVariablesFacades.set(variableName, instance);\n\n        return instance;\n    }\n\n    function updateTheme(): void {\n        if (palette) {\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        if (themeVariable) {\n            themeVariable.setValue(currentTheme);\n        }\n    }\n\n    function getBuiltinProtocols(): Set<string> {\n        return builtinSet;\n    }\n\n    function getExtension(id: string, params: object | undefined): DivExtension | undefined {\n        const Builder = extensions.get(id);\n        if (Builder) {\n            return new Builder(params || {});\n        }\n    }\n\n    function getExtensionContext(componentContext?: ComponentContext): DivExtensionContext {\n        return {\n            variables: componentContext ? mergeMaps(variables, componentContext.variables) : variables,\n            derviedExpression: function<T>(t: T) {\n                return (componentContext ?\n                    componentContext.getDerivedFromVars(t) :\n                    getDerivedFromVars(logError, t)\n                ) as DerivedExpression<T>;\n            },\n            processExpressions: function<T>(t: T) {\n                return (componentContext ?\n                    componentContext.getJsonWithVars<T>(t) :\n                    getJsonWithVars(logError, t)\n                ) as T;\n            },\n            execAction(action) {\n                if (componentContext) {\n                    componentContext.execAnyActions([action]);\n                } else {\n                    execAnyActions([action]);\n                }\n            },\n            logError(error) {\n                if (componentContext) {\n                    componentContext.logError(error);\n                } else {\n                    logError(error);\n                }\n            },\n            getComponentProperty: function<T>(property: string): T {\n                if (componentContext) {\n                    return componentContext.getJsonWithVars((componentContext.json as any)[property]) as T;\n                }\n                // todo remove at major release\n                return undefined as T;\n            },\n            direction\n        };\n    }\n\n    function prepareCustomFunctions(\n        list: MaybeMissing<DivFunction>[],\n        componentContext?: ComponentContext\n    ): CustomFunctions {\n        const customFunctions: CustomFunctions = new Map();\n        const log = (componentContext?.logError || logError);\n\n        list.forEach(desc => {\n            if (customFunctions) {\n                try {\n                    checkCustomFunction(desc);\n                } catch (err: unknown) {\n                    // Only Error thrown here\n                    log(wrapError(err as Error));\n                    return;\n                }\n                const fn = desc as DivFunction;\n                const list = customFunctions.get(fn.name) || [];\n                list.push(customFunctionWrap(fn));\n                customFunctions.set(fn.name, list);\n            }\n        });\n\n        return customFunctions;\n    }\n\n    function produceComponentContext(from?: ComponentContext | undefined): ComponentContext {\n        const ctx: ComponentContext = {\n            id: '',\n            json: {} as DivBaseData,\n            path: [],\n            templateContext: {},\n            viewInfo: {},\n            logError(error) {\n                error.additional = error.additional || {};\n                error.additional.path = ctx.path.join('/');\n                if (process.env.DEVTOOL) {\n                    error.additional.json = ctx.json;\n                    error.additional.origJson = ctx.origJson;\n\n                    const fullpath: ComponentContext[] = [];\n                    let temp = ctx;\n                    while (temp.parent) {\n                        fullpath.push(temp);\n                        temp = temp.parent;\n                    }\n                    error.additional.fullpath = fullpath;\n                }\n                logError(error);\n            },\n            execAnyActions(actions, opts = {}) {\n                return execAnyActions(actions, {\n                    componentContext: ctx,\n                    processUrls: opts.processUrls,\n                    node: opts.node,\n                    logType: opts.logType,\n                    additionalVars: opts.additionalVars\n                });\n            },\n            getDerivedFromVars(jsonProp, additionalVars, keepComplex = false, maxDepth = Infinity) {\n                return getDerivedFromVars(\n                    ctx.logError,\n                    jsonProp,\n                    {\n                        additionalVars: mergeMaps(ctx.variables, additionalVars),\n                        keepComplex,\n                        customFunctions: ctx.customFunctions,\n                        maxDepth\n                    }\n                );\n            },\n            getJsonWithVars(jsonProp, additionalVars, keepComplex = false) {\n                return getJsonWithVars(\n                    ctx.logError,\n                    jsonProp,\n                    mergeMaps(ctx.variables, additionalVars),\n                    keepComplex,\n                    ctx.customFunctions\n                );\n            },\n            evalExpression(store, expr, opts) {\n                return evalExpression(mergeMaps(variables, ctx.variables), ctx.customFunctions, store, expr, opts);\n            },\n            produceChildContext(div, opts = {}) {\n                const componentContext = produceComponentContext(this);\n\n                let childJson: MaybeMissing<DivBaseData> = div;\n                let childContext: TemplateContext = this.templateContext;\n\n                const {\n                    templateContext: childProcessedContext,\n                    json: childProcessedJson\n                } = processTemplate(childJson, childContext);\n\n                componentContext.json = childProcessedJson;\n                componentContext.templateContext = childProcessedContext;\n                componentContext.origJson = div;\n                componentContext.id = opts.id || childProcessedJson.id || '';\n\n                if (componentContext.id) {\n                    let set = componentContextMap.get(componentContext.id);\n                    if (!set) {\n                        set = new Set();\n                        componentContextMap.set(componentContext.id, set);\n                    }\n\n                    set.add(componentContext);\n                }\n\n                if (opts.key) {\n                    componentContext.key = opts.key;\n                }\n\n                if (opts.path !== undefined/*  && !res.isRootState */) {\n                    componentContext.path.push(String(opts.path));\n                }\n                if (div.type && !opts.isRootState) {\n                    componentContext.path.push(div.type);\n                }\n                if (opts.isTooltipRoot) {\n                    componentContext.isTooltipRoot = true;\n                }\n\n                let localVars: Map<string, Variable> | undefined;\n\n                if (Array.isArray(childProcessedJson.variables)) {\n                    localVars = mergeMaps(\n                        this.variables,\n                        mergeMaps(opts.variables, new Map())\n                    );\n                    childProcessedJson.variables.forEach(desc => {\n                        const varInstance = constructVariable(desc, componentContext, localVars);\n                        if (varInstance && localVars) {\n                            localVars.set(varInstance.getName(), varInstance);\n                        }\n                    });\n                } else if (opts.variables) {\n                    localVars = mergeMaps(this.variables, opts.variables);\n                } else if (this.variables) {\n                    localVars = this.variables;\n                }\n                componentContext.variables = localVars;\n                if (process.env.DEVTOOL && localVars) {\n                    componentContext.selfVariables = new Set([...localVars.keys()]);\n                }\n\n                let localCustomFunctions: CustomFunctions | undefined;\n                if (Array.isArray(childProcessedJson.functions)) {\n                    localCustomFunctions = prepareCustomFunctions(childProcessedJson.functions, this);\n                }\n                componentContext.customFunctions = mergeCustomFunctions(this.customFunctions, localCustomFunctions);\n\n                if (Array.isArray(childProcessedJson.animators)) {\n                    componentContext.animators = childProcessedJson.animators\n                        .reduce<Record<string, MaybeMissing<Animator>>>(\n                            (acc, item) => {\n                                if (item.id) {\n                                    acc[item.id] = item;\n                                }\n                                return acc;\n                            },\n                            {}\n                        );\n                }\n\n                if (opts.fake) {\n                    componentContext.fakeElement = opts.fake;\n                }\n                if (opts.isRootState) {\n                    componentContext.isRootState = true;\n                }\n\n                return componentContext;\n            },\n            dup(fakeReason: number) {\n                return {\n                    ...ctx,\n                    fakeElement: fakeReason\n                };\n            },\n            getVariable(varName, type) {\n                const variable = ctx.variables?.get(varName) || variables.get(varName);\n\n                if (variable) {\n                    const foundType = variable.getType();\n\n                    if (type && foundType !== type) {\n                        ctx.logError(wrapError(new Error(`Variable should have type \"${type}\"`), {\n                            additional: {\n                                name: varName,\n                                foundType\n                            }\n                        }));\n                        return;\n                    }\n                }\n\n                return variable;\n            },\n            getAnimator(name) {\n                return ctx.animators?.[name] || undefined;\n            },\n            registerState(stateId, setState) {\n                const stateCtx = getStateContext(ctx.parent);\n\n                if (stateCtx) {\n                    stateCtx.states = stateCtx.states || {};\n                    stateCtx.states[stateId] = stateCtx.states[stateId] || [];\n                    stateCtx.states[stateId].push(setState);\n                }\n\n                return () => {\n                    if (stateCtx?.states?.[stateId]) {\n                        stateCtx.states[stateId] = stateCtx.states[stateId].filter(it => it !== setState);\n                        if (!stateCtx.states[stateId].length) {\n                            delete stateCtx.states[stateId];\n                        }\n                    }\n                };\n            },\n            registerPager(pagerId) {\n                const targetCtx = ctx.parent;\n\n                if (!targetCtx) {\n                    return {\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        update() {},\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        destroy() {}\n                    };\n                }\n\n                targetCtx.pagers = targetCtx.pagers || new Map();\n                if (targetCtx.pagers.has(pagerId)) {\n                    return {\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        update() {},\n                        // eslint-disable-next-line @typescript-eslint/no-empty-function\n                        destroy() {}\n                    };\n                }\n\n                targetCtx.pagers.set(pagerId, null);\n\n                return {\n                    update(data) {\n                        if (targetCtx.pagers) {\n                            targetCtx.pagers.set(pagerId, data);\n                        }\n\n                        const listeners = pagerId ? targetCtx.pagerListeners?.get(pagerId) : undefined;\n                        const listeners2 = targetCtx.pagerListeners?.get(undefined);\n                        const totalListeners = [...(listeners || []), ...(listeners2 || [])];\n\n                        if (totalListeners) {\n                            totalListeners.forEach(listener => {\n                                listener(data);\n                            });\n                        }\n                    },\n                    destroy() {\n                        if (targetCtx.pagers) {\n                            targetCtx.pagers.delete(pagerId);\n                        }\n                    }\n                };\n            },\n            listenPager(pagerId, listener) {\n                let targetCtx = ctx.parent;\n\n                while (\n                    targetCtx &&\n                    !(targetCtx.pagers && (pagerId ? targetCtx.pagers.get(pagerId) : targetCtx.pagers?.size))\n                ) {\n                    targetCtx = targetCtx.parent;\n                }\n\n                if (!targetCtx) {\n                    // eslint-disable-next-line @typescript-eslint/no-empty-function\n                    return () => {};\n                }\n\n                targetCtx.pagerListeners = ctx.pagerListeners || new Map();\n                const list = targetCtx.pagerListeners.get(pagerId) || [];\n                if (!targetCtx.pagerListeners.has(pagerId)) {\n                    targetCtx.pagerListeners.set(pagerId, list);\n                }\n                list.push(listener);\n\n                const targetPagerId = pagerId ? pagerId : (targetCtx.pagers?.keys().next().value || undefined);\n                const data = targetCtx.pagers?.get(targetPagerId);\n                if (data) {\n                    listener(data);\n                }\n\n                return () => {\n                    if (!targetCtx.pagerListeners) {\n                        return;\n                    }\n\n                    let list = targetCtx.pagerListeners.get(targetPagerId);\n                    if (list) {\n                        list = list.filter(it => it !== listener) || [];\n                        if (list.length) {\n                            targetCtx.pagerListeners.set(pagerId, list);\n                        } else {\n                            targetCtx.pagerListeners.delete(pagerId);\n                        }\n                    }\n                };\n            },\n            attachViewInfo(name, getter) {\n                this.viewInfo[name] = getter;\n            },\n            detachViewInfo(name) {\n                delete this.viewInfo[name];\n            },\n            getViewInfo(name) {\n                return this.viewInfo[name];\n            },\n            destroy() {\n                const set = componentContextMap.get(ctx.id);\n                if (set) {\n                    set.delete(ctx);\n                    if (!set.size) {\n                        componentContextMap.delete(ctx.id);\n                    }\n                }\n                if (ctx.parent && ctx.parent.children) {\n                    ctx.parent.children.delete(ctx);\n                }\n            },\n        };\n\n        if (from) {\n            ctx.parent = from;\n            ctx.path = from.path.slice();\n            from.children ||= new Set();\n            from.children.add(ctx);\n\n            if (from.fakeElement) {\n                ctx.fakeElement = from.fakeElement;\n            }\n        } else {\n            ctx.json = {\n                type: 'root'\n            };\n            ctx.isRootState = true;\n        }\n\n        return ctx;\n    }\n\n    function registerTimeout(timeout: number): void {\n        if (isMounted) {\n            timeouts.push(timeout);\n        } else {\n            clearTimeout(timeout);\n        }\n    }\n\n    function findComponentById(id: string): ComponentContext | undefined {\n        const set = componentContextMap.get(id);\n        if (set) {\n            if (set.size > 1) {\n                logError(wrapError(new Error('Multiple components with id'), {\n                    additional: {\n                        id\n                    }\n                }));\n                return;\n            }\n            return set.values().next().value;\n        }\n    }\n\n    setContext<RootCtxValue>(ROOT_CTX, {\n        logStat,\n        hasTemplate,\n        genId,\n        genClass,\n        processVariableTriggers,\n        isRunning,\n        setRunning,\n        pagerChildrenClipEnabled,\n        pagerMouseDragEnabled,\n        registerInstance,\n        unregisterInstance,\n        registerParentOf,\n        unregisterParentOf,\n        onTooltipClose,\n        tooltipRoot,\n        addSvgFilter,\n        removeSvgFilter,\n        registerId,\n        getComponentId,\n        preparePrototypeVariables,\n        getCustomization,\n        getBuiltinProtocols,\n        getExtension,\n        getExtensionContext,\n        registerTimeout,\n        typefaceProvider,\n        isDesktop,\n        isPointerFocus,\n        customComponents,\n        direction: directionStore,\n        videoPlayerProvider,\n        awaitGlobalVariable,\n        componentDevtool: process.env.DEVTOOL ? componentDevtoolReal : undefined,\n        findComponentById,\n        devtoolCreateHierarchy: process.env.DEVTOOL ? devtoolCreateHierarchy : 'lazy'\n    });\n\n    setContext<ActionCtxValue>(ACTION_CTX, {\n        hasAction(): boolean {\n            return false;\n        }\n    });\n\n    setContext<VisibilityCtxValue>(VISIBILITY_CTX, {\n        visible: constStore(true)\n    });\n\n    setContext<StateCtxValue>(STATE_CTX, {\n        runVisibilityTransition(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement,\n            _direction: 'in' | 'out'\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionIn(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionOut(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\n            _transitions: AppearanceTransition,\n            _node: HTMLElement\n        ) {\n            return Promise.resolve();\n        },\n        registerChildWithTransitionChange(\n            _json: DivBaseData,\n            _componentContext: ComponentContext,\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    setContext<EnabledCtxValue>(ENABLED_CTX, {\n        isEnabled: constStore(true)\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    function constructProperty(\n        variable: MaybeMissing<DivPropertyVariable>,\n        componentContext?: ComponentContext,\n        additionalVars?: Map<string, Variable>\n    ) {\n        const log = componentContext?.logError || logError;\n        const name = variable.name;\n        const valueType = variable.value_type;\n\n        if (typeof variable.get !== 'string' || !variable.get) {\n            log(wrapError(new Error('Incorrect property getter'), {\n                additional: {\n                    name\n                }\n            }));\n            return;\n        }\n        if (!name) {\n            log(wrapError(new Error('Missing property name')));\n            return;\n        }\n        if (!valueType) {\n            log(wrapError(new Error('Missing property value_type')));\n            return;\n        }\n\n        const derivedExpression = componentContext ?\n            componentContext.getDerivedFromVars(variable.get, undefined, true) :\n            getDerivedFromVars(logError, variable.get, {\n                keepComplex: true\n            });\n\n        const val = get(derivedExpression);\n        if (val === undefined) {\n            return;\n        }\n\n        const setValue = (val: unknown) => {\n            const newValue = createConstVariable(\n                variable.new_value_variable_name || 'new_value',\n                variable.value_type as VariableType,\n                val\n            );\n            const additionalVarsClosure: Map<string, Variable> = new Map(additionalVars);\n            additionalVarsClosure.set(newValue.getName(), newValue);\n\n            if (Array.isArray(variable.set) && variable.set.length) {\n                if (componentContext) {\n                    componentContext.execAnyActions(variable.set, {\n                        additionalVars: additionalVarsClosure\n                    });\n                } else {\n                    execAnyActions(variable.set, {\n                        additionalVars: additionalVarsClosure\n                    });\n                }\n            } else {\n                log(wrapError(new Error('Cannot set property. No setters provided.'), {\n                    additional: {\n                        name\n                    }\n                }));\n            }\n        };\n\n        return {\n            getName() {\n                return name;\n            },\n            subscribe(cb) {\n                return derivedExpression.subscribe(cb);\n            },\n            set(val) {\n                const converted = variableValueFromString(val, valueType);\n                setValue(converted);\n            },\n            setValue,\n            getValue() {\n                return get(derivedExpression);\n            },\n            getType() {\n                return valueType;\n            },\n        } as Variable;\n    }\n\n    function constructVariable(\n        variable: MaybeMissing<DivVariable>,\n        componentContext?: ComponentContext,\n        additionalVars?: Map<string, Variable>\n    ): Variable | undefined {\n        if (variable.type === 'property') {\n            return constructProperty(variable, componentContext, additionalVars);\n        }\n\n        if (!variable.type || !variable.name || !(variable.type in TYPE_TO_CLASS) || !('value' in variable)) {\n            // Skip unknown types (from the future versions maybe)\n            return;\n        }\n\n        const valueSource = variable.value;\n\n        let value = componentContext ?\n            componentContext.getJsonWithVars(valueSource, additionalVars, true) :\n            getJsonWithVars(logError, valueSource, additionalVars, true);\n\n        if (valueSource && typeof valueSource === 'string' && value === undefined) {\n            // Expression error - already logged inside getJsonWithVars\n            return;\n        }\n\n        if (\n            variable.type === 'integer' && typeof value === 'number' &&\n            (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER)\n        ) {\n            logError(wrapError(new Error('The value of the integer variable could lose accuracy'), {\n                level: 'warn',\n                additional: {\n                    name: variable.name,\n                    value: value\n                }\n            }));\n        }\n\n        try {\n            return createVariable(variable.name, variable.type, value);\n        } catch (err: any) {\n            logError(wrapError(err, {\n                additional: {\n                    name: variable.name\n                }\n            }));\n        }\n    }\n\n    function declVariable(variable: DivVariable): Variable | undefined {\n        const varInstance = constructVariable(variable);\n\n        if (varInstance) {\n            localVariables.set(variable.name, varInstance);\n            variables.set(variable.name, varInstance);\n        }\n\n        return varInstance;\n    }\n\n    for (const [varName, variable] of globalVariables) {\n        if (!variables.has(varName)) {\n            variables.set(varName, variable);\n        }\n    }\n\n    if (themeVariableName) {\n        if (variables.has(themeVariableName)) {\n            logError(wrapError(new Error('Duplicate variable'), {\n                additional: {\n                    name: themeVariableName\n                }\n            }));\n        } else {\n            themeVariable = declVariable({\n                name: themeVariableName,\n                type: 'string',\n                value: currentTheme\n            });\n        }\n    }\n\n    const startVariables = json?.card?.variables;\n    if (Array.isArray(startVariables)) {\n        startVariables.forEach(variable => {\n            if (variable && 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                declVariable(variable);\n            }\n        });\n    }\n\n    $: if (json?.card?.variables && Array.isArray(json.card.variables) && json.card.variables !== startVariables) {\n        json.card.variables.forEach(variable => {\n            if (variable && variable.name && !localVariables.has(variable.name) && !variables.has(variable.name)) {\n                declVariable(variable);\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    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            if (awaitingStore) {\n                let counter = 0;\n                varInstance.subscribe(() => {\n                    awaitingStore.set(++counter);\n                });\n            }\n\n            const facade = awaitingGlobalVariablesFacades.get(newVarName);\n            if (facade && facade.getType() === varInstance.getType()) {\n                varInstance.subscribe(val => {\n                    facade.set(val);\n                });\n            }\n        }\n    });\n\n    const initVariableTriggers = () => {\n        processVariableTriggers(undefined, json?.card?.variable_triggers);\n    };\n\n    const timers = json?.card?.timers;\n    if (timers && typeof document !== 'undefined') {\n        const controller = timersController = new TimersController({\n            logError,\n            applyVars: json => getJsonWithVars(logError, json),\n            hasVariableWithType,\n            setVariableValue,\n            execAnyActions\n        });\n        timers.forEach(timer => controller.createTimer(timer));\n    }\n\n    $: states = json?.card?.states;\n    const rootComponentContext = produceComponentContext();\n    if (Array.isArray(json.card?.functions)) {\n        rootComponentContext.customFunctions = prepareCustomFunctions(json.card.functions);\n    }\n\n    let rootStateComponentContext: ComponentContext | undefined;\n    $: if (states && !hasError && !hasIdError) {\n        const rootStateDiv: DivBaseData = {\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        } as DivBaseData;\n\n        rootStateComponentContext = rootComponentContext.produceChildContext(rootStateDiv, {\n            isRootState: true\n        });\n    }\n\n    function onTooltipClose(internalId: number): void {\n        tooltips = tooltips.filter(it => it.internalId !== internalId);\n    }\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    onMount(() => {\n        rootInstancesCount++;\n\n        if (rootInstancesCount === 1) {\n            window.addEventListener('keydown', onWindowKeyDown);\n            window.addEventListener('pointerdown', onWindowPointerDown);\n        }\n\n        // delay for children components initialization\n        tick().then(() => {\n            if (isMounted) {\n                initVariableTriggers();\n            }\n        });\n    });\n\n    onDestroy(() => {\n        isMounted = false;\n        rootInstancesCount--;\n\n        if (!rootInstancesCount) {\n            window.removeEventListener('keydown', onWindowKeyDown);\n            window.removeEventListener('pointerdown', onWindowPointerDown);\n        }\n\n        for (const instance of allRunningAnimators) {\n            instance.stop();\n        }\n\n        if (timersController) {\n            timersController.destroy();\n        }\n\n        tooltips.forEach(info => {\n            if (info.timeoutId) {\n                clearTimeout(info.timeoutId);\n                info.timeoutId = null;\n            }\n        });\n\n        timeouts.forEach(timeout => {\n            clearTimeout(timeout);\n        });\n    });\n</script>\n\n{#if !hasError && !hasIdError && rootStateComponentContext}\n    <div\n        class=\"{css.root}{$isDesktop ? ` ${css.root_platform_desktop}` : ''}{mix ? ` ${mix}` : ''}\"\n        on:touchstart={emptyTouchstartHandler}\n        dir={$directionStore}\n    >\n        <RootSvgFilters {svgFiltersMap} />\n\n        <Unknown\n            componentContext={rootStateComponentContext}\n        />\n\n        {#if tooltips}\n            {#each tooltips as item (item.internalId)}\n                <TooltipView\n                    ownerNode={item.ownerNode}\n                    data={item.desc}\n                    internalId={item.internalId}\n                    parentComponentContext={item.componentContext || rootStateComponentContext}\n                />\n            {/each}\n        {/if}\n\n        {#if menu}\n            <Menu\n                ownerNode={menu.node}\n                items={menu.items}\n                parentComponentContext={menu.componentContext || rootStateComponentContext}\n                on:close={() => menu = undefined}\n            />\n        {/if}\n    </div>\n{/if}\n","import { tick } from 'svelte';\nimport type { DivExtension, DivExtensionContext } from '../../typings/common';\nimport type { WrappedError } from '../utils/wrapError';\n\ninterface Params {\n    width_variable_name?: string;\n    height_variable_name?: string;\n}\n\nconst MAX_ITERATIONS = 8;\n\nexport class SizeProvider implements DivExtension {\n    private widthVariableName: string | undefined;\n    private heightVariableName: string | undefined;\n    private resizeObserver: ResizeObserver | undefined;\n    private context: DivExtensionContext | undefined;\n    private node: HTMLElement | undefined;\n    private sizeHistory: Record<string, Set<number>> = {};\n\n    constructor(params: Params) {\n        this.widthVariableName = params.width_variable_name;\n        this.heightVariableName = params.height_variable_name;\n    }\n\n    private setVariable(variableName: string | undefined, value: number): boolean {\n        if (!this.context) {\n            return false;\n        }\n\n        if (variableName) {\n            const instance = this.context.variables.get(variableName);\n            if (instance && instance.getType() === 'integer') {\n                value = Math.round(value);\n\n                if (!this.sizeHistory[variableName]) {\n                    this.sizeHistory[variableName] = new Set();\n                }\n                if (!this.sizeHistory[variableName].has(value)) {\n                    instance.setValue(value);\n                    this.sizeHistory[variableName].add(value);\n                    return true;\n                }\n            } else {\n                const err: WrappedError = new Error('Missing variable') as WrappedError;\n                err.level = 'error';\n                err.additional = {\n                    variableName\n                };\n                this.context.logError(err);\n            }\n        }\n\n        return false;\n    }\n\n    private recalcProps(): boolean {\n        if (!this.node || !this.context) {\n            return false;\n        }\n\n        const bbox = this.node.getBoundingClientRect();\n        const widthRes = this.setVariable(this.widthVariableName, bbox.width);\n        const heightRes = this.setVariable(this.heightVariableName, bbox.height);\n\n        return widthRes || heightRes;\n    }\n\n    mountView(node: HTMLElement, context: DivExtensionContext): void {\n        this.node = node;\n        this.context = context;\n        if (!this.resizeObserver && typeof ResizeObserver !== 'undefined') {\n            this.resizeObserver = new ResizeObserver(async() => {\n                let counter = 0;\n                while (this.recalcProps()) {\n                    if (++counter > MAX_ITERATIONS) {\n                        const err: WrappedError = new Error('Recursive layout in size_provider') as WrappedError;\n                        err.level = 'warn';\n                        err.additional = {\n                            widthVariableName: this.widthVariableName,\n                            heightVariableName: this.heightVariableName\n                        };\n                        context.logError(err);\n                        break;\n                    }\n                    await tick();\n                }\n                this.sizeHistory = {};\n            });\n        }\n        this.resizeObserver?.observe(node);\n        this.recalcProps();\n    }\n\n    unmountView(_node: HTMLElement, _context: DivExtensionContext): void {\n        this.resizeObserver?.disconnect();\n        this.resizeObserver = undefined;\n    }\n}\n","import type { Action, DivExtension, DivExtensionContext } from '../../typings/common';\n\ninterface Params {\n    swipe_up?: Action[];\n    swipe_down?: Action[];\n    swipe_left?: Action[];\n    swipe_right?: Action[];\n}\n\nconst MIN_SWIPE_DIST = 8;\n\nexport class Gesture implements DivExtension {\n    private context: DivExtensionContext | undefined;\n    private params: Params;\n    private startCoords?: {\n        pageX: number;\n        pageY: number;\n    };\n\n    constructor(params: Params) {\n        this.params = params;\n\n        this.onPointerDown = this.onPointerDown.bind(this);\n        this.onPointerMove = this.onPointerMove.bind(this);\n        this.onPointerUp = this.onPointerUp.bind(this);\n    }\n\n    private processActions(type: keyof Params): void {\n        const actions = this.params[type];\n\n        if (Array.isArray(actions) && actions.length && this.context) {\n            const processed = this.context.processExpressions(actions);\n            processed.forEach(action => {\n                this.context?.execAction(action);\n            });\n        }\n    }\n\n    private onPointerDown(event: PointerEvent): void {\n        this.startCoords = {\n            pageX: event.pageX,\n            pageY: event.pageY\n        };\n    }\n\n    private onPointerMove(event: PointerEvent): void {\n        if (!this.startCoords) {\n            return;\n        }\n\n        const diffX = event.pageX - this.startCoords.pageX;\n        const diffY = event.pageY - this.startCoords.pageY;\n\n        if (Math.abs(diffX) > MIN_SWIPE_DIST || Math.abs(diffY) > MIN_SWIPE_DIST) {\n            if (Math.abs(diffX) > Math.abs(diffY)) {\n                if (diffX > MIN_SWIPE_DIST) {\n                    this.processActions('swipe_right');\n                } else if (diffX < -MIN_SWIPE_DIST) {\n                    this.processActions('swipe_left');\n                }\n            } else {\n                // eslint-disable-next-line no-lonely-if\n                if (diffY > MIN_SWIPE_DIST) {\n                    this.processActions('swipe_down');\n                } else if (diffY < -MIN_SWIPE_DIST) {\n                    this.processActions('swipe_up');\n                }\n            }\n\n            this.startCoords = undefined;\n        }\n    }\n\n    private onPointerUp(): void {\n        this.startCoords = undefined;\n    }\n\n    mountView(node: HTMLElement, context: DivExtensionContext): void {\n        this.context = context;\n\n        node.addEventListener('pointerdown', this.onPointerDown);\n        node.addEventListener('pointermove', this.onPointerMove);\n        node.addEventListener('pointerup', this.onPointerUp);\n        node.addEventListener('pointercancel', this.onPointerUp);\n        node.style.pointerEvents = 'auto';\n    }\n\n    updateView(node: HTMLElement): void {\n        node.style.pointerEvents = 'auto';\n    }\n\n    unmountView(node: HTMLElement, _context: DivExtensionContext): void {\n        node.removeEventListener('pointerdown', this.onPointerDown);\n        node.removeEventListener('pointermove', this.onPointerMove);\n        node.removeEventListener('pointerup', this.onPointerUp);\n        node.removeEventListener('pointercancel', this.onPointerUp);\n        node.style.pointerEvents = '';\n    }\n}\n","export function filterHTMLElements(it: Node): it is HTMLElement {\n    return it instanceof HTMLElement;\n}\n","import type { BooleanInt, DivExtension, DivExtensionContext, Unsubscriber } from '../../typings/common';\nimport type { WrappedError } from '../utils/wrapError';\nimport { filterHTMLElements } from '../utils/filterHTMLElements';\n\ninterface Params {\n    lottie_url?: string;\n    lottie_json?: object;\n    repeat_count?: number;\n    repeat_mode?: 'restart' | 'reverse';\n    is_playing?: BooleanInt;\n}\n\ninterface AnimationItem {\n    totalFrames: number;\n\n    addEventListener(type: string, cb: () => void): void;\n    destroy(): void;\n    play(name?: string): void;\n    stop(name?: string): void;\n    pause(name?: string): void;\n    setDirection(direction: number): void;\n    goToAndStop(value: number, isFrame?: boolean, name?: string): void;\n    goToAndPlay(value: number, isFrame?: boolean, name?: string): void;\n}\n\ninterface LoadAnimationParamsBase {\n    container: HTMLElement;\n    renderer: 'svg' | 'html' | 'canvas';\n    loop: boolean | number | undefined;\n    rendererSettings: {\n        preserveAspectRatio: string;\n    };\n}\n\ninterface LoadAnimationParamsWidthPath extends LoadAnimationParamsBase {\n    path: string;\n}\n\ninterface LoadAnimationParamsWidthData extends LoadAnimationParamsBase {\n    animationData: any;\n}\n\ntype LoadAnimation = (opts: LoadAnimationParamsWidthPath | LoadAnimationParamsWidthData) => AnimationItem;\n\ninterface ScaleProps {\n    attribute: string;\n    noScale: boolean;\n    hAlign: string;\n    vAlign: string;\n}\n\nexport function lottieExtensionBuilder(loadAnimation: LoadAnimation) {\n    return class Lottie implements DivExtension {\n        private params: Params;\n        private animItem: AnimationItem | undefined;\n        private wrapper: HTMLElement | undefined;\n        private isPlayingUnsubscriber: Unsubscriber | undefined;\n        private isPlaying = true;\n        private unsubscribe: (() => void) | undefined;\n\n        constructor(params: Params) {\n            this.params = params;\n        }\n\n        private loadData(url: string | undefined): Promise<object> {\n            if (this.params.lottie_json) {\n                return Promise.resolve(this.params.lottie_json);\n            }\n\n            if (url) {\n                return fetch(url)\n                    .then(res => {\n                        if (!res.ok) {\n                            throw new Error('Response is not ok');\n                        }\n\n                        return res.json();\n                    });\n            }\n\n            return Promise.reject('Missing data');\n        }\n\n        private getRatio(context: DivExtensionContext): number | undefined {\n            const ratio = (context.getComponentProperty('aspect') as {\n                ratio: number;\n            } | undefined)?.ratio;\n\n            if (typeof ratio === 'number' && ratio > 0) {\n                return ratio;\n            }\n\n            return undefined;\n        }\n\n        private getScale(context: DivExtensionContext): ScaleProps {\n            const scale = context.getComponentProperty('scale') as string | undefined;\n\n            if (scale === 'stretch') {\n                return {\n                    attribute: 'none',\n                    noScale: false,\n                    hAlign: 'center',\n                    vAlign: 'center'\n                };\n            }\n\n            let hAlign = context.getComponentProperty('content_alignment_horizontal') as string | undefined;\n            let vAlign = context.getComponentProperty('content_alignment_vertical') as string | undefined;\n            let hVal = 'Mid';\n            let vVal = 'Mid';\n\n            if (hAlign === 'start') {\n                hAlign = context.direction === 'ltr' ? 'start' : 'end';\n            } else if (hAlign === 'end') {\n                hAlign = context.direction === 'ltr' ? 'end' : 'start';\n            } else if (hAlign === 'left') {\n                hAlign = 'start';\n            } else if (hAlign === 'right') {\n                hAlign = 'end';\n            } else {\n                hAlign = 'center';\n            }\n\n            if (vAlign === 'top') {\n                vAlign = 'start';\n            } else if (vAlign === 'bottom') {\n                vAlign = 'end';\n            } else {\n                vAlign = 'center';\n            }\n\n            if (scale === 'no_scale') {\n                return {\n                    attribute: 'xMidYMid meet',\n                    noScale: true,\n                    hAlign,\n                    vAlign\n                };\n            }\n\n            if (hAlign === 'start') {\n                hVal = 'Min';\n            } else if (hAlign === 'end') {\n                hVal = 'Max';\n            }\n\n            if (vAlign === 'start') {\n                vVal = 'Min';\n            } else if (vAlign === 'end') {\n                vVal = 'Max';\n            }\n\n            if (scale === 'fit' || scale === 'no_scale') {\n                return {\n                    attribute: `x${hVal}Y${vVal} meet`,\n                    noScale: false,\n                    hAlign,\n                    vAlign\n                };\n            }\n\n            return {\n                attribute: `x${hVal}Y${vVal} slice`,\n                noScale: false,\n                hAlign,\n                vAlign\n            };\n        }\n\n        private getSvg(): SVGElement | undefined {\n            const svg = this.wrapper?.firstElementChild;\n            if (svg instanceof SVGElement) {\n                return svg;\n            }\n        }\n\n        private setWrapperScale(scale: ScaleProps): void {\n            if (!this.wrapper) {\n                return;\n            }\n\n            if (scale.noScale) {\n                this.wrapper.style.display = 'flex';\n                this.wrapper.style.alignItems = scale.vAlign;\n                this.wrapper.style.justifyContent = scale.hAlign;\n            } else {\n                this.wrapper.style.display = '';\n                this.wrapper.style.alignItems = '';\n                this.wrapper.style.justifyContent = '';\n            }\n        }\n\n        private setSvgScale(scale: ScaleProps): void {\n            const svg = this.getSvg();\n            if (!svg) {\n                return;\n            }\n\n            if (scale.noScale) {\n                svg.style.flex = '0 0 auto';\n                svg.style.width = '';\n                svg.style.height = '';\n            } else {\n                svg.style.flex = '';\n                svg.style.width = '100%';\n                svg.style.height = '100%';\n            }\n        }\n\n        mountView(node: HTMLElement, context: DivExtensionContext): void {\n            if (!this.params.lottie_url && !this.params.lottie_json) {\n                return;\n            }\n\n            const children: HTMLElement[] = Array.from(node.children).filter(filterHTMLElements);\n            // hide gif contents before load, so they would not blink after load\n            children.forEach(element => {\n                element.style.display = 'none';\n            });\n            node.setAttribute('data-lottie', 'true');\n\n            // create wrapper for an animation, because \"lottie-web\" destroys container on \"destroy\" call,\n            // and gif node itself cannot be used\n            const wrapper = this.wrapper = document.createElement('div');\n            this.wrapper.style.width = '100%';\n            this.wrapper.style.height = '100%';\n            const ratio = this.getRatio(context);\n            const scale = this.getScale(context);\n            if (ratio) {\n                this.wrapper.style.aspectRatio = String(ratio);\n            }\n            this.setWrapperScale(scale);\n            node.appendChild(this.wrapper);\n\n            const repeatCount = Number(context.processExpressions(this.params.repeat_count) ?? -1);\n            const repeatMode = context.processExpressions(this.params.repeat_mode);\n            const onError = () => {\n                this.animItem?.destroy();\n                // reveal back gif contents\n                children.forEach(element => {\n                    element.style.display = '';\n                });\n                node.removeAttribute('data-lottie');\n                if (this.wrapper) {\n                    this.wrapper.parentNode?.removeChild(this.wrapper);\n                    this.wrapper = undefined;\n                }\n                const err: WrappedError = new Error('Failed to load lottie animation') as WrappedError;\n                err.level = 'error';\n                err.additional = {\n                    url: this.params.lottie_url\n                };\n                context.logError(err);\n            };\n\n            this.unsubscribe = context.derviedExpression(this.params.lottie_url).subscribe(url => {\n                this.loadData(url).then(json => {\n                    this.animItem?.destroy();\n\n                    const loop = repeatCount !== 0;\n                    const animItem = this.animItem = loadAnimation({\n                        container: wrapper,\n                        animationData: json,\n                        renderer: 'svg',\n                        loop,\n                        rendererSettings: {\n                            preserveAspectRatio: scale.attribute\n                        }\n                    });\n                    this.setSvgScale(scale);\n                    this.animItem.addEventListener('data_failed', onError);\n                    if (loop && (repeatMode === 'reverse' || repeatCount !== -1)) {\n                        let direction = 1;\n                        let count = 0;\n                        animItem.addEventListener('loopComplete', () => {\n                            ++count;\n                            if (repeatCount !== -1 && count === repeatCount + 1) {\n                                animItem.stop();\n                                animItem.goToAndStop(animItem.totalFrames, true);\n                            } else {\n                                if (repeatMode === 'reverse') {\n                                    direction *= -1;\n                                    animItem.setDirection(direction);\n                                }\n                                animItem.goToAndPlay(direction === 1 ? 0 : animItem.totalFrames, true);\n                            }\n                        });\n                    }\n                }).catch(onError);\n            });\n\n            this.isPlayingUnsubscriber = context.derviedExpression(this.params.is_playing).subscribe(val => {\n                this.isPlaying = val !== false;\n                if (this.animItem) {\n                    this.animItem[this.isPlaying ? 'play' : 'pause']();\n                }\n            });\n        }\n\n        updateView(_node: HTMLElement, context: DivExtensionContext): void {\n            if (!this.wrapper) {\n                return;\n            }\n\n            const ratio = this.getRatio(context);\n            if (ratio) {\n                this.wrapper.style.aspectRatio = String(ratio);\n            }\n            const svg = this.getSvg();\n            if (svg) {\n                const scale = this.getScale(context);\n                this.setWrapperScale(scale);\n                this.setSvgScale(scale);\n                svg.setAttribute('preserveAspectRatio', scale.attribute);\n            }\n        }\n\n        unmountView(node: HTMLElement, _context: DivExtensionContext): void {\n            this.animItem?.destroy();\n            if (this.wrapper) {\n                this.wrapper.parentNode?.removeChild(this.wrapper);\n                this.wrapper = undefined;\n            }\n            const children: HTMLElement[] = Array.from(node.children).filter(filterHTMLElements);\n            children.forEach(element => {\n                element.style.display = '';\n            });\n            node.removeAttribute('data-lottie');\n\n            this.unsubscribe?.();\n            this.isPlayingUnsubscriber?.();\n        }\n    };\n}\n","import type { DivExtension, DivExtensionContext } from '../../typings/common';\n\nexport type MarkdownProcessor = (markdown: string) => string;\n\nexport interface MarkdownOptions {\n    cssClass?: string;\n}\n\nexport function markdownExtensionBuilder(process: MarkdownProcessor, options: MarkdownOptions = {}) {\n    return class Markdown implements DivExtension {\n        private prevDOM: Node | null = null;\n\n        private recalc(node: HTMLElement, context: DivExtensionContext): void {\n            const textWrapper = node.firstElementChild;\n            const firstRange = textWrapper?.firstElementChild;\n            if (!firstRange) {\n                return;\n            }\n\n            this.prevDOM = textWrapper.cloneNode(true);\n\n            const text = context.getComponentProperty<string>('text') || '';\n\n            const html = process(text);\n            const div = document.createElement('div');\n            div.innerHTML = html;\n\n            if (options?.cssClass) {\n                div.classList.add(options.cssClass);\n            }\n\n            const children = Array.from(textWrapper.childNodes);\n            for (let i = 0, len = children.length; i < len; ++i) {\n                const node = children[i];\n                if (node.nodeType !== 1 || node !== firstRange) {\n                    textWrapper.removeChild(node);\n                }\n            }\n\n            firstRange.innerHTML = '';\n            firstRange.appendChild(div);\n        }\n        mountView(node: HTMLElement, context: DivExtensionContext): void {\n            this.recalc(node, context);\n        }\n        updateView(node: HTMLElement, context: DivExtensionContext): void {\n            this.recalc(node, context);\n        }\n        unmountView(node: HTMLElement): void {\n            if (this.prevDOM) {\n                const textWrapper = node.firstElementChild;\n                if (textWrapper) {\n                    textWrapper.replaceWith(this.prevDOM);\n                }\n\n                this.prevDOM = null;\n            }\n        }\n    };\n}\n","import type { Variable } from './expressions/variable';\nimport type { Node } from './expressions/ast';\nimport type {\n    ComponentCallback,\n    CustomActionCallback,\n    Customization,\n    DivExtensionClass,\n    DivJson,\n    ErrorCallback,\n    FetchInit,\n    Platform,\n    StatCallback,\n    Theme,\n    TypefaceProvider,\n    WrappedError,\n    Patch,\n    VideoPlayerProviderClient\n} from '../typings/common';\nimport type { GlobalVariablesController } from './expressions/globalVariablesController';\nimport type { Store } from '../typings/store';\nimport type { CustomComponentDescription } from '../typings/custom';\nimport type { DivkitDebugInstance } from '../typings/client-devtool';\nimport { parse } from './expressions/expressions';\nimport { evalExpression as evalExpressionInner, type EvalResult } from './expressions/eval';\nimport { funcs } from './expressions/funcs/funcs';\nimport Root from './components/Root.svelte';\n\nexport function render(opts: {\n    target: HTMLElement;\n    json: DivJson;\n    id: string;\n    hydrate?: boolean;\n    globalVariablesController?: GlobalVariablesController;\n    mix?: string;\n    customization?: Customization;\n    builtinProtocols?: string[];\n    extensions?: Map<string, DivExtensionClass>;\n    onStat?: StatCallback;\n    onCustomAction?: CustomActionCallback;\n    onError?: ErrorCallback;\n    onComponent?: ComponentCallback;\n    typefaceProvider?: TypefaceProvider;\n    platform?: Platform;\n    theme?: Theme;\n    fetchInit?: FetchInit;\n    tooltipRoot?: HTMLElement;\n    customComponents?: Map<string, CustomComponentDescription> | undefined;\n    store?: Store;\n    weekStartDay?: number;\n    pagerChildrenClipEnabled?: boolean;\n    pagerMouseDragEnabled?: boolean;\n    videoPlayerProvider?: VideoPlayerProviderClient;\n    devtoolCreateHierarchy?: 'lazy' | 'eager';\n}): DivkitDebugInstance {\n    const { target, hydrate, ...rest } = opts;\n\n    const instance = new Root({\n        target: target,\n        props: rest,\n        hydrate: hydrate\n    });\n\n    return {\n        $destroy() {\n            instance.$destroy();\n        },\n        execAction(action) {\n            instance.execAction(action);\n        },\n        setTheme(theme) {\n            instance.setTheme(theme);\n        },\n        setData(newJson) {\n            instance.setData(newJson);\n        },\n        applyPatch(patch: Patch) {\n            return instance.applyPatch(patch);\n        },\n        getDebugVariables() {\n            return instance.getDebugVariables();\n        },\n        getDebugAllVariables() {\n            return instance.getDebugAllVariables();\n        }\n    };\n}\n\nexport * from './client';\n\nexport function evalExpression(expr: string, opts?: {\n    variables?: Map<string, Variable>;\n    type?: 'exact' | 'json';\n}): EvalResult {\n    return evalExpressionWithFullResult(expr, opts).result;\n}\n\nexport function evalExpressionWithFullResult(expr: string, opts?: {\n    variables?: Map<string, Variable>;\n    type?: 'exact' | 'json';\n}): {\n    result: EvalResult;\n    warnings: WrappedError[];\n} {\n    let ast: Node;\n    try {\n        ast = parse(expr, {\n            startRule: opts?.type === 'json' ? 'JsonStringContents' : 'start'\n        });\n    } catch (err) {\n        return {\n            result: {\n                type: 'error',\n                value: 'Unable to parse expression'\n            },\n            warnings: []\n        };\n    }\n    return evalExpressionInner(opts?.variables || new Map(), undefined, undefined, ast);\n}\n\nexport { valToString } from './expressions/utils';\n\nexport function functionNames(): string[] {\n    return Array.from(funcs.keys());\n}\n\nexport function parseExpression(expr: string, opts?: {\n    type?: 'exact' | 'json';\n}): Node {\n    return parse(expr, {\n        startRule: opts?.type === 'json' ? 'JsonStringContents' : 'start'\n    });\n}\n\nexport { walk as walkExpression } from './expressions/walk';\n"],"names":["toBigIntNoCheck","val","MAX_INT","MIN_INT","toBigInt","res","bigIntZero","absBigInt","signBigInt","buildConditionalExpression","expr","tail","buildTryExpression","buildBinaryExpression","head","result","element","buildLogicalExpression","buildMethodCall","buildVariableOrBoolean","txt","buildString","list","it","convertToInt64","str","escapeChar","char","peg$subclass","child","parent","C","peg$SyntaxError","message","expected","found","location","self","peg$padEnd","targetLength","padString","sources","src","k","s","offset_s","loc","e","filler","line","last","hatLen","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","part","classEscape","hex","ch","describeExpectation","describeExpected","descriptions","i","j","describeFound","peg$parse","input","options","peg$FAILED","peg$source","peg$startRuleFunctions","peg$parsestart","peg$parseJsonStringContents","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","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$anyExpectation","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$e26","peg$e27","peg$otherExpectation","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$f0","peg$f1","peg$f2","peg$f3","peg$f4","text","peg$f5","peg$f6","peg$f7","peg$f8","peg$f9","peg$f10","peg$f11","peg$f12","peg$f13","peg$f14","peg$f15","peg$f16","peg$f17","peg$f18","peg$f19","peg$f20","op","peg$f21","peg$f22","peg$f23","id","args","peg$f24","peg$f25","peg$f26","peg$f27","peg$f28","peg$f29","peg$f30","peg$f31","peg$f32","peg$f33","peg$f34","peg$f35","peg$f36","peg$f37","peg$f38","peg$f39","peg$f40","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","ignoreCase","parts","inverted","peg$endExpectation","description","peg$computePosDetails","pos","details","p","peg$computeLocation","startPos","endPos","offset","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","s0","s2","peg$parse_","peg$parseExpression","s1","peg$parseJsonStringChar","s3","s5","s4","s6","s7","s8","s9","s10","peg$parseOr","peg$parseAnd","peg$parseEqual","peg$parseComparison","peg$parseTry","peg$parseSum","peg$parseFactor","peg$parseUnaryExpression","peg$parseNumber","peg$parseInteger","peg$parseDoubleUnaryExpressionCatch","peg$parseMethod","s11","s12","s13","s14","peg$parseCall","peg$parseStrictIdentifier","peg$parseArguments","peg$parsePrimaryExpression","peg$parseIdentifierOrBoolean","peg$parseString","peg$parseStringContents","peg$parseStringChar","MAX_NUMBER","MIN_NUMBER","STRING","INTEGER","NUMBER","BOOLEAN","COLOR","URL","DATETIME","DICT","ARRAY","FUNCTION","walk","ast","visitors","_a","item","padLeft","count","correctColor","color","alpha","defaultColor","parsedColor","parseColor","stringifyColorToCss","correctColorWithAlpha","colorMatch","_","a","r","g","b","redPart","greenPart","bluePart","alphaPart","FuncError","valToInternal","dateToString","date","stringifySortReplacer","key","value","sorted","valToString","stringifyComplex","stringifyColor","safeConvertColor","valToPreview","typeToString","type","roundInteger","_ctx","checkIntegerOverflow","checkUrl","safeCheckUrl","gatherVarsFromAst","node","evalError","msg","evalOuterError","_msg","transformColorValue","integerToNumber","integerValue","EVAL_TYPE_TO_JS_TYPE","convertJsValueToDivKit","ctx","evalType","jsType","convertDivKitValueToJson","convertTypedValue","argsToStr","logFunctionMatchError","funcName","findRes","isOuterFunc","argsType","arg","prefix","makeError","expectedArgs","funcs","funcByArgs","methods","methodByArgs","registerFunc","name","cb","desc","arr","funcKey","registerMethod","matchFuncArgs","func","hasOverloads","minArgs","maxArgs","conversions","lastArg","funcArg","findBestMatchedFuncList","firstError","bestFunc","match","findBestMatchedFunc","map","convertArgs","funcToKey","toString","toNumber","num","toIntegerNumber","toIntegerString","toIntegerBoolean","toBooleanInteger","intVal","toBooleanString","toColor","toUrl","encodeUri","decodeUri","getValueForced","varName","fallback","variable","getValue","getColorValue","getUrlValue","firstDiffChar","str0","str1","char0","char1","TEST_NUMBER","numberFractionDivider","locale","formatter0","formatter1","numberGroupingDivider","decimalFormat","format","pattern","patternWithoutGroupping","rawParts","rawInteger","rawFraction","integer","fraction","groupIndex","digitsInGroup","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","groupChar","fractionChar","resultParts","resultInteger","divider","_err","registerStd","formatNumber","len","formatters","token","getter","era","month","weekday","hours","fixed","_token","timeOffset","fullOffset","formattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","msInDay","cleanEscapedString","matched","getWeekFirstDay","isUTC","weekStartDay","weekDay","getFirstWeekFirstDay","firstDay","dayDiff","date0","date1","getIOSWeekYear","week","firstWeekFirstDay","nextYearDate","nextYearFirstWeekFirstDay","isBeforeFirstWeek","isAfterLastWeek","year","dayOfYear","formatDate","opts","field","firstWeekday","dayOfMonth","substring","firstCharacter","getMaxDate","copy","parseUnixTime","parseUnixTimeAsLocal","nowLocal","addMillis","datetime","milliseconds","setYear","setMonth","setDay","day","setHours","setMinutes","minutes","setSeconds","seconds","setMillis","millis","method","makeFormat","getYear","getMonth","getDay","getDayOfWeek","getHours","getMinutes","getSeconds","getMillis","formatAsLocal","formatAsUTC","getTimestamp","registerDatetime","escapeRegExp","wrapError","error","params","wrapped","contains","wholeStr","partStr","start","end","replaceAll","what","replacer","index","lastIndex","trim","trimLeft","trimRight","toUpperCase","toLowerCase","calcPad","pad","padStart","padEnd","suffix","testRegex","regex","re","encodeRegex","registerStrings","divInteger","arg0","arg1","divNumber","modInteger","modNumber","mulInteger","mulNumber","subInteger","subNumber","sumInteger","sumNumber","absInteger","absNumber","maxInt","max","maxNum","minInt","min","minNum","maxNumber","minNumber","maxInteger","minInteger","round","sign","floor","ceil","signumInteger","signumNumber","copySignInteger","copySignNumber","registerMath","colorGetter","_vars","parsed","colorSetter","getColorAlpha","getColorRed","getColorGreen","getColorBlue","setColorAlpha","setColorRed","setColorGreen","setColorBlue","rgb","red","green","blue","argb","compositeAlpha","alpha0","alpha1","compositeComponent","bgColor","bgAlpha","fgColor","fgAlpha","alphaBlend","color0","color1","parsed0","parsed1","totalAlpha","registerColors","getDuration","delimiter","whole","MS_IN_SECOND","SECONDS_IN_MINUTE","MS_IN_MINUTE","MINUTES_IN_HOUR","MS_IN_HOUR","HOURS_IN_DAY","MS_IN_DAY","MS_IN_WEEK","getIntervalSeconds","getIntervalTotalSeconds","getIntervalMinutes","getIntervalTotalMinutes","getIntervalHours","getIntervalTotalHours","getIntervalTotalDays","getIntervalTotalWeeks","registerInterval","getProp","obj","path","current","dictGetter","dict","optWrapper","fallbackType","getDictString","getDictNumber","getDictInteger","getDictBoolean","getDictColor","getDictUrl","getDictArray","getDictDict","getDictOptString","getDictOptNumber","getDictOptInteger","getDictOptBoolean","getDictOptColor","getDictOptUrl","getDictOptArray","getDictOptDict","containsKey","_ext","isEmpty","getDictKeys","getDictValues","registerDict","STRING_VARARG","arrayGetter","runtimeType","array","getArrayString","getArrayNumber","getArrayInteger","getArrayBoolean","getArrayColor","getArrayUrl","getArrayArray","getArrayDict","getArrayOptString","getArrayOptNumber","getArrayOptInteger","getArrayOptBoolean","getArrayOptColor","getArrayOptUrl","getArrayOptArray","getArrayOptDict","filter","fn","argMatchers","fnMatch","matchItem","selectedFn","argType","registerArray","getStored","scope","fallbackValue","scopeValue","expectedType","scopeStr","registerStored","pi","toRadians","degrees","toDegrees","radians","sin","rad","cos","tan","cot","atan","atan2","y","x","asin","acos","registerTrigonometry","register","noop","identity","assign","tar","run","blank_object","run_all","fns","is_function","thing","safe_not_equal","src_url_equal_anchor","src_url_equal","element_src","url","not_equal","is_empty","subscribe","store","callbacks","callback","unsub","get_store_value","component_subscribe","component","create_slot","definition","$$scope","slot_ctx","get_slot_context","get_slot_changes","dirty","lets","merged","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","get_all_dirty_from_scope","length","set_store_value","ret","action_destroyer","action_result","split_css_unit","split","is_client","now","raf","tasks","run_tasks","task","loop","fulfill","globals","append","target","get_root_for_style","root","append_empty_stylesheet","style_element","append_stylesheet","style","insert","anchor","detach","destroy_each","iterations","detaching","svg_element","data","space","empty","listen","event","handler","attr","attribute","always_set_through_set_attribute","set_attributes","attributes","descriptors","set_custom_element_data_map","data_map","set_custom_element_data","prop","lower","set_dynamic_element_data","tag","children","set_data","set_input_value","set_style","important","select_option","select","mounting","option","select_value","selected_option","custom_event","detail","bubbles","cancelable","construct_svelte_component","props","managed_styles","active","hash","create_style_information","doc","info","create_rule","duration","delay","ease","uid","step","keyframes","t","rule","stylesheet","rules","animation","delete_rule","previous","next","anim","deleted","clear_rules","ownerNode","current_component","set_current_component","get_current_component","onMount","afterUpdate","onDestroy","createEventDispatcher","setContext","context","getContext","bubble","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","tick","add_render_callback","seen_callbacks","flushidx","saved_component","update","$$","flush_render_callbacks","filtered","targets","c","promise","wait","dispatch","direction","kind","outroing","outros","group_outros","check_outros","transition_in","block","local","transition_out","null_transition","create_in_transition","config","running","animation_name","cleanup","go","easing","linear","css","start_time","end_time","started","create_out_transition","group","original_inert_value","reset","create_bidirectional_transition","intro","running_program","pending_program","clear_animation","init","program","d","ensure_array_like","array_like_or_iterator","outro_and_destroy_block","lookup","update_keyed_each","old_blocks","get_key","dynamic","destroy","create_each_block","get_context","o","n","old_indexes","new_blocks","new_lookup","deltas","updates","child_ctx","will_move","did_move","new_block","old_block","new_key","old_key","get_spread_update","levels","to_null_out","accounted_for","get_spread_object","spread_props","create_component","mount_component","fragment","after_update","new_on_destroy","destroy_component","make_dirty","instance","create_fragment","append_styles","parent_component","ready","rest","nodes","SvelteComponent","__publicField","PUBLIC_VERSION","subscriber_queue","readable","writable","stop","subscribers","set","new_value","run_queue","subscriber","invalidate","derived","stores","initial_value","single","stores_array","auto","values","pending","sync","unsubscribers","Variable","converted","StringVariable","IntegerVariable","NumberVariable","BooleanVariable","ColorVariable","UrlVariable","DictVariable","ArrayVariable","TYPE_TO_CLASS","createVariable","constSubscribe","constSetter","ConstStringVariable","ConstNumberVariable","ConstIntegerVariable","ConstBooleanVariable","ConstColorVariable","ConstUrlVariable","ConstDictVariable","ConstArrayVariable","ConstDatetimeVariable","CONST_TYPE_TO_CLASS","Class","createConstVariable","variableToValue","variableValueFromString","evalStringLiteral","evalNumberLiteral","evalIntegerLiteral","evalBooleanLiteral","evalUnary","evalAny","mul","evalConditional","test","evalTry","evalTemplateLiteral","evalLogicalExpression","left","right","evalBinaryEquality","operator","evalBinaryCompare","leftVal","rightVal","evalBinarySum","err","evalBinaryFactor","evalBinaryExpression","evalCallExpression","builtInFindRes","evalMethodExpression","methodName","methodKey","evalVariable","customFuncs","EVAL_MAP","evalExpression","vars","customFunctions","ROOT_CTX","makeStyle","styles","pxToEm","casted","pxToEmWithUnits","htmlFilter","str2","Truthy","getBackground","bgs","solidUnique","bg","solid","gradient","image","radial","acc","colorMapToList","colorMap","_b","colors","_c","_d","RELATIVE_SIZE_MAP","radialCenterToCss","center","sizeVal","size","centerX","centerY","imageSize","imagePos","scale","objectFitToBackgroundSize","objectFit","hpos","vpos","correctNonNegativeNumber","defaultVal","checkPercentage","isVisibility","filterActions","visibilityAction","visibilityActions","disappearActions","rootCtx","componentContext","visibilityStatus","calcedList","observer","status","totalStore","callAction","unsubscribe","thresholds","observerCallback","entries","entry","calcedParams","percentage","nowVisible","limit","calcedAction","push","genClassName","mods","cssKey","devtoolReal","devapi","devtool","STATE_CTX","edgeInsertsToCss","edgeInsets","top","bottom","isNumber","isNonNegativeNumber","correctEdgeInserts","correctAlpha","hasOwnProperty","isDeepEqual","keysA","keysB","assignIfDifferent","newVal","correctVisibility","visibility","correctCSSInterpolator","interpolator","correctNumber","flattenAnimation","correctEdgeInsertsObject","sumEdgeInsets","side","aVal","bVal","correctBorderRadiusObject","cornersRadius","borderRadius","defaultRadius","fontSize","shadowToCssBoxShadow","shadow","_e","_f","shadowToCssFilter","media","isPrefersReducedMotion","MAX_ITERATIONS","layoutProvider","currentNode","widthVariable","heightVariable","counter","sizeHistory","setVariable","variableName","recalcProps","bbox","widthRes","heightRes","ENABLED_CTX","correctBooleanInt","composeAccessibilityDescription","accessibility","componentFakeAnimation","componentFakePagerDuplicate","translationToCss","translation","multiplier","pivotToCss","pivot","transformationsToTransform","transformations","pivotX","pivotY","reversePivotX","reversePivotY","VISIBILITY_CTX","doNothing","ACTION_CTX","getUrlSchema","isBuiltinSchema","schema","builtinSchemas","rootCss","span_aria_hidden_value","span","span_class_value","button","button_class_value","button_tabindex_value","a_class_value","a_tabindex_value","MIN_SWIPE_PX","MIN_LONG_TAP_DURATION","MAX_DOUBLE_TAP_DURATION","SUPPORTED_ACCESSIBILITY_TYPES","onMousedown","$$props","actions","doubleTapActions","longTapActions","pressStartActions","pressEndActions","hoverStartActions","hoverEndActions","cls","attrs","use","customAction","isNativeActionAnimation","hasInnerFocusable","customAccessibility","captureFocusOnAction","actionCtx","href","startTs","clickTs","startCoords","isChanged","hasJSAction","hasAnyActions","longtapTimer","clickTimer","role","isChecked","ariaHidden","hasCustomAction","$processedActions","action","processClick","processUrls","onClick","onPointerDown","onPointerMove","onPointerUp","onPointerEnter","onPointerLeave","onKeydown","$$value","$$invalidate","$$subscribe_processedActions","processedActions","isPositiveNumber","getCssFilter","filters","logError","img","img_src_value","create_if_block","background","radius","onImgError","stl","hasNativeAnimation","actionable_changes","span_style_value","create_if_block_2","create_if_block_1","if_block","HORIZONTAL_ALIGN_TO_GENERAL_LTR","HORIZONTAL_ALIGN_TO_GENERAL_RTL","VERTICAL_ALIGN_TO_GENERAL","stateChangeErrorMessage","layoutParams","customDescription","customPaddings","customActions","additionalPaddings","heightByAspect","parentOf","parentOfSimpleMode","replaceItems","alwaysCustomFocus","stateCtx","isEnabled","visibilityCtx","extensions","extensionStore","prevExtensionsVal","prevChilds","borderStyle","borderElemStyle","hasBorder","strokeWidth","strokeColor","cornerRadius","backgroundRadius","selfPadding","margin","widthMods","width","widthMin","widthMax","widthNum","widthFlexGrow","widthFlexShrink","widthFill","hasWidthError","heightMods","height","heightMin","heightMax","heightNum","heightFlexGrow","heightFlexShrink","heightFill","hasHeightError","opacity","backgroundStyle","hasSeparateBg","jsonTransitionTriggers","hasStateChangeTrigger","hasVisibilityChangeTrigger","stateChangingInProgress","visibilityChangingInProgress","transitionChangeInProgress","focusActions","blurActions","actionAnimationList","actionAnimationTransition","animationOpacityStart","animationOpacityEnd","animationScaleStart","animationScaleEnd","isVisibilityInited","transform","layoutProviderResizeObserver","hasCustomFocus","prevTriggersUnsubscribe","registred","dev","idUnregister","visAction","rebind","useAction","$isEnabled","replaceWith","items","newItems","parseActionAnimation","startValue","endValue","parentVisibilityStore","selfVisibilityStore","isVisible","onVisibilityChange","nextVisibility","transition","unmountExtensions","afterInstanceUpdate","runVisibilityActions","isVisibilityActionsEnabled","focusHandler","get","blurHandler","origJson","$$subscribe_jsonFocus","jsonFocus","$$subscribe_jsonBorder","jsonBorder","$$subscribe_jsonPaddings","jsonPaddings","$$subscribe_jsonMargins","jsonMargins","$$subscribe_jsonWidth","jsonWidth","$$subscribe_jsonAlignmentHorizontal","jsonAlignmentHorizontal","$$subscribe_jsonHeight","jsonHeight","$$subscribe_jsonAlignmentVertical","jsonAlignmentVertical","$$subscribe_jsonAlpha","jsonAlpha","$$subscribe_jsonAccessibility","jsonAccessibility","$$subscribe_jsonBackground","jsonBackground","$$subscribe_jsonActionAnimation","jsonActionAnimation","$$subscribe_jsonVisibility","jsonVisibility","$$subscribe_jsonTransform","jsonTransform","$$subscribe_jsonTransformations","jsonTransformations","$$subscribe_jsonCaptureFocusOnAction","jsonCaptureFocusOnAction","border","$jsonFocus","$jsonBorder","newBorderStyle","newBorderElemStyle","newHasBorder","newBackgroundRadius","strokeStyle","biasedRadius","corner","$jsonPaddings","padding","$direction","$jsonMargins","widthType","newWidth","newWidthMin","newWidthMax","newWidthMods","newFlexGrow","newFlexShrink","newWidthFill","newWidthError","$jsonWidth","leftMargin","rightMargin","totalWidth","align","$jsonAlignmentHorizontal","heightType","newHeight","newHeightMin","newHeightMax","newHeightMods","newHeightFill","newHeightError","_g","$jsonHeight","topMargin","_h","bottomMargin","_i","totalHeight","$jsonAlignmentVertical","parentOverlapMod","gridArea","$jsonAlpha","$jsonAccessibility","descr","$jsonBackground","json","newActions","newDoubleTapActions","newLongTapActions","newFocusActions","_j","newBlurActions","_k","newPressStartActions","newPressEndActions","newHoverStartActions","newHoverEndActions","$jsonActionAnimation","$jsonCaptureFocusOnAction","prevVisibility","$jsonVisibility","$parentVisibilityStore","exts","ext","isEnabledList","$extensionStore","$jsonTransformations","$jsonTransform","flexBasis","componentPath","correctPositiveNumber","fontWeightToCss","fontWeight","correctFontWeight","fontWeightValue","edgeInsertsMultiply","multiply","variationSettingsToString","variationSettings","vals","svg","defs","feGaussianBlur","feColorMatrix","feBlend","div0","div1","div2","div3","div4","div5","t_value","if_block0","rootFontSize","textStyles","singleline","cloudBg","cloudBgId","customLineHeight","cloudFilterId","decoration","lineHeight","letterSpacing","fontFamily","fontVariationSettings","colorOverride","verticalAlign","maskAnimated","maskColor","maskSize","maskDensity","newDecoration","topOffset","hasCloudBg","cloudPadding","mask","hasMask","sizeEm","density","customVerticalAlign","correctAlignmentHorizontal","orientation","correctAlignmentVertical","propToString","correctTintMode","tintMode","filterEnabledActions","debounce","timeout","timer","autoEllipsize","resizeObserver","recalc","computedStyle","offsetHeight","scrollHeight","lines","debouncedRecalc","newOpts","voidUnsubscribe","constStore","getItemsFromItemBuilder","builder","prototypes","additionalVars","div","prototype","getElementsFromItemBuilder","each_blocks","span1","span1_style_value","span0","create_if_block_6","textrangeview_changes","img_class_value","img_loading_value","img_alt_value","create_if_block_4","outer_changes","maxHeight","maxLines","lineClamp","multiline","halign","valign","rootTextColor","focusTextColor","selectable","renderList","wholeTextCloudBgId","wholeTextCloudBgOpacity","usedTintColors","rootTextStyles","ranges","images","updateRenderList","textRanges","textImages","newRenderList","mode","content","prevIndex","activeRanges","range","rangeStart","rangeEnd","rangeWithExplicitProps","textStyles2","imageWidth","imageHeight","baselineOffset","wrapperStyle","svgFilterId","tintColor","a11yAttrs","$$subscribe_jsonText","jsonText","$$subscribe_jsonRanges","jsonRanges","$$subscribe_jsonImages","jsonImages","$$subscribe_jsonRootTextStyles","jsonRootTextStyles","$$subscribe_jsonTextSize","jsonTextSize","$$subscribe_jsonLineHeight","jsonLineHeight","$$subscribe_jsonMaxLines","jsonMaxLines","$$subscribe_jsonHAlign","jsonHAlign","$$subscribe_jsonVAlign","jsonVAlign","$$subscribe_jsonTextColor","jsonTextColor","$$subscribe_jsonFocusTextColor","jsonFocusTextColor","$$subscribe_jsonTruncate","jsonTruncate","$$subscribe_jsonTextGradient","jsonTextGradient","$$subscribe_jsonSelectable","jsonSelectable","$$subscribe_jsonAutoEllipsize","jsonAutoEllipsize","$$subscribe_jsonRangeBuilderData","jsonRangeBuilderData","$$subscribe_jsonImageBuilderData","jsonImageBuilderData","$jsonText","newGradient","$jsonTextGradient","$jsonRootTextStyles","$jsonTextSize","newLineHeight","$jsonLineHeight","$jsonMaxLines","newMaxHeight","newMaxLines","newLineClamp","newMultiline","$jsonAutoEllipsize","$jsonHAlign","$jsonVAlign","isAllTextSameColor","$jsonRanges","isOnlyOneColorDefined","$jsonTextColor","newRootTextColor","$jsonFocusTextColor","truncate","$jsonTruncate","$jsonSelectable","$jsonRangeBuilderData","$jsonImageBuilderData","$jsonImages","innerMods","prepareMargins","margins","setAdditionalPadding","insets","separator","crossAxis","hMargin","vMargin","calcAdditionalPaddings","lineSeparator","calcItemsGap","itemSpacing","lineSpacing","separatorHMargins","separatorVMargins","lineSeparatorHMargins","lineSeparatorVMargins","isWidthMatchParent","isHeightMatchParent","correctContainerOrientation","calcRoundedRectangleSize","shape","calcCircleSize","calcDrawableStyle","old","stroke","borderColor","borderWidth","correctDrawableStyle","drawable","availShapes","defaultValue","hasGapSupport","flex","correctContentAlignmentVertical","correctContentAlignmentHorizontal","simpleThrottle","runTs","prevRes","awaits","getMarginBox","elem","computed","style_left","style_top","style_width_1","style_height_1","THROTTLE_TIMEOUT","appendSeparator","separators","separatorStyle","box0","box1","containingBox","appendSeparators","boxes","contentBox","lastBox","contentHAlign","contentVAlign","throttledUpdated","updateSeparators","mounted","mutationObserver","mutationObserverCallback","records","record","classList","parentElement","parentBbox","outerCss","rows","row","firstChild","first","rowBoxes","rowBox","HALIGN_MAP","VALIGN_MAP","AVAIL_SEPARATOR_SHAPES","childStore","aspect","childLayoutParams","prevContext","jsonItems","$$subscribe_jsonItemBuilderData","jsonItemBuilderData","$$subscribe_jsonOrientation","jsonOrientation","$$subscribe_jsonLayoutMode","jsonLayoutMode","$$subscribe_jsonContentVAlign","jsonContentVAlign","$$subscribe_jsonContentHAlign","jsonContentHAlign","$$subscribe_jsonSeparator","jsonSeparator","$$subscribe_jsonLineSeparator","jsonLineSeparator","$$subscribe_jsonItemSpacing","jsonItemSpacing","$$subscribe_jsonLineSpacing","jsonLineSpacing","$$subscribe_jsonAspect","jsonAspect","$$subscribe_jsonClipToBounds","jsonClipToBounds","$jsonItemBuilderData","unusedContexts","keyToContextMap","hasDuplicateKeys","foundByData","$jsonOrientation","wrap","$jsonLayoutMode","supportWidthWrapContent","supportHeightWrapContent","stretchWidth","$childStore","stretchHeight","$jsonContentVAlign","$jsonContentHAlign","$jsonItemSpacing","$jsonLineSpacing","$jsonSeparator","$jsonLineSeparator","newRatio","$jsonAspect","newChildLayoutParams","isWidthWrapContent","isHeightWrapContent","sumWidth","$jsonClipToBounds","correctGeneralOrientation","$$subscribe_jsonDelimiterStyle","jsonDelimiterStyle","$jsonDelimiterStyle","hasContent","correctImagePosition","prepareBase64","updateDevtool","img_1","img_1_src_value","STATE_ERROR","FALLBACK_IMAGE","img_1_loading_value","EMPTY_IMAGE","DEFAULT_PLACEHOLDER_COLOR","STATE_LOADING","STATE_LOADED","GIF_RE","GIF_BASE64","GIF_URL_ERROR","state","placeholderColor","hasError","imageUrl","backgroundImage","position","aspectContent","aspectContentVAlign","aspectRatio","animationInterpolator","animationFadeStart","animationDelay","animationDuration","filterClipPath","isRTLMirror","highPriorityPreview","highPrority","updateImageUrl","_url","updatePosition","onLoad","onError","$$subscribe_jsonImageUrl","jsonImageUrl","$$subscribe_jsonGifUrl","jsonGifUrl","$$subscribe_jsonPreview","jsonPreview","$$subscribe_jsonPreviewUrl","jsonPreviewUrl","$$subscribe_jsonPlaceholderColor","jsonPlaceholderColor","$$subscribe_jsonScale","jsonScale","$$subscribe_jsonPosition","jsonPosition","$$subscribe_jsonA11y","jsonA11y","$$subscribe_jsonTintColor","jsonTintColor","$$subscribe_jsonTintMode","jsonTintMode","$$subscribe_jsonAppearanceAnimation","jsonAppearanceAnimation","$$subscribe_jsonFilters","jsonFilters","$$subscribe_jsonPreloadRequired","jsonPreloadRequired","$$subscribe_jsonHighPriorityPreviewShow","jsonHighPriorityPreviewShow","isGif","$jsonGifUrl","$jsonImageUrl","img2","$jsonHighPriorityPreviewShow","isWidthContent","isHeightContent","preview","$jsonPreview","previewUrl","$jsonPreviewUrl","$jsonPlaceholderColor","$jsonScale","$jsonPosition","alt","$jsonA11y","$jsonTintColor","newTintColor","newTintMode","$jsonTintMode","$jsonAppearanceAnimation","newFilter","newClipPath","$jsonFilters","isSpannedWeight","weight","formatWeight","gridCalcTemplates","weights","minSizes","sizes","allTracksHasWeight","minSize","totalWeight","template","minTrackSize","unknown_changes","columnCount","resultItems","columnsWeight","rowsWeight","columnsMinWidth","rowsMinHeight","columnsWidth","rowsHeight","rowCount","$$subscribe_jsonColumnCount","jsonColumnCount","$jsonColumnCount","jsonToContextMap","used","maxY","childInfo","colSpan","rowSpan","widthWeight","heightWeight","isFree","OUTER","correctAlignment","nonNegativeModulo","mod","create_if_block_5","div0_style_value","create_if_block_3","if_block1","arrowsCss","div1_style_value","rebuildItemsGrid","columns","column","wasFirstVisibleItem","scroller","galleryItemsWrappers","hasScrollLeft","hasScrollRight","itemsGridElem","leftClass","rightClass","scrollAlign","gridGap","crossGridGap","crossSpacing","paddingSizes","lastPaddingSize","scrollerStyle","scrollSnap","defaultItem","isDesktop","updateArrowsVisibility","scrollLeft","scrollWidth","containerWidth","updateArrowsVisibilityDebounced","scroll","getItems","maxLen","scrollTo","animated","scrollDirection","scrollToGalleryItem","galleryElements","extraOffset","overflow","isHorizontal","elementOffset","elementSize","scrollWrapperSize","totalScrollAlign","maxOffset","scrollOffset","directionMultiplier","currentOffset","newOffset","checkIsIntersecting","checkIsFullyIntersecting","calculateCurrentElementIndex","scrollerRect","firstFullyVisibleElement","el","visibleElementsMap","firstVisibleElement","rowIndex","click_handler","click_handler_1","$$subscribe_jsonCrossContentAlignment","jsonCrossContentAlignment","$$subscribe_jsonScrollContentAlignment","jsonScrollContentAlignment","$$subscribe_jsonCrossSpacing","jsonCrossSpacing","$$subscribe_jsonScrollMode","jsonScrollMode","$$subscribe_jsonRestrictParentScroll","jsonRestrictParentScroll","$$subscribe_jsonScrollbar","jsonScrollbar","$$subscribe_jsonDefaultItem","jsonDefaultItem","shouldCheckArrows","$isDesktop","$jsonCrossContentAlignment","$jsonScrollContentAlignment","$jsonScrollMode","$jsonCrossSpacing","firstSize","lastSize","calcedLastSize","itemsGrid","newScrollerStyle","scrollPadding","gridStyle","$jsonScrollbar","$jsonDefaultItem","currentElementIndex","previousItem","isEdgeScroll","nextItem","itemId","targetItems","correctTabDelimiterStyle","ARROW_LEFT","ARROW_RIGHT","HOME","END","correctBorderRadius","getTouchCoords","firstEvent","enabled","enabledStore","constants_0","constants_1","t1_value","t1","div_style_value","enabledcontext_changes","div_id_value","div_aria_labelledby_value","each_blocks_1","instId","tabsElem","panelsWrapper","swiperElem","tabFontSize","tabPaddings","tabLineHeight","tabLetterSpacing","tabBorderRadius","tabActiveFontWeight","tabActiveFontFamily","tabActiveFontVariationSettings","tabInactiveFontWeight","tabInactiveFontFamily","tabInactiveFontVariationSettings","tabActiveTextColor","tabInactiveTextColor","tabActiveBackground","tabInactiveBackground","tabItemSpacing","separatorBackground","separatorMargins","titlePadding","isSwipeInitialized","isAnimated","previousSelected","showedPanels","visiblePanels","hidePanelsTimeout","moveCoords","swipeStartTime","isSwipeStarted","isSwipeCanceled","startTransform","currentTransform","delimitierStyle","animationType","selectedTabStyles","selected","setSelected","updateSlideAnimation","updateItems","focus","initTabsSwipe","changeTab","selectedTab","moveSelected","shift","indices","newSelectedIndex","newSelected","selectItem","_event","updateTransform","updateShowedPanels","updateWrapperHeight","hideNonVisiblePanels","around","activePanel","onTabKeydown","onTouchStart","restrictClosest","onTouchMove","coords","panelsWrapperWidth","onTouchEnd","swipeDist","swipeCoefficient","clampIndex","parentOfItems","jsonSelectedTab","$$subscribe_jsonTabStyle","jsonTabStyle","$$subscribe_jsonSeparatorColor","jsonSeparatorColor","$$subscribe_jsonSeparatorPaddings","jsonSeparatorPaddings","$$subscribe_jsonSwipeEnabled","jsonSwipeEnabled","$$subscribe_jsonTitlePaddings","jsonTitlePaddings","newLayoutParams","tabStyle","$jsonTabStyle","paddings","adjustedPaddings","$jsonSeparatorColor","$jsonSeparatorPaddings","isSwipeEnabled","$jsonSwipeEnabled","$jsonTitlePaddings","cubicInOut","cubicIn","cubicOut","f","interpolateEasing","table","p0","p1","t2","spring","EASING","getEasing","DEFAULT_DURATION","DEFAULT_DELAY","DEFAULT_ALPHA","DEFAULT_SCALE","calcMaxDuration","transitions","inOutTransition","elementBbox","rootBbox","maxDuration","startAlpha","tMs","relative","oriented","eased","distance","travel","offsetX","offsetY","translate","anyScale","activeScale","lerp","changeBoundsTransition","beforeBbox","afterBbox","flattenTransition","style_width","style_height","haveFadeTransition","getTransitionChange","transitionOrSet","animationRoot","transitionChangeBoxes","childrenIds","animationList","childrenWithTransitionIn","childrenWithTransitionOut","childrenWithTransitionChange","stateUnregister","selectedId","selectedComponentContext","childContexts","inited","setState","selectState","selectedState","states","changed","getItemAnimation","parentComponentContext","transitionsList","startBbox","jsonCopy","stateId","wasIds","transitionsOutToRun","newState","stateVariable","transitionsInToRun","inOutList","changeList","saved","itemWithMaxDuration","resolve","initDefaultState","jsonDefaultStateId","onOutro","introend_handler","introend_handler_1","stateVariableName","getItemMods","SIZE_MAP","DUPLICATES_IN_INFINITE","WHEEL_THROTTLE","MIN_SWIPE_DISTANCE","pagerItemsWrapper","currentItem","prevSelectedItem","hasLayoutModeError","paddingObj","autoSizeVal","templateSizeVal","crossAxisAlignment","scrollAxisAlignment","visibleItemsWithOutDuplicates","visibleItems","visibleToAllMap","allToVisibleMap","registerData","wheelFired","infinite","hasDuplicates","shouldClampDuplicates","transformStr","swipeTs","cancelPointer","pagerDataUpdate","scrollToPagerItem","itemCountVariable","runSelectedActions","getTransformPosition","visibleIndex","atStart","atEnd","pagerItem","containerSize","getContainerSize","startPadding","getStartPadding","endPadding","getEndPadding","scrollSize","getScrollSize","scrollToVisiblePagerItem","transformToStr","setPreviousItem","setNextItem","onFocus","onItemsClick","newTransform","newCurrent","onWheel","onTransitionEnd","resnap","$$subscribe_jsonCrossAxisAlignment","jsonCrossAxisAlignment","$$subscribe_jsonScrollAxisAlignment","jsonScrollAxisAlignment","$$subscribe_jsonInfiniteScroll","jsonInfiniteScroll","jsonItemCountVariable","$jsonInfiniteScroll","_it","firstDuplicates","lastDuplicates","gridAutoSizeProp","gridTemplateSizeProp","$jsonScrollAxisAlignment","paddingStart","paddingEnd","neighbourPageWidth","pageWidth","$jsonCrossAxisAlignment","AVAIL_SHAPES","activeStyle","inactiveStyle","placement","spaceBetweenCenters","maxVisibleItems","indicatorItemsWrapper","pagerData","pagerDataUnsubscribe","onPagerDataUpdate","currentItemOffsetLeft","onIndicatorItemClick","onIndicatorItemKeydown","prevItem","moveFocus","activeItem","pagerId","$$subscribe_jsonShape","jsonShape","$$subscribe_jsonActiveItemColor","jsonActiveItemColor","$$subscribe_jsonInactiveItemColor","jsonInactiveItemColor","$$subscribe_jsonActiveItemSize","jsonActiveItemSize","$$subscribe_jsonActiveShape","jsonActiveShape","$$subscribe_jsonInactiveShape","jsonInactiveShape","$$subscribe_jsonSpaceBetweenCenters","jsonSpaceBetweenCenters","$$subscribe_jsonItemsPlacement","jsonItemsPlacement","$jsonActiveShape","$jsonInactiveShape","$jsonShape","activeSize","$jsonActiveItemSize","$jsonInactiveItemColor","$jsonActiveItemColor","$jsonItemsPlacement","$jsonSpaceBetweenCenters","correctSliderTextStyle","textStyle","typefaceProvider","convertedColor","clamp","MAX_TICKS","fillTicks","from","to","minValue","maxValue","inside","startOffset","input_1","div0_class_value","DEFAULT_DRAWABLE_STYLE","THUMB_MARK_SHAPES","TRACK_SHAPES","tracksInner","switchedTracks","thumbStyle","thumbSecondaryStyle","trackInactiveStyle","trackActiveStyle","markActiveTicks","markActiveStyle","markInactiveTicks","markInactiveStyle","textSecondaryStyle","secondaryDescription","renderRanges","cleanupPress","$valueVariable","value2","$value2Variable","trackActiveOffset","trackActivePart","pushParts","intersectionStart","selfStyle","prev","total","rangeLeft","rangeRight","onSecondMousedown","pageX","rangeBbox","final","middle","onInputChange","value2Variable","valueVariable","input_handler","input_handler_1","firstVariable","secondVariable","$$subscribe_valueVariable","$$subscribe_value2Variable","$$subscribe_jsonMinValue","jsonMinValue","$$subscribe_jsonMaxValue","jsonMaxValue","$$subscribe_jsonThumbStyle","jsonThumbStyle","$$subscribe_jsonThumbSecondaryStyle","jsonThumbSecondaryStyle","$$subscribe_jsonTrackInactiveStyle","jsonTrackInactiveStyle","$$subscribe_jsonTrackActiveStyle","jsonTrackActiveStyle","$$subscribe_jsonMarkActiveStyle","jsonMarkActiveStyle","$$subscribe_jsonMarkInactiveStyle","jsonMarkInactiveStyle","$$subscribe_jsonTextStyle","jsonTextStyle","$$subscribe_jsonSecondaryTextStyle","jsonSecondaryTextStyle","$$subscribe_jsonSecondaryAccessibility","jsonSecondaryAccessibility","$$subscribe_jsonIsEnabled","jsonIsEnabled","$jsonMinValue","$jsonMaxValue","newVal2","$jsonThumbStyle","$jsonThumbSecondaryStyle","$jsonTrackInactiveStyle","$jsonTrackActiveStyle","newStyle","$jsonMarkActiveStyle","$jsonMarkInactiveStyle","$jsonTextStyle","$jsonSecondaryTextStyle","$jsonIsEnabled","$jsonSecondaryAccessibility","paddingTop","paddingRight","paddingBottom","paddingLeft","newHasError","maxThumbWidth","maxThumbHeight","trackPart","trackSecondaryPart","textDiff","diff","leftIndex","rightIndex","lengthDiff","MaskCharStatic","MaskCharDynamic","placeholder","BaseInputMask","initialMaskData","maskChar","newMaskData","restoreValue","previousRawValue","maskKey","regexp","mappingItem","newRawValue","newValue","tailStart","body","fehi","maxShift","dynamicLeft","initialInsertableSubstring","holder","positionByDiff","moveToAndGetNextHolderFilter","maskCharFilter","trimmedSubstring","insertableCharIndex","FixedLengthInputMask","exception","updateFixedMask","oldValue","maskData","CurrencyInputMask","currentValue","nonZeroDigitsString","forValue","formatted","decoding","oldSeparatorIndex","newSeparatorIndex","needInvalidateMask","clearedValue","rawValue","localeDigit","separatorOutOfDiffIndex","replaceCharInDiff","maxSeparatorOffset","leftToInsert","oldSeparatorLeft","containsSeparator","separatorInserted","canInsertSeparator","updateCurrencyMask","STRING_NODE_TYPE","countNodeChars","calcSelectionOffset","container","sel","sum","setSelectionOffset","UNIVERSAL_MASK","COUNTRY_CODE_END_MARKER","EXTRA_NUMBERS","DEFAULT_DECODING","PhoneInputMask","phoneMaskPattern","oldRawValue","newPattern","rawValueDiff","dynamicDestination","dynamicCounter","currentPattern","resolveObject","countryCodeInd","digit","updatePhoneMask","input_1_aria_describedby_value","input_1_style_value","input_1_maxlength_value","input_1_enterkeyhint_value","span0_style_value","span_aria_describedby_value","span_enterkeyhint_value","onPaste","isSupportInputMode","KEYBOARD_MAP","ALLOWED_BLOCKED_MULTILINE_KEYS","isPressed","inputMask","contentEditableValue","hintColor","textColor","highlightColor","alignmentHorizontal","alignmentVertical","keyboardType","inputType","inputMode","verticalPadding","maxLength","autocapitalization","enterKeyType","describedBy","validatorsFirstRun","selectionStart","selectionEnd","updateMaskData","runRawValueMask","checkFilters","onInput","isMultiline","runValueMask","runValidators","setCursorPosition","blockOverflow","onKeyDown","getSelectionStart","getSelectionEnd","selection","rawValueVariable","cursorPosition","$rawValueVariable","isFirstRun","validators","describeList","validator","isValid","htmlId","rawVariable","$$subscribe_rawValueVariable","$$subscribe_jsonHintText","jsonHintText","$$subscribe_jsonHintColor","jsonHintColor","$$subscribe_jsonFontSize","jsonFontSize","$$subscribe_jsonFontWeight","jsonFontWeight","$$subscribe_jsonFontWeightValue","jsonFontWeightValue","$$subscribe_jsonFontFamily","jsonFontFamily","$$subscribe_jsonFontVariationSettings","jsonFontVariationSettings","$$subscribe_jsonLetterSpacing","jsonLetterSpacing","$$subscribe_jsonHighlightColor","jsonHighlightColor","$$subscribe_jsonKeyboardType","jsonKeyboardType","$$subscribe_jsonMask","jsonMask","$$subscribe_jsonVisibleMaxLines","jsonVisibleMaxLines","$$subscribe_jsonSelectAll","jsonSelectAll","$$subscribe_jsonMaxLength","jsonMaxLength","$$subscribe_jsonAutocapitalization","jsonAutocapitalization","$$subscribe_jsonEnterKeyType","jsonEnterKeyType","$$subscribe_jsonValidators","jsonValidators","$jsonMask","$jsonMaxLength","$jsonValidators","$jsonHintText","$jsonHintColor","$jsonFontSize","$jsonFontWeight","$jsonFontWeightValue","$jsonFontFamily","$jsonFontVariationSettings","$jsonLetterSpacing","$jsonHighlightColor","$jsonKeyboardType","$jsonVisibleMaxLines","$jsonAutocapitalization","$jsonEnterKeyType","paddingStl","verticalPaddingStl","option_value_value","select_1","select_1_style_value","t0","t0_value","selectText","prevWarnValue","filteredItems","innerStl","selectStl","correctVideoSource","videoSize","video","video_style_value","source_1","source_1_src_value","source_1_type_value","videoPlayerProvider","isSelfVariableSet","videoElem","videoParentElem","autoplay","muted","preload","poster","playbackSpeed","aspectPaddingBottom","isAbsolute","elapsedVariableUnsubscriber","providedVideoTemplate","customVideoInstance","shouldUseVideoProvider","calcVideoProviderData","evalled","repeatable","autostart","preloadRequired","variableListener","pause","onTimeUpdate","elapsedVariable","onEnd","onPlaying","onPause","onWaiting","$jsonSource","$jsonRepeatable","$jsonAutostart","$jsonMuted","$jsonPreload","elapsedVariableName","$$subscribe_jsonSource","jsonSource","$$subscribe_jsonRepeatable","jsonRepeatable","$$subscribe_jsonAutostart","jsonAutostart","$$subscribe_jsonMuted","jsonMuted","$$subscribe_jsonPreload","jsonPreload","$$subscribe_jsonPlaybackSpeed","jsonPlaybackSpeed","$jsonPlaybackSpeed","booleanInt","div1_class_value","onColor","onSubColor","$$subscribe_jsonOnColor","jsonOnColor","$jsonOnColor","svelte_element","svelte_element_data","svelte_element_levels","previous_tag","create_dynamic_element","customElem","templateContent","templateAttrs","hasItemsError","variables","varaible","TYPE_MAP","Text","Container","Separator","Image","Grid","Gallery","Tabs","State","Pager","Indicator","Slider","Input","Select","Video","Switch","Custom","childJson","errorText","feComposite","feComposite_operator_value","filter_id_value","feFlood","show_if","svgFiltersMap","applyTemplate","templateContext","templates","newContext","copyTemplated","base","extender","keys","simpleKeys","templateKeys","newJson","MAX_ENTRIES","cache","latestItem","cacheGet","cacheSet","supportedTypes","checkCustomFunction","argumentsNames","customFunctionWrap","parse","warn","mergeCustomFunctions","map0","map1","defined","simpleCheckInput","card","templateName","uniq","ExpressionBinding","keepComplex","hasExpressions","prepareVarsObj","jsonProp","maxDepth","propVars","applyVars","usedVars","subres","prepareVars","GlobalVariablesController","createGlobalVariablesController","AVAIL_ACTIONS_NAMES","AVAIL_ACTIONS","TimersController","_id","actionTyped","startTick","arrayInsert","handle","variableInstance","newList","arrayRemove","arraySet","dictSetValue","newDict","copyToClipboard","correctDirection","createAnimator","animator","execAnyActions","parsedStart","parsedEnd","repeatCount","animationTime","localTime","iterationDuration","maxTime","mix","iterationNumber","dir","getTooltipContext","getStateContext","checkString","allowedMethods","checkMethod","checkHeaders","headers","header","checkSubmitAction","updateStructure","processed","newObj","temp","int","inOutAnimation","_node","animations","flattenList","_l","hasDialogSupport","DEFAULT_ANIMATION","dialog","dialog_class_value","button_aria_label_value","openedTooltipsStack","internalId","creationTime","tooltipNode","childrenContainer","substrateContainer","substratePlace","visible","tooltipX","tooltipY","tooltipWidth","tooltipHeight","substrateComponentContext","modal","prevFocusedElement","bringToTopNode","bringToTopOrigVisibility","bringToTopClone","bringToTopCloneContainer","bringToTopObserver","reposition","prevTransform","ownerBbox","tooltipBbox","calcedWidth","calcedHeight","$position","$offsetX","$offsetY","onOutClick","closeByOutside","onWindowResize","onClose","onIntroStart","animationInDuration","onIntroEnd","onOutroStart","animationOutDuration","updateBringToTopClone","$$subscribe_position","$$subscribe_offsetX","$$subscribe_offsetY","$$subscribe_animationIn","animationIn","$$subscribe_animationOut","animationOut","$animationIn","$animationOut","fly","target_opacity","od","xValue","xUnit","yValue","yUnit","u","li","ul","div_class_value","div_transition","popupMix","itemMix","menuNode","menuX","menuY","menuWidth","menuHeight","menuBbox","windowWidth","windowHeight","onWindowClick","onItemAction","emptyTouchstartHandler","tooltipview_changes","menu_1_changes","isPointerFocus","rootInstancesCount","onWindowKeyDown","onWindowPointerDown","AVAIL_SET_STORED_TYPES","AVAIL_SET_STORED_ALL_TYPES","mergeMaps","variables0","variables1","platform","theme","themeVariableName","globalVariablesController","customization","builtinProtocols","onStat","onSubmit","onCustomAction","onComponent","_fontFamily","fetchInit","tooltipRoot","customComponents","pagerChildrenClipEnabled","pagerMouseDragEnabled","devtoolCreateHierarchy","isMounted","touchQuery","currentTheme","themeQuery","themeVariable","themeInit","themeQueryListener","directionStore","setTheme","newTheme","getDebugVariables","localVariables","getDebugAllVariables","setData","applyPatch","applyPatchInternal","builtinSet","hasIdError","variablesController","globalVariablesStore","globalVariables","awaitingGlobalVariables","awaitingGlobalVariablesFacades","timersController","allRunningAnimators","tooltipCounter","tooltips","menu","timeouts","getCustomization","getDerivedFromVars","emptyVarsError","prepared","awaitVariableChanges","unsubscribeDerived","evalExpr","isFirst","derivedResult","_instance","getJsonWithVars","preparePrototypeVariables","indexVar","logStat","hasTemplate","processTemplate","usedTypes","componentDevtoolReal","idCounter","genId","genClass","svgFilterUsages","addSvgFilter","filterId","removeSvgFilter","idPrefix","nodeGettersById","nodeById","fullId","registerId","full","getComponentId","tooltipCtx","rootComponentContext","log","setters","divId","selectedStateId","callSubmit","origAction","targetContext","hasBody","hasContentType","callScrollTo","scopeContext","isScopeFound","findComponentContextWithInfo","callScrollBy","switchElementAction","itemVal","stepVal","failed","change","parentOfMap","newItemsLen","json2","callDownloadAction","callShowTooltip","multiple","targetContexts","findTooltip","tooltipsList","tooltip","callHideTooltip","callSetStoredValue","lifetime","execAction","execActionInternal","infoName","findAnimator","animatorId","tooltipId","scopeId","typedType","actionUrl","urlType","isNewLogic","componentContextMap","animatorDef","start_delay","repeat_count","start_value_typed","end_value_typed","evalledDef","runningAnimators","prevAnimator","execCustomAction","timerAction","getJson","win","getExtensionContext","processVariableTriggers","variableTriggers","trigger","prevConditionResult","conditionResult","isRunning","setRunning","instancesMap","registerInstance","duplicateErrorLevel","unregisterInstance","registerParentOf","unregisterParentOf","awaitGlobalVariable","variableType","exist","updateTheme","palette","varInstance","getBuiltinProtocols","getExtension","Builder","property","prepareCustomFunctions","list2","produceComponentContext","fullpath","childContext","childProcessedContext","childProcessedJson","localVars","constructVariable","localCustomFunctions","fakeReason","foundType","targetCtx","listeners","listeners2","listener","targetPagerId","registerTimeout","findComponentById","onTooltipClose","_json","_componentContext","_transitions","_direction","hasVariableWithType","setVariableValue","constructProperty","valueType","derivedExpression","setValue","additionalVarsClosure","valueSource","declVariable","startVariables","newVarName","awaitingStore","facade","initVariableTriggers","timers","controller","rootStateComponentContext","close_handler","initialError","rootStateDiv","SizeProvider","_context","MIN_SWIPE_DIST","Gesture","diffX","diffY","filterHTMLElements","lottieExtensionBuilder","loadAnimation","ratio","hAlign","vAlign","hVal","vVal","wrapper","repeatMode","animItem","markdownExtensionBuilder","process","textWrapper","firstRange","html","render","hydrate","Root","patch","evalExpressionWithFullResult","evalExpressionInner","functionNames","parseExpression"],"mappings":"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EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAC5B,GAEazxC,KAAOwxC,GAAkBC,EAAK,GChCrCA,KAAQ;AAAA,EACV;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACxC;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AACpC,GAEaI,KAASL,GAAkBC,EAAK,GC7BhCK,K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","x_google_ignoreList":[22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,125,179]}