@useinsider/ab-components 0.0.123-beta.21 → 0.0.123-beta.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index-6Dc2I656.js","sources":["../src/components/Button/Button.vue","../src/components/Icon/customIcons.ts","../src/components/Icon/iconColorUtils.ts","../src/components/Icon/Icon.vue","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/components/Tooltip/wasTooltipShown.ts","../src/utils/preventXSS.ts","../src/components/Tooltip/Tooltip.vue","../src/components/Calendar/Calendar.vue","../src/components/Chip/Chip.vue","../src/components/Checkbox/Checkbox.vue","../src/components/ColorPreview/ColorPreview.vue","../src/components/InBasicTextInput/InBasicTextInput.vue","../src/components/ColorPicker/ColorSwatch.vue","../src/components/ColorPicker/ColorPicker.vue","../src/directives/clickOutside.ts","../src/utils/search.ts","../src/components/Dropdown/DropdownMenu.vue","../src/components/InBox/InBox.vue","../src/components/InInfoBox/InInfoBox.vue","../src/components/CascadingMenu/CascadingMenu.vue","../src/utils/uid.ts","../src/components/SearchInput/SearchInput.vue","../src/components/Typography/Typography.vue","../src/components/SelectField/SelectField.vue","../src/components/Popover/Popover.vue","../src/components/InDropdownMenu/InDropdownMenu.vue","../src/components/InTabs/InTabs.vue","../src/components/InTextArea/InTextArea.vue","../src/components/InRadioButton/InRadioButton.vue","../src/components/InToggle/InToggle.vue","../src/components/InputButton/InputButton.vue","../src/utils/debounce.ts","../node_modules/dedent/dist/dedent.mjs","../src/components/MonacoEditor/iframeContent.html?raw","../src/components/MonacoEditor/generateIframeContent.ts","../src/components/MonacoEditor/liquid/registerLiquid.ts","../src/components/MonacoEditor/scrollChaining.ts","../src/components/MonacoEditor/tooltipPosition.ts","../src/components/MonacoEditor/validators/useValidators.ts","../src/components/MonacoEditor/MonacoEditor.vue","../node_modules/liquidjs/dist/liquid.browser.mjs","../src/components/MonacoEditor/liquid/analyzeVariables.ts","../src/components/Modal/Modal.vue","../src/components/NumberInput/NumberInput.vue","../src/components/OnPageMessage/OnPageMessage.vue","../src/components/SegmentButton/SegmentButton.vue","../src/components/TextInput/TextInput.vue","../src/components/Toggle/Toggle.vue","../src/components/Toast/Toast.vue","../src/components/InAgentLauncher/InAgentLauncher.vue","../src/utils/prefersReducedMotion.ts","../src/components/InAgentBackground/InAgentBackground.vue","../src/components/InAgentPopup/InAgentPopup.vue","../src/components/InAgentWelcome/InAgentWelcome.vue","../src/components/InBlueprintCard/InBlueprintCard.vue","../src/components/InAgentFiles/InAgentFiles.vue","../src/components/InAgentInput/useGeneratingRing.ts","../src/components/InAgentInput/InAgentInput.vue","../src/components/InChatEditForm/InChatEditForm.vue","../src/composables/useMessageTooltipPosition.ts","../src/components/InChatBubble/InChatBubble.vue","../src/composables/useMarkdown.ts","../src/components/InAgentMessage/InAgentMessage.vue","../src/components/InChatLoading/InChatLoading.vue","../src/components/InChatMessageActions/InChatMessageActions.vue","../src/components/InAgentConversation/InAgentConversation.vue","../src/components/InAgentMessageList/InAgentMessageList.vue","../src/components/InWizardFooter/InWizardFooter.vue","../src/components/InWizardHeader/InWizardHeader.vue","../src/components/InAskUserWizard/InAskUserWizard.vue","../src/components/InSingleSelect/InSingleSelect.vue","../src/components/InMultiSelect/InMultiSelect.vue","../src/components/InCardSelect/InCardSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './Button.module.scss';\n\ninterface ButtonProps {\n variant: 'solid' | 'ghost' | 'text' | 'outline';\n color:\n | 'primary'\n | 'subtle-primary'\n | 'secondary'\n | 'neutral'\n | 'danger'\n | 'warning'\n | 'smart'\n | 'toolbar-primary'\n | 'toolbar-smart'\n | 'inverse';\n size?: 'default' | 'small';\n leftIconName?: AllIconNames;\n rightIconName?: AllIconNames;\n iconSize?: 16 | 24;\n iconColor?: string;\n // Per-icon override. When omitted, the right icon uses `iconColor`. Lets\n // consumers paint the left icon dynamically (e.g. a picker swatch) while\n // keeping the right chevron on a fixed canonical color.\n rightIconColor?: string;\n loadingStatus?: boolean;\n successStatus?: boolean;\n label?: string;\n disabled?: boolean;\n fill?: boolean;\n selected?: boolean;\n customClass?: string;\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n loadingStatus: false,\n successStatus: false,\n disabled: false,\n fill: false,\n iconSize: 16,\n size: 'default',\n selected: false,\n});\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst onClick = (event: MouseEvent) => {\n if (props.disabled) {\n return;\n }\n\n emit('click', event);\n};\n\nconst leftIcon = computed<AllIconNames | undefined>(() => {\n if (props.loadingStatus) {\n return 'loading-circle';\n } else if (props.successStatus) {\n return 'line-check-natural';\n }\n\n return props.leftIconName;\n});\n\nconst buttonClasses = computed(() => {\n const classes = [\n styles.button,\n styles[`button__${props.variant}`],\n styles[`button__${props.variant}-${props.color}`],\n styles[`button__size_${props.size}`],\n ];\n\n if (props.fill) {\n classes.push(styles.fill);\n }\n\n if (props.selected) {\n classes.push(styles['button--selected']);\n }\n\n if (props.customClass) {\n classes.push(props.customClass);\n }\n\n return classes;\n});\n</script>\n\n<template>\n <button\n :class=\"buttonClasses\"\n :disabled=\"props.disabled\"\n @click=\"onClick\">\n <Icon\n v-if=\"leftIcon\"\n :color=\"iconColor\"\n :name=\"leftIcon\"\n :size=\"iconSize\" />\n <span\n v-if=\"label\"\n :class=\"styles.button__label\">\n {{ label }}\n </span>\n <Icon\n v-if=\"rightIconName\"\n :color=\"rightIconColor ?? iconColor\"\n :name=\"rightIconName\"\n :size=\"iconSize\" />\n </button>\n</template>\n","export interface CustomIcon {\n viewBox: string;\n content: string;\n}\n\nexport const customIconObjects = {\n 'mixed-text-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\" fill=\"url(#pattern0_5043_65214)\"/>\n <path class=\"preserve-fill\" d=\"M11.9997 2C12.3784 2 12.7248 2.21401 12.8942 2.55273L18.8942 14.5527C19.1412 15.0467 18.9409 15.6475 18.447 15.8945C17.953 16.1414 17.3521 15.9412 17.1052 15.4473L15.3815 12H8.61785L6.89422 15.4473C6.6472 15.9412 6.04637 16.1415 5.55242 15.8945C5.05863 15.6475 4.85828 15.0466 5.10516 14.5527L11.1052 2.55273L11.1764 2.43164C11.3613 2.16374 11.6683 2.00009 11.9997 2ZM9.61785 10H14.3815L11.9997 5.23633L9.61785 10Z\" fill=\"#495366\"/>\n <defs>\n <pattern id=\"pattern0_5043_65214\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5043_65214\" transform=\"matrix(0.05 0 0 0.25 0 -0.25)\"/>\n </pattern>\n <image id=\"image0_5043_65214\" width=\"20\" height=\"6\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADOSURBVHgBrZFLagJBFEXP608K8zGdBGeBBJJpCIS4kEBmWVPWEAi4CRciTh04EBE/TdMqbZVX2qkg4oUzeXXrVnGfBSPQAt5FW3yIN/EMw9TozGL+eg364yd4/Nb8B/wr/A/gt8vFKOcr/aTdemGdGxGxLj+IpmiIlFoVhJDg/CVZfIclGUQyBJ35vTdz3Jjj+jbC3Qdc0yvwkIyTFHFmHRl4/HeTXVdMxFwUYk3dk54yq1hawXTjCdWVuis19HV+KdNkRRFKFrl86n63lC1PDzizA2gvbQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'mixed-fill-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" fill=\"url(#pattern0_5681_20639)\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5681_20639\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5681_20639\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5681_20639\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATmSURBVHgBTZYJct02EEQHC8mvb9mVVDlJVXKC3CD3v0oqXrQvfyMJYPIalFyWi4a4oKenpzGj8M/f7q25BQ+WrdkQol3Hap/5/Xd3+602++yr/dJm+2Rn25dX2/uNjfWb7dp/NpZ/Wb9YbneW/ADOah6KmYHJ/7kUN/0E7laPPHZbWrCZ11pXr7bwrPGv1pUvL9Z8AehkoR0sA5rbyaLuIcALsAQdzGOD9E8/4JvirS1a4cPCvbJrBFGAwGVeLLYLOGdLBjABFdRC7YzZ2oO8s84o0+Xx/rz1j1CpZ6R8AjfR3/e8BYFZdO/f61kTeAymEFGbkVjfAEB27ExcPTBX4sMQiyWYJ2kI+/z2e0/7PVWeeGexkRCGWDh7Q/KNYUaiMsAqRtXERjamVG3ifuSDtC7AqPhkUSMG4C5kgHUNAAxIOPBsgD2xskA37VNWMPa2D9FqaBs34oz8NsAq1Qo4gF1zveI7mSBSNgJ5HKnNaJ5ZCZgVfAClExbbnr7l9Vc2DUhCmlsx0VG2pdrhKEKRIICWZlpQH9YZM2DquCPQFWaYLGdw0DEImCA2aS1I9EcxH0kpbrUo5FqwcT2xosIC6Joo5MyGmrv+iAhrmA+DlZQsJ4IOCYnIc3CrO7JntYkaLH8WG6ZoMyCx8YCDtQB2PuLqK7Pjzm1/aLa7kOUKEQLIKSXpQmOAFZco1B3dd60H8Wnp2eT1L+sSKb2I7oHDlU/U4dRsvHZW2BxI61SsFU4pNbF4oU4na5mDlY4YgzUv3X2SJXLBlABREnm30w8Trki1Z98FtsiUzoCfITDP1uqMKw+46dE+pAcC3VmMDwC/sPnAbg4fQWLQ2djOS14/A8CNnNRa7xcWrij1guRLtXqh8Ng1rDMKvNjO7+yj3VKKrxC6IcA9wK+9baSydDOQaneeKGf/VLqHk3oNmc28CBRHPaMiSShba5gA+OQPOO0GN31lx3e23/LuAUvT5AD3ebG4oAJxfN3WbOhcW1XTAVQ2JLMdoNgpIMlIY1vswKtH7HjDy6/9ivE7+t4T4Bnm9KIZMtQtnCnwMfbOoH6aw6TCcQHoY0VjpKqOUgsv1VOPfPwC4K2N8Rt+p00TaLQ7SvfCNZsvMBfwsF2mdoNp/EyR83SGPEBDe+uSsGgrhWRTPHfdh/RI+yBA+mL7qAC3trNnmyi41TP10iGEb1KbkI3V7GK3bp7GV+qCWE1958I128CaccQOO472xPrIdW/7/N124YaLgGSV5BoVFhd6TL2jtt5toT9w+LB73ud7ILGghkY4I8vJBieIEyQekeWVxvdkU3jagsQnguIYKhPb1qbVnhLdwBkGft17tDWM0jikeT/c44wTLwWI8ZsAFyQ64RxOeXoBHJmQJBMsI5sKn/Ge2kvIMoROM+eGU9xS6P53MsgTAXYcmEK6hQCaTmIteUYYjqmwIkM4bNML8Gg6sTID7MPaD6fT4iPtvVG/qLlAf3I1RyZsvqJoM4UMUeYlbQZ2RrIoz+qEBI1D3snUKl6Q67ZJJrdo6Gi6uSbclPswW6vaxUThqcE17Gd/tlPUQF9/jEHNXo/qTaUfezXyPpl9m7VNPuzzjecCEh0oN023lLcDRXfNHwG+wLL6q21jZxuBYkmjYPj3vyf6Wni+eawpH5zE1AsbqaJCt20yqqWHRK9vH+x//WrzK98GywMAAAAASUVORK5CYII=\"/>\n </defs>`\n },\n 'mixed-border-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" fill=\"url(#pattern0_5699_20986)\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_20986\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_20986\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_20986\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATmSURBVHgBTZYJct02EEQHC8mvb9mVVDlJVXKC3CD3v0oqXrQvfyMJYPIalFyWi4a4oKenpzGj8M/f7q25BQ+WrdkQol3Hap/5/Xd3+602++yr/dJm+2Rn25dX2/uNjfWb7dp/NpZ/Wb9YbneW/ADOah6KmYHJ/7kUN/0E7laPPHZbWrCZ11pXr7bwrPGv1pUvL9Z8AehkoR0sA5rbyaLuIcALsAQdzGOD9E8/4JvirS1a4cPCvbJrBFGAwGVeLLYLOGdLBjABFdRC7YzZ2oO8s84o0+Xx/rz1j1CpZ6R8AjfR3/e8BYFZdO/f61kTeAymEFGbkVjfAEB27ExcPTBX4sMQiyWYJ2kI+/z2e0/7PVWeeGexkRCGWDh7Q/KNYUaiMsAqRtXERjamVG3ifuSDtC7AqPhkUSMG4C5kgHUNAAxIOPBsgD2xskA37VNWMPa2D9FqaBs34oz8NsAq1Qo4gF1zveI7mSBSNgJ5HKnNaJ5ZCZgVfAClExbbnr7l9Vc2DUhCmlsx0VG2pdrhKEKRIICWZlpQH9YZM2DquCPQFWaYLGdw0DEImCA2aS1I9EcxH0kpbrUo5FqwcT2xosIC6Joo5MyGmrv+iAhrmA+DlZQsJ4IOCYnIc3CrO7JntYkaLH8WG6ZoMyCx8YCDtQB2PuLqK7Pjzm1/aLa7kOUKEQLIKSXpQmOAFZco1B3dd60H8Wnp2eT1L+sSKb2I7oHDlU/U4dRsvHZW2BxI61SsFU4pNbF4oU4na5mDlY4YgzUv3X2SJXLBlABREnm30w8Trki1Z98FtsiUzoCfITDP1uqMKw+46dE+pAcC3VmMDwC/sPnAbg4fQWLQ2djOS14/A8CNnNRa7xcWrij1guRLtXqh8Ng1rDMKvNjO7+yj3VKKrxC6IcA9wK+9baSydDOQaneeKGf/VLqHk3oNmc28CBRHPaMiSShba5gA+OQPOO0GN31lx3e23/LuAUvT5AD3ebG4oAJxfN3WbOhcW1XTAVQ2JLMdoNgpIMlIY1vswKtH7HjDy6/9ivE7+t4T4Bnm9KIZMtQtnCnwMfbOoH6aw6TCcQHoY0VjpKqOUgsv1VOPfPwC4K2N8Rt+p00TaLQ7SvfCNZsvMBfwsF2mdoNp/EyR83SGPEBDe+uSsGgrhWRTPHfdh/RI+yBA+mL7qAC3trNnmyi41TP10iGEb1KbkI3V7GK3bp7GV+qCWE1958I128CaccQOO472xPrIdW/7/N124YaLgGSV5BoVFhd6TL2jtt5toT9w+LB73ud7ILGghkY4I8vJBieIEyQekeWVxvdkU3jagsQnguIYKhPb1qbVnhLdwBkGft17tDWM0jikeT/c44wTLwWI8ZsAFyQ64RxOeXoBHJmQJBMsI5sKn/Ge2kvIMoROM+eGU9xS6P53MsgTAXYcmEK6hQCaTmIteUYYjqmwIkM4bNML8Gg6sTID7MPaD6fT4iPtvVG/qLlAf3I1RyZsvqJoM4UMUeYlbQZ2RrIoz+qEBI1D3snUKl6Q67ZJJrdo6Gi6uSbclPswW6vaxUThqcE17Gd/tlPUQF9/jEHNXo/qTaUfezXyPpl9m7VNPuzzjecCEh0oN023lLcDRXfNHwG+wLL6q21jZxuBYkmjYPj3vyf6Wni+eawpH5zE1AsbqaJCt20yqqWHRK9vH+x//WrzK98GywMAAAAASUVORK5CYII=\"/>\n </defs>`\n },\n 'transparent-text-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\" fill=\"url(#pattern0_5699_16553)\"/>\n <path class=\"transparent-fill\" d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\"/>\n <path class=\"preserve-fill\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.9999 2C12.3787 2 12.725 2.21401 12.8945 2.55273L18.8945 14.5527C19.1414 15.0467 18.9412 15.6475 18.4472 15.8945C17.9532 16.1414 17.3523 15.9412 17.1054 15.4473L15.3818 12H8.61809L6.89446 15.4473C6.64743 15.9412 6.0466 16.1415 5.55266 15.8945C5.05887 15.6475 4.85852 15.0466 5.10539 14.5527L11.1054 2.55273L11.1767 2.43164C11.3616 2.16374 11.6686 2.00009 11.9999 2ZM9.61809 10H14.3818L11.9999 5.23633L9.61809 10Z\" fill=\"#495366\"/>\n <defs>\n <pattern id=\"pattern0_5699_16553\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_16553\" transform=\"scale(0.05 0.25)\"/>\n </pattern>\n <image id=\"image0_5699_16553\" width=\"20\" height=\"4\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAuSURBVHgBrY45EQAwDMPcXrCYPx6TyTMEQaxFp00vGzSSRiCJS3+YCdfZtv2wAIDSIZT/uGh0AAAAAElFTkSuQmCC\"/>\n </defs>`\n },\n 'transparent-fill-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" fill=\"url(#pattern0_5699_13077)\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_13077\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_13077\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_13077\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAElSURBVHgB7ZWxioRAEER7jlHQwEAFDUz8/38yUVADDQwUVLjbGq6b9mDXY0HYwIJhe33i2GXZmu+H6Fdd19E0Ta72PI/KsmRETdPQPM+uDsOQiqIQVlUV7fvu6iiKKM9zYV90sS7fwLRtKxbBFiwWWwLBFta2bW79h1n2HIJ38JBPxDNh4ThfCBsPwyAsTVOy1roa19PscoustgTi9vCrGVKiW9dsXVdSYTwwc8f0TKaua7EoCAK3WOM4So3WOSmwQ6fvFbM66zqKeKCaxXF8iKlm8FzHVLPrY6rfQr47CK1qhv/PGGKKBaFzze6Ynso82hOLkiSRmMLLvu/lxCzLZAQsy3IYaK+Y1fMF0nPkGfs7kn3fl5hiA80+54Pz7sfojumpfgBl1ghs9EsbCQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'transparent-border-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" fill=\"url(#pattern0_5699_9951)\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_9951\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_9951\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_9951\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAElSURBVHgB7ZWxioRAEER7jlHQwEAFDUz8/38yUVADDQwUVLjbGq6b9mDXY0HYwIJhe33i2GXZmu+H6Fdd19E0Ta72PI/KsmRETdPQPM+uDsOQiqIQVlUV7fvu6iiKKM9zYV90sS7fwLRtKxbBFiwWWwLBFta2bW79h1n2HIJ38JBPxDNh4ThfCBsPwyAsTVOy1roa19PscoustgTi9vCrGVKiW9dsXVdSYTwwc8f0TKaua7EoCAK3WOM4So3WOSmwQ6fvFbM66zqKeKCaxXF8iKlm8FzHVLPrY6rfQr47CK1qhv/PGGKKBaFzze6Ynso82hOLkiSRmMLLvu/lxCzLZAQsy3IYaK+Y1fMF0nPkGfs7kn3fl5hiA80+54Pz7sfojumpfgBl1ghs9EsbCQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'agent-academy': {\n viewBox: '0 0 24 24',\n content: `\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19 5.5C18.5044 5.30993 17.817 5.13516 17 5.05349V10.7911C17 10.9874 16.7468 11.0662 16.6354 10.9047L16.1646 10.2224C16.0851 10.1071 15.9149 10.1071 15.8354 10.2224L15.3646 10.9047C15.2532 11.0662 15 10.9874 15 10.7911V5.05647C14.3633 5.12082 13.6909 5.24941 13 5.46389V18.382C15.0945 17.7373 17.1532 17.938 18.6313 18.3789C18.7044 18.4007 18.8209 18.3913 18.9212 18.33C18.9658 18.3028 18.9876 18.2766 18.9957 18.2639C19.0008 18.2558 19 18.2542 19 18.2542L19 5.5ZM12.7529 20.6582C14.6013 19.7973 16.4998 19.9506 17.9144 20.3726C18.6289 20.5857 19.376 20.4463 19.9423 20.1007C20.5155 19.7509 21 19.123 21 18.3076V5.50125C21 4.79537 20.6068 4.04178 19.8083 3.71869C18.2206 3.07632 15.2836 2.52075 12.0001 3.64824C8.71652 2.52067 5.77936 3.0764 4.19169 3.71882C3.39319 4.04192 3 4.7955 3 5.50138V18.3076C3 19.123 3.48452 19.7509 4.0577 20.1007C4.62404 20.4463 5.37109 20.5857 6.08562 20.3726C7.50025 19.9506 9.3987 19.7973 11.2471 20.6582C11.4046 20.8381 11.6254 20.9611 11.8749 20.9922C11.8792 20.9948 11.8834 20.9974 11.8877 21L11.8915 20.9942C11.9271 20.998 11.9633 21 12 21C12.0367 21 12.0729 20.998 12.1085 20.9942L12.1123 21C12.1166 20.9974 12.1208 20.9948 12.1251 20.9922C12.3746 20.9611 12.5954 20.8381 12.7529 20.6582ZM11 18.382V5.46382C8.46891 4.67807 6.18578 5.04522 5 5.5L4.99997 18.2541C4.99997 18.2541 4.99919 18.2557 5.00431 18.2638C5.01237 18.2765 5.03417 18.3027 5.07875 18.3299C5.17909 18.3911 5.29561 18.4006 5.36867 18.3788C6.84682 17.9379 8.90552 17.7372 11 18.382Z\" fill=\"currentColor\"/>`\n },\n 'agent-brand': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M13.5 2.5C14.0523 2.5 14.5 2.94772 14.5 3.5C14.5 4.05228 14.0523 4.5 13.5 4.5H11.5V12.5H19.5V10.4062C19.5 9.85397 19.9477 9.40625 20.5 9.40625C21.0523 9.40625 21.5 9.85397 21.5 10.4062V18.5C21.5 20.1569 20.1569 21.5 18.5 21.5H5.5C3.84315 21.5 2.5 20.1569 2.5 18.5V5.5C2.5 3.84315 3.84315 2.5 5.5 2.5H13.5ZM5.5 4.5C4.94772 4.5 4.5 4.94772 4.5 5.5V18.5C4.5 19.0523 4.94772 19.5 5.5 19.5H9.5V4.5H5.5ZM11.5 19.5H18.5C19.0523 19.5 19.5 19.0523 19.5 18.5V14.5H11.5V19.5ZM18.0947 2.81055C18.2061 2.39674 18.7939 2.39674 18.9053 2.81055L19.3271 4.37695C19.366 4.52129 19.4787 4.63399 19.623 4.67285L21.1895 5.09473C21.6033 5.20614 21.6033 5.79386 21.1895 5.90527L19.623 6.32715C19.4787 6.36601 19.366 6.47872 19.3271 6.62305L18.9053 8.18945C18.7939 8.60326 18.2061 8.60326 18.0947 8.18945L17.6729 6.62305C17.634 6.47871 17.5213 6.36601 17.377 6.32715L15.8105 5.90527C15.3967 5.79386 15.3967 5.20614 15.8105 5.09473L17.377 4.67285C17.5213 4.63399 17.634 4.52128 17.6729 4.37695L18.0947 2.81055Z\" fill=\"#5F24AF\"/>`\n },\n 'agent-analyzing': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M7.76327 12.2312C7.96953 12.2312 8.15439 12.3582 8.22909 12.5505L11.0123 19.7126C11.2658 20.3654 10.7839 21.0691 10.0836 21.0691C9.6684 21.0689 9.29662 20.8114 9.15097 20.4226L8.76425 19.3903H5.27499L4.88827 20.4226C4.74261 20.8114 4.37087 21.069 3.95566 21.0691C3.25531 21.0691 2.77348 20.3654 3.02695 19.7126L5.81015 12.5505C5.88484 12.3583 6.06974 12.2312 6.27597 12.2312H7.76327ZM13.6861 12.2312C14.2474 12.2312 14.7027 12.6865 14.7027 13.2478V20.0525C14.7027 20.6137 14.2474 21.069 13.6861 21.0691C13.1248 21.0691 12.6695 20.6138 12.6695 20.0525V13.2478C12.6695 12.6865 13.1248 12.2312 13.6861 12.2312ZM5.94589 17.5974H8.09335L7.01913 14.7263L5.94589 17.5974ZM17.6266 13.2497C17.7407 12.8257 18.3425 12.8257 18.4566 13.2497L18.6607 14.0085C18.7006 14.1564 18.8165 14.2724 18.9644 14.3122L19.7242 14.5163C20.1477 14.6307 20.1477 15.232 19.7242 15.3464L18.9644 15.5505C18.8165 15.5903 18.7006 15.7063 18.6607 15.8542L18.4566 16.613C18.3425 17.037 17.7407 17.037 17.6266 16.613L17.4225 15.8542C17.3826 15.7063 17.2666 15.5903 17.1187 15.5505L16.36 15.3464C15.9359 15.2322 15.9359 14.6305 16.36 14.5163L17.1187 14.3122C17.2666 14.2724 17.3826 14.1564 17.4225 14.0085L17.6266 13.2497ZM16.5016 3.34542C16.6501 2.79371 17.4331 2.79371 17.5816 3.34542L18.1441 5.43429C18.1959 5.62667 18.3463 5.77697 18.5387 5.82882L20.6275 6.39132C21.1792 6.53986 21.1792 7.32285 20.6275 7.4714L18.5387 8.0339C18.3463 8.08573 18.1959 8.23603 18.1441 8.42843L17.5816 10.5173C17.4331 11.069 16.6501 11.069 16.5016 10.5173L15.9391 8.42843C15.8872 8.23602 15.7369 8.0857 15.5445 8.0339L13.4557 7.4714C12.904 7.32285 12.904 6.53986 13.4557 6.39132L15.5445 5.82882C15.737 5.77701 15.8872 5.62672 15.9391 5.43429L16.5016 3.34542ZM8.62655 4.24972C8.74073 3.82567 9.34246 3.82567 9.45663 4.24972L9.66073 5.00851C9.70056 5.15641 9.81654 5.27239 9.96445 5.31222L10.7242 5.51632C11.1477 5.63073 11.1477 6.23196 10.7242 6.3464L9.96445 6.5505C9.81654 6.59032 9.70056 6.70631 9.66073 6.85421L9.45663 7.613C9.34246 8.03704 8.74073 8.03704 8.62655 7.613L8.42245 6.85421C8.38263 6.70631 8.26664 6.59032 8.11874 6.5505L7.35995 6.3464C6.93591 6.23222 6.93591 5.63049 7.35995 5.51632L8.11874 5.31222C8.26664 5.27239 8.38263 5.15641 8.42245 5.00851L8.62655 4.24972Z\" fill=\"url(#paint0_linear_4912_11532)\"/>\n <defs>\n <linearGradient id=\"paint0_linear_4912_11532\" x1=\"11.9999\" y1=\"2.93164\" x2=\"11.9999\" y2=\"21.0691\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FA3A3A\"/>\n <stop offset=\"1\" stop-color=\"#7630D4\"/>\n </linearGradient>\n </defs>`\n },\n 'agent-close': {\n viewBox: '0 0 24 24',\n content: `\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.2961 5.29222C17.6861 4.90275 18.3185 4.90244 18.7082 5.29222C19.098 5.68201 19.0977 6.31435 18.7082 6.70433L13.4123 12.0002L18.7082 17.2961C19.0977 17.6861 19.098 18.3185 18.7082 18.7082C18.3185 19.098 17.6861 19.0977 17.2961 18.7082L12.0002 13.4123L6.70433 18.7082C6.31435 19.0977 5.68201 19.098 5.29222 18.7082C4.90244 18.3185 4.90275 17.6861 5.29222 17.2961L10.5881 12.0002L5.29222 6.70433C4.90275 6.31435 4.90244 5.68201 5.29222 5.29222C5.68201 4.90244 6.31435 4.90275 6.70433 5.29222L12.0002 10.5881L17.2961 5.29222Z\" fill=\"currentColor\"/>`\n },\n 'agent-info': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3ZM12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5ZM12 11C12.5523 11 13 11.4477 13 12V16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16V12C11 11.4477 11.4477 11 12 11ZM12 7C12.5523 7 13 7.44772 13 8C13 8.55228 12.5523 9 12 9C11.4477 9 11 8.55228 11 8C11 7.44772 11.4477 7 12 7Z\" fill=\"currentColor\"/>`\n },\n 'agent-launcher-badge': {\n viewBox: '12 8 48 48',\n content: `\n <rect x=\"12\" y=\"8\" width=\"48\" height=\"48\" fill=\"#D3B6FD\"/> <g id=\"Vector 5\" opacity=\"0.8\" filter=\"url(#filter1_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M85.3861 48.5961C96.7211 67.7724 118.282 60.7462 127.645 54.836L152.479 23.1593L24.297 -90.0577C12.8025 -75.318 -10.1532 -44.63 -10.0206 -39.7955C-9.85477 -33.7524 -8.45126 -24.2254 1.79004 -1.25409C9.98308 17.1229 35.5667 23.1947 47.3344 23.9334C55.2954 24.1642 74.051 29.4198 85.3861 48.5961Z\" fill=\"#CB2867\"/> </g> <g id=\"Vector 6\" opacity=\"0.8\" filter=\"url(#filter2_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M21.8449 13.124C21.2183 -9.14301 -1.0473 -13.4408 -12.1018 -12.8063L-49.172 2.87526L8.11935 164.016C25.3154 156.689 60.264 140.963 62.4899 136.669C65.2723 131.302 68.6597 122.288 70.8283 97.2309C72.5631 77.1852 53.1231 59.4799 43.1863 53.133C36.3336 49.0746 22.4715 35.3911 21.8449 13.124Z\" fill=\"#4B1291\"/> </g> <g id=\"Vector 7\" opacity=\"0.8\" filter=\"url(#filter3_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M-35.1505 103.559C-56.7539 108.991 -56.1297 131.659 -53.1171 142.314L-29.7824 175.11L115.135 84.2935C104.259 69.0912 81.34 38.3758 76.6663 37.1322C70.8243 35.5776 61.2903 34.2221 36.3579 37.5293C16.412 40.1751 3.33497 62.987 -0.710289 74.0622C-3.18896 81.631 -13.5471 98.1266 -35.1505 103.559Z\" fill=\"#38036D\"/> <defs> <filter id=\"filter1_f_agent_launcher\" x=\"-40.021\" y=\"-120.058\" width=\"222.5\" height=\"211.183\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> <filter id=\"filter2_f_agent_launcher\" x=\"-79.1719\" y=\"-42.8645\" width=\"180.109\" height=\"236.88\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> <filter id=\"filter3_f_agent_launcher\" x=\"-84.6519\" y=\"5.49047\" width=\"229.787\" height=\"199.62\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> </defs>`\n },\n 'agent-launcher-glyph': {\n viewBox: '0 0 28 28',\n content: `\n <path d=\"M20.5161 15.538C20.6493 15.0433 21.3506 15.0433 21.4838 15.538L21.7221 16.4238C21.7686 16.5963 21.9041 16.7308 22.0766 16.7773L22.9623 17.0156C23.4569 17.1489 23.4568 17.851 22.9623 17.9843L22.0766 18.2226C21.9041 18.269 21.7686 18.4037 21.7221 18.5761L21.4838 19.4619C21.3506 19.9566 20.6493 19.9566 20.5161 19.4619L20.2768 18.5761C20.2302 18.4038 20.0957 18.269 19.9233 18.2226L19.0375 17.9843C18.5428 17.8511 18.5428 17.1488 19.0375 17.0156L19.9233 16.7773C20.0957 16.7309 20.2303 16.5962 20.2768 16.4238L20.5161 15.538ZM19.2036 3.98237C19.3771 3.33926 20.2899 3.33916 20.4633 3.98237L21.1196 6.41987C21.18 6.64436 21.355 6.82035 21.5795 6.88081L24.017 7.53706C24.6607 7.71038 24.6607 8.62352 24.017 8.79682L21.5795 9.45307C21.3552 9.51354 21.1801 9.68868 21.1196 9.91303L20.4633 12.3505C20.29 12.9942 19.3769 12.9942 19.2036 12.3505L18.5473 9.91303C18.4868 9.68856 18.3109 9.51351 18.0864 9.45307L15.6489 8.79682C15.0056 8.62337 15.0057 7.71061 15.6489 7.53706L18.0864 6.88081C18.3109 6.82036 18.4869 6.64437 18.5473 6.41987L19.2036 3.98237ZM10.0161 5.03803C10.1493 4.54332 10.8506 4.54332 10.9838 5.03803L11.2221 5.92378C11.2686 6.09628 11.4041 6.23084 11.5766 6.27729L12.4623 6.51557C12.9569 6.64885 12.9568 7.35102 12.4623 7.48432L11.5766 7.7226C11.4041 7.76904 11.2686 7.90368 11.2221 8.07612L10.9838 8.96186C10.8506 9.45658 10.1493 9.45658 10.0161 8.96186L9.7768 8.07612C9.73023 7.90377 9.59569 7.76903 9.42328 7.7226L8.53754 7.48432C8.04282 7.35112 8.04282 6.64877 8.53754 6.51557L9.42328 6.27729C9.59574 6.23086 9.73027 6.09619 9.7768 5.92378L10.0161 5.03803Z\" fill=\"white\"/>\n <path d=\"M7.92788 14.3501C8.51431 14.3502 9.03935 14.7135 9.24624 15.2622L12.2238 23.1646C12.4661 23.8077 11.9901 24.4946 11.3029 24.4946C10.8798 24.4945 10.5042 24.2241 10.3703 23.8228L9.86343 22.3032H5.99819L5.41323 23.856C5.26818 24.2404 4.90025 24.4944 4.4894 24.4946C3.79582 24.4946 3.31803 23.799 3.56753 23.1519L6.61245 15.2524C6.82207 14.7087 7.34516 14.3501 7.92788 14.3501ZM14.466 14.3501C15.0263 14.3501 15.4806 14.8045 15.4806 15.3647V23.481C15.4804 24.0411 15.0261 24.4946 14.466 24.4946C13.906 24.4944 13.4525 24.0409 13.4523 23.481V15.3647C13.4523 14.8046 13.9058 14.3503 14.466 14.3501ZM6.63393 20.4448H9.22866L7.93569 16.9897L6.63393 20.4448Z\" fill=\"white\"/>`\n },\n} as const satisfies Record<string, CustomIcon>;\n\nexport type CustomIconNames = keyof typeof customIconObjects;\n\n","/**\n * Parses color string to extract color and opacity values\n * Supports:\n * - 8-digit hex format: #RRGGBBAA (e.g., #6b93bb55)\n * - rgba format: rgba(r, g, b, a) (e.g., rgba(107, 147, 187, 0.33))\n * - Standard formats: #RRGGBB, rgb(r, g, b), etc.\n */\nexport interface ParsedColor {\n color: string;\n opacity ? : number;\n}\n\nexport function parseColorWithAlpha(color ? : string): ParsedColor {\n if (!color) return {\n color: \"currentColor\"\n };\n\n // Check for 8-digit hex format (#RRGGBBAA)\n const hex8Match = color.match(/^#([0-9a-fA-F]{8})$/);\n if (hex8Match) {\n const hex = hex8Match[1];\n const a = parseInt(hex.substring(6, 8), 16) / 255;\n\n return {\n color: `#${hex.substring(0, 6)}`,\n opacity: a,\n };\n }\n\n // Check for rgba format\n const rgbaMatch = color.match(/^rgba?\\(([^)]+)\\)$/);\n\n if (rgbaMatch) {\n const values = rgbaMatch[1].split(\",\").map((v) => v.trim());\n\n if (values.length === 4) {\n // rgba format\n const opacity = parseFloat(values[3]);\n return {\n color: `rgb(${values[0]}, ${values[1]}, ${values[2]})`,\n opacity: opacity,\n };\n } else if (values.length === 3) {\n // rgb format (no alpha)\n return {\n color: color,\n };\n }\n }\n\n // No alpha detected, return as is\n return {\n color\n };\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { customIconObjects, type CustomIconNames } from './customIcons';\nimport { parseColorWithAlpha } from './iconColorUtils';\n\nexport type AllIconNames = IconNames | CustomIconNames;\n\nexport interface IconProps {\n name: AllIconNames;\n size?: number | string;\n color?: string;\n fillOpacity?: number | string;\n}\n\nconst props = withDefaults(defineProps<IconProps>(), {\n size: 16,\n});\n\nconst iconSize = computed(() => (typeof props.size === 'number' ? `${props.size}px` : props.size));\nconst isCustomIcon = computed(() => props.name in customIconObjects);\n\nconst customIconData = computed(() => {\n if (!isCustomIcon.value) {\n return null;\n }\n\n return customIconObjects[props.name as CustomIconNames];\n});\n\n// Parse color - extract color from 8-digit hex or rgba for all icons\nconst parsedColor = computed(() => parseColorWithAlpha(props.color));\nconst finalColor = computed(() => parsedColor.value.color || 'currentColor');\n\nconst finalOpacity = computed(() => {\n if (!isCustomIcon.value) {\n return undefined;\n }\n\n if (props.fillOpacity !== undefined) {\n return typeof props.fillOpacity === 'number' ? props.fillOpacity : parseFloat(props.fillOpacity);\n }\n\n return parsedColor.value.opacity;\n});\n</script>\n\n<template>\n <svg\n v-if=\"!isCustomIcon\"\n class=\"icon\"\n :fill=\"finalColor\"\n :height=\"iconSize\"\n :style=\"{ color: finalColor }\"\n :width=\"iconSize\">\n <use :xlink:href=\"`#${name}`\" />\n </svg>\n <svg\n v-else\n class=\"icon icon-custom\"\n :fill=\"color || 'currentColor'\"\n :height=\"iconSize\"\n :style=\"{\n '--icon-color': finalColor,\n ...finalOpacity !== undefined && finalOpacity !== null ? { '--icon-fill-opacity': String(finalOpacity) } : {},\n }\"\n :viewBox=\"customIconData?.viewBox\"\n :width=\"iconSize\"\n v-html=\"customIconData?.content\" />\n</template>\n\n<style scoped>\n.icon {\n display: inline-block;\n line-height: 0;\n vertical-align: middle;\n}\n\n.icon-custom :deep(path:not([fill^=\"url(\"]):not([fill=\"none\"]):not(.transparent-fill):not(.preserve-fill)) {\n fill: var(--icon-color, currentColor);\n}\n\n.icon-custom :deep(path.transparent-fill) {\n fill: var(--icon-color, #6259D7);\n fill-opacity: var(--icon-fill-opacity);\n}\n</style>\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n const open = openOption.value;\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n /**\n * The floating element's position may be recomputed while it's closed\n * but still mounted (such as when transitioning out). To ensure\n * `isPositioned` will be `false` initially on the next open, avoid\n * setting it to `true` when `open === false` (must be specified).\n */\n isPositioned.value = open !== false;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","let isTooltipConfigInitialized = false;\n\nexport const initializeTooltipConfig = () => {\n if (isTooltipConfigInitialized) {\n return;\n }\n\n isTooltipConfigInitialized = true;\n let status: boolean;\n\n Object.defineProperty(window, 'wasTooltipShown', {\n get() {\n clearTimeout(window.wasTooltipTimeout);\n\n window.wasTooltipTimeout = setTimeout(() => {\n status = false;\n }, 2000);\n\n return status;\n },\n set(value: boolean) {\n status = value;\n\n clearTimeout(window.wasTooltipTimeout);\n\n if (value) {\n window.wasTooltipTimeout = setTimeout(() => {\n status = false;\n }, 2000);\n }\n\n },\n configurable: true,\n });\n};\n","export function preventXSS (html = '') {\n if (typeof(html) === 'string') {\n return html.replace(/<\\/style>/gi, '')\n .replace(/<(.*?) on(.*?)=['\"](.*?)>/gi, '')\n .replace(/(<meta |<style|<\\/*script)(.*?)>/gi, '')\n .replace(/(<([^>]+)>)/ig, '')\n .replace(/<(.*?) (href|src)=\"j(.*)a(.*)v(.*)a(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*):(.*?)>/gi, '');\n }\n return html;\n}\n","<script setup lang=\"ts\">\nimport {\n useFloating,\n offset,\n arrow,\n flip,\n autoUpdate,\n shift,\n type Placement,\n} from '@floating-ui/vue';\nimport {\n computed,\n ref,\n watch,\n onMounted,\n onBeforeUnmount,\n nextTick,\n onBeforeMount,\n} from 'vue';\nimport { initializeTooltipConfig } from '@/components/Tooltip/wasTooltipShown';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { preventXSS } from '@/utils/preventXSS';\nimport styles from './Tooltip.module.scss';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst VISIBILITY_DELAY = 1000;\n// Matches .arrow width/height in Tooltip.module.scss\nconst ARROW_SIZE = 20;\nconst ARROW_EDGE_PADDING = 8;\nconst OPPOSITE_SIDE_BY_SIDE: Record<string, string> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\nconst showTimeout = ref<ReturnType<typeof setTimeout> | null>(null);\nconst hideTimeout = ref<ReturnType<typeof setTimeout> | null>(null);\nconst isMounted = ref(false);\n\nif (typeof window !== 'undefined' && window.wasTooltipShown === undefined) {\n window.wasTooltipShown = false;\n}\n\ntype ArrowPlacement = 'start' | 'center' | 'end';\n\nconst props = withDefaults(defineProps<{\n id: string;\n text?: string;\n placement?: Placement;\n arrowPlacement?: ArrowPlacement;\n status?: boolean;\n preventXss?: boolean;\n iconName?: IconNames;\n hideDelay?: number;\n showDelay?: number;\n}>(), {\n text: '',\n});\n\nconst tooltipRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLElement | null>(null);\nconst floatingArrowRef = ref<HTMLElement | null>(null);\nconst tooltipVisible = ref(false);\nconst secureText = computed(() => (props.preventXss ? preventXSS(props.text) : props.text));\n\nconst { floatingStyles, update, middlewareData, placement } = useFloating(triggerRef, tooltipRef, {\n placement: computed(() => props.placement || 'bottom'),\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(10),\n flip(),\n shift(),\n arrow({ element: floatingArrowRef, padding: ARROW_EDGE_PADDING }),\n ],\n});\n\nconst showTooltip = () => {\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n const showDelay = props.showDelay ?? VISIBILITY_DELAY;\n\n if (window.wasTooltipShown || showDelay <= 0) {\n tooltipVisible.value = true;\n } else {\n showTimeout.value = setTimeout(() => {\n if (!isMounted.value) {\n showTimeout.value = null;\n\n return;\n }\n\n tooltipVisible.value = true;\n window.wasTooltipShown = true;\n showTimeout.value = null;\n }, showDelay);\n }\n};\n\nconst scheduleHideTooltip = () => {\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n const delay = props.hideDelay ?? 0;\n\n if (delay > 0) {\n hideTimeout.value = setTimeout(() => {\n if (isMounted.value) {\n tooltipVisible.value = false;\n }\n\n hideTimeout.value = null;\n }, delay);\n } else {\n tooltipVisible.value = false;\n }\n};\n\nconst onMouseEnter = () => {\n showTooltip();\n};\n\nconst onMouseLeave = () => {\n scheduleHideTooltip();\n};\n\nconst onResize = () => {\n if (isMounted.value && triggerRef.value && tooltipRef.value) {\n update();\n }\n};\n\nwatch(() => props.placement, () => {\n if (isMounted.value && triggerRef.value && tooltipRef.value) {\n update();\n }\n});\n\nonBeforeMount(initializeTooltipConfig);\n\nonMounted(() => {\n isMounted.value = true;\n\n nextTick(() => {\n if (isMounted.value && triggerRef.value) {\n update();\n }\n });\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', onResize);\n }\n});\n\nonBeforeUnmount(() => {\n isMounted.value = false;\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', onResize);\n }\n\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n tooltipVisible.value = false;\n tooltipRef.value = null;\n triggerRef.value = null;\n floatingArrowRef.value = null;\n});\n\nconst tooltipShouldShow = computed(() => props.status || tooltipVisible.value);\n\nconst tooltipStyles = computed(() => ({\n ...floatingStyles.value,\n display: tooltipShouldShow.value ? 'inline-block' : 'none',\n}));\n\nconst staticPosition = computed(() => {\n const [side] = placement.value.split('-');\n\n return {\n [OPPOSITE_SIDE_BY_SIDE[side]]: '-4px',\n };\n});\n\nconst arrowPlacementOverride = computed(() => {\n if (!props.arrowPlacement) {\n return {};\n }\n\n const [side] = placement.value.split('-');\n const axis = side === 'top' || side === 'bottom' ? 'left' : 'top';\n\n switch (props.arrowPlacement) {\n case 'start':\n return { [axis]: `${ARROW_EDGE_PADDING}px` };\n case 'center':\n return { [axis]: `calc(50% - ${ARROW_SIZE / 2}px)` };\n case 'end':\n return { [axis]: `calc(100% - ${ARROW_SIZE + ARROW_EDGE_PADDING}px)` };\n\n default:\n return {};\n }\n});\n\nconst styleArrow = computed(() => {\n if (!floatingArrowRef.value) {\n return {};\n }\n\n return {\n left:\n middlewareData.value.arrow?.x != null\n ? `${middlewareData.value.arrow.x}px`\n : '',\n top:\n middlewareData.value.arrow?.y != null\n ? `${middlewareData.value.arrow.y}px`\n : '',\n right: '',\n bottom: '',\n ...staticPosition.value,\n ...arrowPlacementOverride.value,\n };\n});\n</script>\n\n<template>\n <div\n :id=\"id\"\n ref=\"triggerRef\"\n :class=\"styles.trigger\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <Icon\n v-if=\"iconName\"\n :color=\"styles.trigger__icon\"\n :name=\"iconName\" />\n <slot v-else />\n </div>\n <Teleport to=\"body\">\n <div\n ref=\"tooltipRef\"\n class=\"qa-tooltip\"\n :class=\"styles.bubble\"\n :style=\"tooltipStyles\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <slot\n v-if=\"$slots.contentSlot\"\n name=\"contentSlot\" />\n <div\n v-else\n :class=\"styles.bubble__content\">\n <div v-html=\"secureText\" />\n </div>\n <div\n v-if=\"!$slots.contentSlot\"\n ref=\"floatingArrowRef\"\n :class=\"styles.arrow\"\n :style=\"styleArrow\" />\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport Button from '@/components/Button/Button.vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport Tooltip from '@/components/Tooltip/Tooltip.vue';\n\nexport type CalendarDateFormat = 'YYYY-MM-DD' | 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'DD.MM.YYYY';\n\nexport interface CalendarProps {\n /** Selected date, in `format` (default ISO `YYYY-MM-DD`). */\n modelValue?: string;\n /** Earliest selectable date, in `format`. Days before this are disabled. */\n min?: string;\n /** Latest selectable date, in `format`. Days after this are disabled. */\n max?: string;\n /** Date format for the value (modelValue/min/max/emit) and the input. Default ISO. */\n format?: CalendarDateFormat;\n /** Tooltip shown when hovering a disabled (out-of-range) day. */\n disabledDateTooltip?: string;\n /** 0 = Sunday, 1 = Monday (default). */\n firstDayOfWeek?: 0 | 1;\n /** BCP-47 locale for month/weekday labels. */\n locale?: string;\n /** Placeholder for the date input when nothing is picked. */\n placeholder?: string;\n /** Footer confirm-button label (consumer passes a translated string). */\n applyLabel?: string;\n /** Footer cancel-button label (consumer passes a translated string). */\n cancelLabel?: string;\n /** Card width in px (default 252). Lets the consumer size the picker. */\n width?: number;\n /** Accessible name for the date input. Falls back to `placeholder`. */\n inputAriaLabel?: string;\n /** Accessible name for the previous-month button (consumer passes a translated string). */\n prevMonthLabel?: string;\n /** Accessible name for the next-month button (consumer passes a translated string). */\n nextMonthLabel?: string;\n}\n\nconst props = withDefaults(defineProps<CalendarProps>(), {\n modelValue: '',\n min: '',\n max: '',\n format: 'YYYY-MM-DD',\n disabledDateTooltip: '',\n firstDayOfWeek: 1,\n locale: 'en',\n placeholder: '',\n applyLabel: 'Apply',\n cancelLabel: 'Cancel',\n width: 252,\n inputAriaLabel: '',\n prevMonthLabel: 'Previous month',\n nextMonthLabel: 'Next month',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n apply: [];\n cancel: [];\n}>();\n\ntype Segment = 'd' | 'm' | 'y';\n\nconst FORMAT_ORDER: Record<CalendarDateFormat, Segment[]> = {\n 'YYYY-MM-DD': ['y', 'm', 'd'],\n 'DD/MM/YYYY': ['d', 'm', 'y'],\n 'MM/DD/YYYY': ['m', 'd', 'y'],\n 'DD.MM.YYYY': ['d', 'm', 'y'],\n};\nconst FORMAT_SEPARATOR: Record<CalendarDateFormat, string> = {\n 'YYYY-MM-DD': '-',\n 'DD/MM/YYYY': '/',\n 'MM/DD/YYYY': '/',\n 'DD.MM.YYYY': '.',\n};\nconst SEGMENT_LENGTH: Record<Segment, number> = { d: 2, m: 2, y: 4 };\n\nfunction pad (value: number, length: number): string {\n return String(value).padStart(length, '0');\n}\n\nfunction buildDate (year: number, month: number, day: number): Date | null {\n if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\n return null;\n }\n\n const date = new Date(year, month - 1, day);\n\n // Reject overflow (e.g. 31/02 → March) by round-tripping.\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction formatIn (date: Date, format: CalendarDateFormat): string {\n const byKey: Record<Segment, string> = {\n d: pad(date.getDate(), 2),\n m: pad(date.getMonth() + 1, 2),\n y: String(date.getFullYear()),\n };\n\n return FORMAT_ORDER[format].map(key => byKey[key]).join(FORMAT_SEPARATOR[format]);\n}\n\nfunction parseIn (text: string | undefined, format: CalendarDateFormat): Date | null {\n const segs = (text ?? '').split(FORMAT_SEPARATOR[format]);\n\n if (segs.length !== 3) {\n return null;\n }\n\n const byKey: Record<Segment, number> = { d: NaN, m: NaN, y: NaN };\n\n FORMAT_ORDER[format].forEach((key, index) => {\n byKey[key] = Number(segs[index]);\n });\n\n return buildDate(byKey.y, byKey.m, byKey.d);\n}\n\nfunction startOfDay (date: Date): number {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\nconst inputText = ref('');\n\nconst minDate = computed(() => parseIn(props.min, props.format));\nconst maxDate = computed(() => parseIn(props.max, props.format));\n\nfunction isInRange (date: Date): boolean {\n const time = startOfDay(date);\n const minTime = minDate.value ? startOfDay(minDate.value) : null;\n const maxTime = maxDate.value ? startOfDay(maxDate.value) : null;\n\n return (minTime === null || time >= minTime) && (maxTime === null || time <= maxTime);\n}\n\nconst draftDate = computed(() => parseIn(inputText.value, props.format));\nconst canApply = computed(() => draftDate.value !== null && isInRange(draftDate.value));\n\nfunction seedInputFromModel (): void {\n const date = parseIn(props.modelValue, props.format);\n\n inputText.value = date ? formatIn(date, props.format) : '';\n}\n\nseedInputFromModel();\n\nfunction initialView (): { year: number; month: number } {\n const base = draftDate.value ?? new Date();\n\n return { year: base.getFullYear(), month: base.getMonth() };\n}\n\nconst view = ref(initialView());\n\nwatch(() => props.modelValue, seedInputFromModel);\n\nwatch(draftDate, next => {\n if (next) {\n view.value = { year: next.getFullYear(), month: next.getMonth() };\n }\n});\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, { month: 'short', year: 'numeric' }).format(\n new Date(view.value.year, view.value.month, 1)\n )\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const labels: string[] = [];\n\n // 2024-01-07 is a Sunday — a stable anchor independent of the current date.\n for (let i = 0; i < 7; i++) {\n const dayIndex = (props.firstDayOfWeek + i) % 7;\n\n labels.push(formatter.format(new Date(2024, 0, 7 + dayIndex)).slice(0, 2));\n }\n\n return labels;\n});\n\ninterface DayCell {\n key: string;\n label: number;\n display: string;\n inCurrentMonth: boolean;\n disabled: boolean;\n selected: boolean;\n}\n\nconst days = computed<DayCell[]>(() => {\n const { year, month } = view.value;\n const firstOfMonth = new Date(year, month, 1);\n const leading = (firstOfMonth.getDay() - props.firstDayOfWeek + 7) % 7;\n const selectedTime = draftDate.value ? startOfDay(draftDate.value) : null;\n\n const cells: DayCell[] = [];\n\n for (let i = 0; i < 42; i++) {\n // Calendar-day stepping (not fixed 24h-ms) keeps the grid correct across DST.\n const date = new Date(year, month, 1 - leading + i);\n\n cells.push({\n key: formatIn(date, 'YYYY-MM-DD'),\n label: date.getDate(),\n display: formatIn(date, props.format),\n inCurrentMonth: date.getMonth() === month,\n disabled: !isInRange(date),\n selected: selectedTime !== null && startOfDay(date) === selectedTime,\n });\n }\n\n return cells;\n});\n\nfunction goToPreviousMonth (): void {\n const month = view.value.month - 1;\n\n view.value = month < 0 ? { year: view.value.year - 1, month: 11 } : { year: view.value.year, month };\n}\n\nfunction goToNextMonth (): void {\n const month = view.value.month + 1;\n\n view.value = month > 11 ? { year: view.value.year + 1, month: 0 } : { year: view.value.year, month };\n}\n\nfunction selectDay (cell: DayCell): void {\n if (cell.disabled) {\n return;\n }\n\n inputText.value = cell.display;\n}\n\n// Mask free text into the active format: digits only, separators auto-inserted, segment lengths\n// from the format. A 2-digit segment \"closed\" by a typed separator pads (e.g. \"1/\" → \"01/\"),\n// but a separator is never force-added, so backspace never gets stuck.\nfunction maskDate (raw: string): string {\n const format = props.format;\n const order = FORMAT_ORDER[format];\n const sep = FORMAT_SEPARATOR[format];\n const lengths = order.map(key => SEGMENT_LENGTH[key]);\n const totalDigits = lengths.reduce((sum, length) => sum + length, 0);\n\n const typedParts = raw.split(sep);\n\n for (let i = 0; i < typedParts.length - 1; i++) {\n if (lengths[i] === 2 && /^\\d$/.test(typedParts[i])) {\n typedParts[i] = `0${typedParts[i]}`;\n }\n }\n\n const digits = typedParts.join('').replace(/\\D/g, '').slice(0, totalDigits);\n const segments: string[] = [];\n let cursor = 0;\n\n for (const length of lengths) {\n segments.push(digits.slice(cursor, cursor + length));\n cursor += length;\n }\n\n const endsWithSep = raw.endsWith(sep);\n let out = segments[0];\n\n for (let i = 1; i < segments.length; i++) {\n if (segments[i]) {\n out += sep + segments[i];\n } else if (endsWithSep && segments[i - 1].length === lengths[i - 1]) {\n out += sep;\n break;\n } else {\n break;\n }\n }\n\n return out;\n}\n\nfunction onDateInput (event: Event): void {\n inputText.value = maskDate((event.target as HTMLInputElement).value);\n}\n\nfunction onApply (): void {\n if (!canApply.value || draftDate.value === null) {\n return;\n }\n\n emit('update:modelValue', formatIn(draftDate.value, props.format));\n emit('apply');\n}\n\nfunction onCancel (): void {\n seedInputFromModel();\n emit('cancel');\n}\n</script>\n\n<template>\n <div\n class=\"ab-calendar\"\n data-testid=\"calendar\"\n :style=\"{ width: `${width}px` }\">\n <input\n :value=\"inputText\"\n type=\"text\"\n class=\"ab-calendar__input\"\n data-testid=\"calendar-input\"\n :placeholder=\"placeholder\"\n :aria-label=\"inputAriaLabel || placeholder || undefined\"\n inputmode=\"numeric\"\n maxlength=\"10\"\n autocomplete=\"off\"\n @input=\"onDateInput\">\n\n <div class=\"ab-calendar__header\">\n <button\n type=\"button\"\n class=\"ab-calendar__nav\"\n data-testid=\"calendar-prev\"\n :aria-label=\"prevMonthLabel\"\n @click=\"goToPreviousMonth\">\n <Icon\n class=\"ab-calendar__nav-icon\"\n name=\"line-chevron-left\"\n :size=\"14\" />\n </button>\n <span class=\"ab-calendar__month\">{{ monthLabel }}</span>\n <button\n type=\"button\"\n class=\"ab-calendar__nav\"\n data-testid=\"calendar-next\"\n :aria-label=\"nextMonthLabel\"\n @click=\"goToNextMonth\">\n <Icon\n class=\"ab-calendar__nav-icon\"\n name=\"line-chevron-right\"\n :size=\"14\" />\n </button>\n </div>\n\n <div class=\"ab-calendar__weekdays\">\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"ab-calendar__weekday\">{{ label }}</span>\n </div>\n\n <div class=\"ab-calendar__grid\">\n <template\n v-for=\"cell in days\"\n :key=\"cell.key\">\n <!-- Disabled <button> doesn't fire hover; the Tooltip wrapper captures it. -->\n <Tooltip\n v-if=\"cell.disabled && disabledDateTooltip\"\n :id=\"`calendar-disabled-${cell.key}`\"\n :text=\"disabledDateTooltip\"\n placement=\"top\">\n <button\n type=\"button\"\n class=\"ab-calendar__day ab-calendar__day--disabled\"\n :class=\"{ 'ab-calendar__day--muted': !cell.inCurrentMonth }\"\n data-testid=\"calendar-day\"\n data-disabled=\"true\"\n :data-date=\"cell.key\"\n :aria-label=\"cell.display\"\n aria-disabled=\"true\"\n disabled>{{ cell.label }}</button>\n </Tooltip>\n <button\n v-else\n type=\"button\"\n class=\"ab-calendar__day\"\n :class=\"{\n 'ab-calendar__day--muted': !cell.inCurrentMonth,\n 'ab-calendar__day--selected': cell.selected,\n 'ab-calendar__day--disabled': cell.disabled,\n }\"\n data-testid=\"calendar-day\"\n :data-disabled=\"cell.disabled ? 'true' : 'false'\"\n :data-date=\"cell.key\"\n :aria-label=\"cell.display\"\n :aria-pressed=\"cell.selected\"\n :disabled=\"cell.disabled\"\n @click=\"selectDay(cell)\">{{ cell.label }}</button>\n </template>\n </div>\n\n <div class=\"ab-calendar__footer\">\n <Button\n variant=\"ghost\"\n color=\"secondary\"\n size=\"default\"\n custom-class=\"ab-calendar__btn ab-calendar__btn--cancel\"\n data-testid=\"calendar-cancel\"\n :label=\"cancelLabel\"\n @click=\"onCancel\" />\n <Button\n variant=\"solid\"\n color=\"primary\"\n size=\"default\"\n custom-class=\"ab-calendar__btn ab-calendar__btn--apply\"\n data-testid=\"calendar-apply\"\n :label=\"applyLabel\"\n :disabled=\"!canApply\"\n @click=\"onApply\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.ab-calendar {\n box-sizing: border-box;\n padding: 16px;\n border-radius: 4px;\n background: $color-base-4;\n font-family: Figtree, sans-serif;\n overflow: hidden;\n user-select: none;\n\n &__input {\n width: 100%;\n box-sizing: border-box;\n height: 40px;\n padding: 8px;\n margin-bottom: 24px;\n border: 1px solid $color_gray_300;\n border-radius: 4px;\n font-family: inherit;\n font-size: 15px;\n line-height: 24px;\n color: $color_gray_800;\n background: $color_gray_0;\n\n &::placeholder {\n color: $color-base-3;\n }\n\n &:focus {\n outline: none;\n border-color: $color_primary_500;\n background: $color_gray_0;\n box-shadow: 0 0 0 3px $color_primary_200;\n }\n }\n\n &__header,\n &__weekdays,\n &__grid {\n margin-left: 8px;\n margin-right: 8px;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n }\n\n &__month {\n flex: 1;\n font-size: 13px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 1.2px;\n text-align: center;\n color: $color_gray_600;\n text-transform: uppercase;\n }\n\n &__nav {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: $color_gray_600;\n cursor: pointer;\n\n &:hover {\n background: $color_gray_200;\n }\n }\n\n &__nav-icon {\n display: block;\n }\n\n &__weekdays,\n &__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 0;\n }\n\n &__weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n font-size: 13px;\n line-height: 16px;\n color: $color_gray_500;\n text-transform: uppercase;\n }\n\n &__day {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n border: none;\n border-radius: 4px;\n background: transparent;\n font-family: inherit;\n font-size: 13px;\n line-height: 16px;\n color: $color_gray_800;\n cursor: pointer;\n\n &:hover:not(&--disabled):not(&--selected) {\n background: $color_primary_0;\n }\n\n &--muted {\n visibility: hidden;\n height: 0;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n }\n\n &--selected {\n background: $color_primary_500;\n color: $color-base-4;\n\n &:hover {\n background: $color_primary_500;\n }\n }\n\n &--disabled {\n color: $color_gray_500;\n cursor: not-allowed;\n }\n }\n\n &__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 16px;\n margin: 8px -16px -8px;\n padding: 8px 16px;\n border-top: 1px solid $color_gray_300;\n }\n\n &__footer :deep(.ab-calendar__btn--cancel) {\n color: $color_neutral_800;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { AllIconNames } from '@/components/Icon/Icon.vue';\nimport { Icon } from '@/index';\nimport styles from './Chip.module.scss';\n\nexport interface ChipProps {\n label: string;\n thumbnailUrl?: string;\n thumbnailAlt?: string;\n iconName?: AllIconNames;\n removable?: boolean;\n clickable?: boolean;\n variant?: 'default';\n}\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n removable: false,\n clickable: false,\n variant: 'default',\n});\n\nconst emit = defineEmits<{\n remove: [];\n click: [];\n}>();\n\nconst chipClasses = computed(() => [\n styles.chip,\n styles[`chip--${props.variant}`],\n {\n [styles['chip--clickable']]: props.clickable,\n },\n]);\n\nfunction handleClick () {\n if (props.clickable) {\n emit('click');\n }\n}\n\nfunction handleRemove (event: MouseEvent) {\n event.stopPropagation();\n\n emit('remove');\n}\n</script>\n\n<template>\n <div\n :class=\"chipClasses\"\n @click=\"handleClick\">\n <span\n v-if=\"thumbnailUrl || iconName\"\n :class=\"styles.chip__thumbnail\">\n <img\n v-if=\"thumbnailUrl\"\n :alt=\"thumbnailAlt || label\"\n :class=\"styles.chip__thumbnailImage\"\n :src=\"thumbnailUrl\">\n <Icon\n v-else-if=\"iconName\"\n :class=\"styles.chip__icon\"\n :name=\"iconName\"\n :size=\"24\" />\n </span>\n <span :class=\"styles.chip__label\">{{ label }}</span>\n <button\n v-if=\"removable\"\n type=\"button\"\n :class=\"styles.chip__remove\"\n @click=\"handleRemove\">\n <Icon\n name=\"chip-close\"\n :size=\"4\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { Icon } from '@/index';\nimport styles from './Checkbox.module.scss';\n\nexport interface CheckboxProps {\n id: string;\n name?: string;\n label?: string;\n checked?: boolean;\n disabled?: boolean;\n value?: string | number;\n modelValue?: boolean;\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n checked: false,\n disabled: false,\n label: '',\n name: '',\n value: '',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n change: [checked: boolean];\n}>();\n\nconst checked = computed(() => (props.modelValue !== undefined ? props.modelValue : props.checked));\n\nfunction handleChange (event: Event) {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n}\n</script>\n\n<template>\n <label\n :class=\"[\n styles.checkbox,\n {\n [styles.checkbox__checked]: checked,\n [styles.checkbox__disabled]: disabled,\n },\n ]\"\n :for=\"id\">\n <input\n :id=\"id\"\n type=\"checkbox\"\n :checked=\"checked\"\n :class=\"styles.checkbox__input\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @change=\"handleChange\">\n <span :class=\"styles.checkbox__box\">\n <Icon\n v-if=\"checked\"\n name=\"line-check-netural\"\n :size=\"16\" />\n </span>\n <span\n v-if=\"label\"\n :class=\"styles.checkbox__label\">{{ label }}</span>\n <slot />\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport styles from './ColorPreview.module.scss';\n\nexport interface ColorPreviewProps {\n colors: string[];\n size?: 'small' | 'medium' | 'default';\n}\n\nconst props = withDefaults(defineProps<ColorPreviewProps>(), {\n size: 'default',\n});\n\nconst previewClasses = computed(() => [\n styles.colorPreview,\n styles[`colorPreview--${props.size}`],\n]);\n</script>\n\n<template>\n <div :class=\"previewClasses\">\n <div :class=\"styles.colorPreview__container\">\n <div\n v-for=\"(color, index) in colors\"\n :key=\"index\"\n :class=\"styles.colorPreview__swatch\"\n :style=\"{ backgroundColor: color }\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, nextTick } from 'vue';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\ninterface InBasicTextInputProps {\n id: string;\n name: string;\n theme?: 'grey' | 'white';\n modelValue?: string | number;\n labelStatus?: boolean;\n labelText?: string;\n type?: 'text' | 'number';\n states?: 'default' | 'error' | 'warning';\n placeholderText: string;\n disabledStatus?: boolean;\n readonly?: boolean;\n leftIconStatus?: boolean;\n leftIconName?: IconNames;\n rightIconStatus?: boolean;\n rightIconName?: IconNames;\n suffixTextStatus?: boolean;\n suffixText?: string;\n autoComplete?: string;\n maxCharacterLength?: number | string;\n minValue?: number | string;\n maxValue?: number | string;\n autoFocus?: boolean;\n allowDecimal?: boolean;\n allowComma?: boolean;\n preventXss?: boolean;\n helperMessageStatus?: boolean;\n helperMessage?: string;\n stateMessage?: string;\n}\n\nconst props = withDefaults(defineProps<InBasicTextInputProps>(), {\n theme: 'grey',\n modelValue: '',\n labelStatus: true,\n labelText: '',\n type: 'text',\n states: 'default',\n disabledStatus: false,\n readonly: false,\n leftIconStatus: false,\n leftIconName: undefined,\n rightIconStatus: false,\n rightIconName: undefined,\n suffixTextStatus: false,\n suffixText: '',\n autoComplete: 'off',\n maxCharacterLength: '',\n minValue: 0,\n maxValue: '',\n autoFocus: false,\n allowDecimal: false,\n allowComma: true,\n preventXss: true,\n helperMessageStatus: true,\n helperMessage: '',\n stateMessage: '',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n input: [value: string | number];\n change: [value: string | number];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keyup: [event: KeyboardEvent];\n keypress: [event: KeyboardEvent];\n click: [event: MouseEvent];\n paste: [event: ClipboardEvent];\n leftIconClick: [event: MouseEvent];\n rightIconClick: [event: MouseEvent];\n}>();\n\nconst inputValue = ref<string | number>('');\n\nconst labelTextSecure = computed(() => {\n if (props.preventXss) {\n // Simple XSS prevention - escape HTML\n return String(props.labelText)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n return props.labelText;\n});\n\nconst statesDefault = computed(() => props.states === 'default');\nconst statesValidation = computed(\n () => props.states === 'warning' || props.states === 'error'\n);\nconst helperContainerStatus = computed(\n () => props.helperMessageStatus || statesValidation.value\n);\n\nconst isNumberType = computed(() => props.type === 'number');\n\nconst deniedSymbols = computed(() => {\n const denied = ['e', 'E', '+', '\\\\'];\n const minValueNum = typeof props.minValue === 'number'\n ? props.minValue\n : Number(props.minValue);\n\n if (!Number.isNaN(minValueNum) && minValueNum >= 0) {\n denied.push('-');\n }\n\n if (!props.allowDecimal) {\n denied.push('.');\n }\n\n if (!props.allowComma) {\n denied.push(',');\n }\n\n return denied;\n});\n\nconst preventKeyPress = (key: string) => deniedSymbols.value.includes(key);\n\nconst fixValue = (event: Event & { target?: HTMLInputElement }) => {\n if (props.preventXss && event?.target) {\n const safeData = String(event.target.value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n\n if (event.target.value !== safeData) {\n event.target.value = safeData;\n }\n }\n\n inputValue.value = event?.target?.value || '';\n\n return event;\n};\n\nconst createCommasAndDotsRegex = () => {\n let regexPattern = '';\n\n if (props.allowDecimal) {\n regexPattern += '.';\n }\n\n if (props.allowComma) {\n regexPattern += ',';\n }\n\n return new RegExp(`[${regexPattern}]`, 'g');\n};\n\nconst createNonNumberRegex = () => {\n let allowedChars = '0-9';\n\n if (props.allowDecimal) {\n allowedChars += '\\\\.';\n }\n\n if (props.allowComma) {\n allowedChars += ',';\n }\n\n return new RegExp(`[^${allowedChars}]+`, 'g');\n};\n\nconst replaceNonNumbers = (event: Event & { target?: HTMLInputElement }) => {\n if (!event?.target) {\n return;\n }\n\n const inputElement = event.target;\n const { selectionStart } = inputElement;\n\n if (selectionStart === null) {\n return;\n }\n\n const cursor = selectionStart - 1;\n const { value } = event.target;\n const regex = createNonNumberRegex();\n const indexes = [...value.matchAll(regex)].map(item => item.index);\n\n event.target.value = value.replace(regex, '');\n\n if (indexes.length > 0 && cursor >= 0) {\n inputElement.setSelectionRange(cursor, cursor);\n }\n};\n\nconst replaceExtraCommasAndDots = (\n event: Event & { target?: HTMLInputElement }\n) => {\n if (!event?.target) {\n return;\n }\n\n const { value } = event.target;\n const inputElement = event.target;\n const { selectionStart } = inputElement;\n\n if (selectionStart === null) {\n return;\n }\n\n const cursorPosition = selectionStart - 1;\n const regex = createCommasAndDotsRegex();\n const indexes = [...value.matchAll(regex)].map(item => item.index);\n const characters = value.split('');\n\n if (indexes.length > 1 && cursorPosition >= 0) {\n characters[cursorPosition] = '';\n }\n\n event.target.value = characters.join('');\n\n if (indexes.length > 1 && cursorPosition >= 0) {\n inputElement.setSelectionRange(cursorPosition, cursorPosition);\n }\n};\n\nconst keyup = (event: KeyboardEvent) => {\n emit('keyup', event);\n};\n\nconst keypress = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n emit('keypress', event);\n }\n\n if (isNumberType.value && preventKeyPress(event.key)) {\n event.preventDefault();\n }\n};\n\nconst focus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst blur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst click = (event: MouseEvent) => {\n emit('click', event);\n};\n\nconst input = (event: Event) => {\n const inputEvent = event as Event & { target?: HTMLInputElement };\n\n if (isNumberType.value) {\n replaceNonNumbers(inputEvent);\n replaceExtraCommasAndDots(inputEvent);\n }\n\n fixValue(inputEvent);\n\n const value = inputEvent?.target?.value || '';\n\n inputValue.value = value;\n emit('input', value);\n emit('update:modelValue', value);\n};\n\nconst change = (event: Event) => {\n const inputEvent = event as Event & { target?: HTMLInputElement };\n\n if (isNumberType.value) {\n replaceNonNumbers(inputEvent);\n replaceExtraCommasAndDots(inputEvent);\n }\n\n fixValue(inputEvent);\n\n const value = inputEvent?.target?.value || '';\n\n inputValue.value = value;\n emit('change', value);\n emit('update:modelValue', value);\n};\n\nconst paste = (event: ClipboardEvent) => {\n if (\n props.maxCharacterLength\n && typeof props.maxCharacterLength === 'number'\n ) {\n const inputElement = event.target as HTMLInputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n if (start === null || end === null) {\n return;\n }\n\n const { value } = inputElement;\n const clipboardData = event.clipboardData?.getData('text/plain') || '';\n const currentLength = value.length;\n const selectedLength = end - start;\n const availableSpace = props.maxCharacterLength - currentLength + selectedLength;\n\n if (availableSpace <= 0) {\n event.preventDefault();\n\n return;\n }\n\n const truncatedClipboardData = clipboardData.slice(0, availableSpace);\n\n if (truncatedClipboardData !== clipboardData) {\n event.preventDefault();\n\n const newValue = value.slice(0, start)\n + truncatedClipboardData\n + value.slice(end);\n\n inputElement.value = newValue;\n\n const cursor = start + truncatedClipboardData.length;\n\n inputElement.setSelectionRange(cursor, cursor);\n inputValue.value = newValue;\n emit('input', newValue);\n emit('update:modelValue', newValue);\n\n return;\n }\n }\n\n if (!isNumberType.value) {\n return;\n }\n\n event.preventDefault();\n\n const inputElement = event.target as HTMLInputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n if (start === null || end === null) {\n return;\n }\n\n const { value } = inputElement;\n const replaceAll = value.includes('.') || value.includes(',');\n const clipboardData = event.clipboardData?.getData('text/plain') || '';\n const regex = createCommasAndDotsRegex();\n const nonNumberRegex = createNonNumberRegex();\n let cleanedValue = clipboardData.replace(nonNumberRegex, '');\n const matches = [...cleanedValue.matchAll(regex)];\n const indexes: number[] = [];\n\n matches.forEach(match => {\n if (match.index !== undefined) {\n indexes.push(match.index);\n }\n });\n\n const characters = cleanedValue.split('');\n\n if (!replaceAll) {\n indexes.shift();\n }\n\n indexes.forEach(index => {\n characters[index] = '';\n });\n\n cleanedValue = characters.join('');\n\n const cursor = start + cleanedValue.length;\n const newValue = value.slice(0, start) + cleanedValue + value.slice(end);\n\n inputElement.value = newValue;\n inputElement.setSelectionRange(cursor, cursor);\n inputValue.value = newValue;\n emit('input', newValue);\n emit('update:modelValue', newValue);\n};\n\nconst leftIconClick = (event: MouseEvent) => {\n emit('leftIconClick', event);\n};\n\nconst rightIconClick = (event: MouseEvent) => {\n emit('rightIconClick', event);\n};\n\nconst textInput = ref<HTMLInputElement | null>(null);\nconst componentRoot = ref<HTMLElement | null>(null);\n\nconst focusToInput = () => {\n nextTick(() => {\n textInput.value?.focus();\n });\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n inputValue.value = newValue;\n },\n { immediate: true }\n);\n\nwatch(\n () => props.autoFocus,\n newValue => {\n if (newValue) {\n focusToInput();\n }\n }\n);\n\nonMounted(() => {\n if (props.autoFocus) {\n focusToInput();\n }\n});\n</script>\n\n<template>\n <fieldset\n ref=\"componentRoot\"\n class=\"in-basic-text-input-wrapper qa-text-input\"\n :class=\"[\n `in-basic-text-input-wrapper__${states}`,\n `in-basic-text-input-wrapper__${theme}`,\n { 'in-basic-text-input-wrapper__disable': disabledStatus },\n ]\">\n <label\n v-if=\"labelStatus\"\n class=\"in-basic-text-input-wrapper__label\"\n :for=\"id\">\n <span v-html=\"labelTextSecure\" />\n </label>\n <div class=\"in-basic-text-input-wrapper__input-field\">\n <div\n v-if=\"$slots.leftSlot\"\n class=\"in-basic-text-input-wrapper__slot-left\">\n <slot name=\"leftSlot\" />\n </div>\n <Icon\n v-if=\"leftIconStatus\"\n class=\"in-basic-text-input-wrapper__icon-left\"\n :name=\"leftIconName\"\n :size=\"24\"\n @click=\"leftIconClick\" />\n <input\n :id=\"id\"\n ref=\"textInput\"\n class=\"in-basic-text-input-wrapper__input\"\n :autocomplete=\"autoComplete\"\n :disabled=\"disabledStatus\"\n :max=\"typeof maxValue === 'number' ? maxValue : undefined\"\n :maxlength=\"\n typeof maxCharacterLength === 'number'\n ? maxCharacterLength\n : undefined\n \"\n :min=\"typeof minValue === 'number' ? minValue : undefined\"\n :name=\"name\"\n :placeholder=\"placeholderText\"\n :readonly=\"readonly\"\n :type=\"type\"\n :value=\"inputValue\"\n @blur=\"blur\"\n @change=\"change\"\n @click=\"click\"\n @focus=\"focus\"\n @input=\"input\"\n @keypress=\"keypress\"\n @keyup=\"keyup\"\n @paste=\"paste\">\n <span\n v-if=\"suffixTextStatus && suffixText\"\n class=\"in-basic-text-input-wrapper__suffix-text\">\n {{ suffixText }}\n </span>\n <Icon\n v-if=\"rightIconStatus\"\n class=\"in-basic-text-input-wrapper__icon-right\"\n :name=\"rightIconName\"\n :size=\"24\"\n @click=\"rightIconClick\" />\n <div\n v-if=\"$slots.rightSlot\"\n class=\"in-basic-text-input-wrapper__slot-right\">\n <slot name=\"rightSlot\" />\n </div>\n </div>\n <div\n v-if=\"helperContainerStatus\"\n class=\"in-basic-text-input-wrapper__helper-container\">\n <div\n v-if=\"helperMessageStatus || statesValidation\"\n class=\"in-basic-text-input-wrapper__helper-message\">\n <p\n v-if=\"statesDefault\"\n class=\"in-basic-text-input-wrapper__helper-text\">\n {{ helperMessage }}\n </p>\n <p\n v-if=\"statesValidation && !disabledStatus\"\n class=\"in-basic-text-input-wrapper__helper-text\">\n {{ stateMessage }}\n </p>\n </div>\n </div>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-basic-text-input-wrapper {\n border: 0;\n margin: 0;\n padding: 0;\n position: relative;\n min-width: 0;\n width: 100%;\n\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n &__label {\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n color: #292929;\n margin-bottom: 8px;\n display: block;\n white-space: nowrap;\n font-family: \"Figtree\", sans-serif;\n }\n\n &__input-field {\n border: 1px solid #e1e1e1;\n border-radius: 4px;\n background-color: #f9f9f9;\n display: flex;\n flex-direction: row;\n align-items: center;\n //max-height: 40px;\n height: 40px;\n box-sizing: border-box;\n min-width: 0;\n width: 100%;\n\n &:focus-within {\n border-color: #0a2ecc;\n box-shadow: 0 0 0 3px #b5c1f1;\n }\n\n &:hover {\n border-color: #7a92f2;\n }\n }\n\n &__icon-left {\n margin-left: 8px;\n fill: #666666;\n margin-right: 0;\n }\n\n &__suffix-text {\n margin-left: 0;\n margin-right: 8px;\n font-size: 15px;\n color: #666666;\n white-space: nowrap;\n border-left: 1px solid #e1e1e1;\n padding: 0 8px;\n display: flex;\n align-self: normal;\n align-items: center;\n }\n\n &__icon-right {\n margin-right: 8px;\n fill: #666666;\n }\n\n &__input {\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n outline: none;\n resize: vertical;\n background-color: inherit;\n border: none !important;\n padding: 6px 8px;\n flex-grow: 1;\n min-width: 0;\n width: 0;\n transition: none !important;\n border-radius: 4px;\n color: #292929;\n font-family: \"Figtree\", sans-serif;\n\n &::placeholder {\n color: #666666;\n }\n }\n\n &__helper-container {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-top: 4px;\n }\n\n &__helper-message {\n display: flex;\n align-items: flex-start;\n }\n\n &__helper-icon {\n margin-right: 4px;\n min-width: 16px;\n }\n\n &__helper-text {\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n margin: 0;\n color: #292929;\n }\n}\n\n.in-basic-text-input-wrapper__warning {\n .in-basic-text-input-wrapper__input-field {\n border-color: #ffbf00;\n\n &:focus-within {\n border-color: #ffbf00;\n box-shadow: 0 0 0 3px #ffe187;\n }\n\n &:hover {\n border-color: #ffd557;\n }\n }\n\n .in-basic-text-input-wrapper__helper-icon {\n fill: #ffbf00;\n transition: none;\n }\n}\n\n.in-basic-text-input-wrapper__error {\n .in-basic-text-input-wrapper__input-field {\n border-color: #dc2a2a;\n\n &:focus-within {\n border-color: #dc2a2a;\n box-shadow: 0 0 0 3px #f88e8c;\n }\n\n &:hover {\n border-color: #f16462;\n }\n }\n\n .in-basic-text-input-wrapper__helper-icon {\n fill: #dc2a2a;\n transition: none;\n }\n}\n\n.in-basic-text-input-wrapper__disable {\n * {\n pointer-events: none;\n fill: #989898;\n color: #989898 !important;\n }\n\n .in-basic-text-input-wrapper__input-field {\n border-color: #e1e1e1;\n background-color: #e1e1e1 !important;\n }\n\n .in-basic-text-input-wrapper__input {\n transition: none !important;\n\n &::placeholder {\n color: #989898 !important;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface Props {\n color: string;\n isTransparent?: boolean;\n}\n\nconst props = defineProps<Props>();\n\ndefineEmits(['click']);\n\nconst hasTransparency = computed(() => {\n if (props.color.startsWith('#') && props.color.length === 9) {\n return true;\n }\n\n if (props.color.startsWith('rgba')) {\n const opacityMatch = props.color.match(/[\\d.]+\\)$/);\n\n if (opacityMatch) {\n const opacity = parseFloat(opacityMatch[0]);\n\n return opacity < 1;\n }\n }\n\n return false;\n});\n</script>\n\n<template>\n <div\n class=\"color-swatch\"\n @click=\"$emit('click')\">\n <!-- Transparent background pattern -->\n <div\n v-if=\"isTransparent || hasTransparency\"\n class=\"color-swatch__transparent\">\n <div class=\"color-swatch__checkerboard\" />\n <div\n v-if=\"hasTransparency\"\n class=\"color-swatch__color-overlay\"\n :style=\"{ background: color }\" />\n </div>\n\n <!-- Color swatch -->\n <div\n v-else\n class=\"color-swatch__color\"\n :style=\"{ background: color }\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.color-swatch {\n position: relative;\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n cursor: pointer;\n transition: transform 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &__transparent {\n position: absolute;\n inset: 0;\n border-radius: 1.6px;\n border: 0.8px solid #e1e1e1;\n overflow: hidden;\n }\n\n &__checkerboard {\n width: 100%;\n height: 100%;\n background-image: repeating-conic-gradient(#dcdee6 0% 25%, white 0% 50%);\n background-size: 6px 6px;\n }\n\n &__color-overlay {\n position: absolute;\n inset: 0;\n border-radius: 1.6px;\n }\n\n &__color {\n position: absolute;\n inset: 0;\n border-radius: 2px;\n border: 1px solid #e1e1e1;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { Icon } from '@/index';\nimport ColorSwatch from './ColorSwatch.vue';\n\ninterface Emits {\n (e: 'color-change', color: string): void;\n (e: 'close'): void;\n}\n\ninterface ColorPickerProps {\n color?: string;\n title?: string;\n showSaveButton?: boolean;\n presetColors?: string[];\n firstRowCount?: number;\n showOpacityInHex?: boolean;\n}\n\nconst props = withDefaults(defineProps<ColorPickerProps>(), {\n color: '#666666',\n title: 'Text Color',\n showSaveButton: false,\n showOpacityInHex: true,\n firstRowCount: 10,\n presetColors: () => [\n 'transparent',\n '#000000',\n '#333333',\n '#666666',\n '#999999',\n '#CCCCCC',\n '#FFFFFF',\n '#F43736',\n '#FF9800',\n '#FFC207',\n '#FFEB3B',\n '#CDDC39',\n '#8BC44A',\n '#4CAF51',\n '#009688',\n '#07BCD4',\n '#05AAF4',\n '#3F52B5',\n ],\n});\n\nconst emit = defineEmits<Emits>();\nconst hue = ref(0.0);\nconst saturation = ref(0);\nconst brightness = ref(0.4);\nconst opacity = ref(1);\nconst hexInput = ref('666666');\nconst savedColors = ref<string[]>([]);\nconst isUpdatingFromProp = ref(false); // Flag to prevent emit when updating from prop\nconst colorPickerRef = ref<HTMLElement | null>(null);\nconst hueSliderRef = ref<HTMLElement | null>(null);\nconst opacitySliderRef = ref<HTMLElement | null>(null);\n\nconst presetColorRows = computed(() => {\n const colors = props.presetColors || [];\n const rows: string[][] = [];\n const colorsPerRow = 11;\n const firstRowSize = props.firstRowCount;\n\n if (colors.length === 0) {\n return rows;\n }\n\n rows.push(colors.slice(0, firstRowSize));\n\n for (let i = firstRowSize; i < colors.length; i += colorsPerRow) {\n rows.push(colors.slice(i, i + colorsPerRow));\n }\n\n return rows;\n});\n\nconst hueColor = computed(() => {\n const h = hue.value;\n const x = 1 - Math.abs(((h * 6) % 2) - 1);\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h < 1 / 6) {\n r = 1;\n g = x;\n } else if (h < 2 / 6) {\n r = x;\n g = 1;\n } else if (h < 3 / 6) {\n g = 1;\n b = x;\n } else if (h < 4 / 6) {\n g = x;\n b = 1;\n } else if (h < 5 / 6) {\n r = x;\n b = 1;\n } else {\n r = 1;\n b = x;\n }\n\n return `rgb(${Math.round(r * 255)}, ${Math.round(g * 255)}, ${Math.round(b * 255)})`;\n});\n\nconst currentColor = computed(() => {\n const h = hue.value;\n const s = saturation.value;\n const v = brightness.value;\n const c = v * s;\n const x = c * (1 - Math.abs(((h * 6) % 2) - 1));\n const m = v - c;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h < 1 / 6) {\n r = c;\n g = x;\n } else if (h < 2 / 6) {\n r = x;\n g = c;\n } else if (h < 3 / 6) {\n g = c;\n b = x;\n } else if (h < 4 / 6) {\n g = x;\n b = c;\n } else if (h < 5 / 6) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n\n return `rgb(${r}, ${g}, ${b})`;\n});\n\nconst currentColorWithOpacity = computed(() => {\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return currentColor.value;\n }\n\n if (opacity.value < 1) {\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opacity.value})`;\n }\n\n return `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;\n});\n\nwatch([hue, saturation, brightness, opacity], () => {\n updateHexInput();\n\n if (!isUpdatingFromProp.value) {\n emit('color-change', currentColorWithOpacity.value);\n }\n});\n\nwatch(\n () => props.color,\n newColor => {\n if (newColor) {\n isUpdatingFromProp.value = true;\n\n // Handle 'transparent' as a special case\n if (newColor.toLowerCase() === 'transparent') {\n setNoColor();\n } else {\n setColorFromHex(newColor);\n }\n\n setTimeout(() => {\n isUpdatingFromProp.value = false;\n }, 0);\n }\n },\n { immediate: true }\n);\n\nfunction updateHexInput () {\n if (opacity.value === 0) {\n hexInput.value = '';\n\n return;\n }\n\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return;\n }\n\n const hex = rgb\n .map(x => parseInt(x).toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase();\n\n if (props.showOpacityInHex) {\n const opacityHex = Math.round(opacity.value * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n\n hexInput.value = hex + opacityHex;\n } else {\n hexInput.value = hex;\n }\n}\n\nfunction handleColorPickerMouseDown (e: MouseEvent) {\n // Picking from the gradient means \"I want a visible colour\". If the picker was\n // seeded transparent (no-colour), opacity is 0 — promote it so the pick is not\n // swallowed as rgba(...,0) and the hex input reflects the choice.\n if (opacity.value === 0) {\n opacity.value = 1;\n }\n\n const updatePosition = (event: MouseEvent) => {\n if (!colorPickerRef.value) {\n return;\n }\n\n const rect = colorPickerRef.value.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n\n saturation.value = x;\n brightness.value = 1 - y;\n };\n\n updatePosition(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updatePosition(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleHueSliderMouseDown (e: MouseEvent) {\n // See handleColorPickerMouseDown: choosing a hue implies a visible colour, so lift\n // a transparent (no-colour) seed off opacity 0.\n if (opacity.value === 0) {\n opacity.value = 1;\n }\n\n const updateHue = (event: MouseEvent) => {\n if (!hueSliderRef.value) {\n return;\n }\n\n const rect = hueSliderRef.value.getBoundingClientRect();\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n\n hue.value = y;\n };\n\n updateHue(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updateHue(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleOpacitySliderMouseDown (e: MouseEvent) {\n const updateOpacity = (event: MouseEvent) => {\n if (!opacitySliderRef.value) {\n return;\n }\n\n const rect = opacitySliderRef.value.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n\n opacity.value = 1 - x;\n };\n\n updateOpacity(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updateOpacity(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleHexInput (value: string | number) {\n const maxLength = props.showOpacityInHex ? 8 : 6;\n const hexString = String(value).replace(/[^0-9A-Fa-f]/g, '').slice(0, maxLength).toUpperCase();\n\n hexInput.value = hexString;\n\n if (props.showOpacityInHex) {\n if (hexString.length === 6 || hexString.length === 8) {\n setColorFromHex(hexString);\n }\n } else if (hexString.length === 6) {\n setColorFromHex(hexString);\n }\n}\n\nfunction handleHexPaste (event: ClipboardEvent) {\n const pastedText = event.clipboardData?.getData('text') || '';\n const maxLength = props.showOpacityInHex ? 8 : 6;\n const cleanHex = pastedText.replace(/^#/, '').replace(/[^0-9A-Fa-f]/g, '').slice(0, maxLength).toUpperCase();\n\n if (props.showOpacityInHex) {\n if (cleanHex.length === 6 || cleanHex.length === 8) {\n hexInput.value = cleanHex;\n setColorFromHex(cleanHex);\n event.preventDefault();\n } else if (cleanHex.length > 0) {\n hexInput.value = cleanHex;\n event.preventDefault();\n }\n } else if (cleanHex.length === 6) {\n hexInput.value = cleanHex;\n setColorFromHex(cleanHex);\n event.preventDefault();\n } else if (cleanHex.length > 0) {\n hexInput.value = cleanHex;\n event.preventDefault();\n }\n}\n\nfunction validateHexInput () {\n const expectedLength = props.showOpacityInHex ? 8 : 6;\n\n if (hexInput.value.length !== expectedLength) {\n updateHexInput();\n }\n}\n\nfunction setColorFromHex (hex: string) {\n const cleanHex = hex.startsWith('#') ? hex.slice(1) : hex;\n const hex6Result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\n const hex8Result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\n const result = hex8Result || hex6Result;\n\n if (!result) {\n const rgbMatch = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/.exec(hex);\n\n if (rgbMatch) {\n const r = parseInt(rgbMatch[1], 10) / 255;\n const g = parseInt(rgbMatch[2], 10) / 255;\n const b = parseInt(rgbMatch[3], 10) / 255;\n const a = rgbMatch[4] ? parseFloat(rgbMatch[4]) : 1;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n hue.value = h;\n saturation.value = s;\n brightness.value = v;\n opacity.value = a;\n updateHexInput();\n\n return;\n }\n\n return;\n }\n\n const r = parseInt(result[1], 16) / 255;\n const g = parseInt(result[2], 16) / 255;\n const b = parseInt(result[3], 16) / 255;\n\n if (hex8Result && result[4]) {\n opacity.value = parseInt(result[4], 16) / 255;\n } else {\n opacity.value = 1;\n }\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n hue.value = h;\n saturation.value = s;\n brightness.value = v;\n\n const hexWithoutHash = hex.replace(/^#/, '');\n\n hexInput.value = hexWithoutHash.slice(0, 6).toUpperCase();\n}\n\nfunction setOpacity (value: number) {\n opacity.value = value;\n}\n\nfunction getCurrentColorWithOpacityHex (): string {\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return 'ffffff';\n }\n\n const hex = rgb\n .map(x => parseInt(x).toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase();\n\n const opacityHex = Math.round(opacity.value * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n\n return `#${hex}${opacityHex}`;\n}\n\nfunction saveCurrentColor () {\n const colorWithOpacity = getCurrentColorWithOpacityHex();\n\n if (!savedColors.value.includes(colorWithOpacity)) {\n savedColors.value.push(colorWithOpacity);\n }\n}\n\nfunction selectSavedColor (color: string) {\n setColorFromHex(color);\n}\n\nfunction setNoColor () {\n hexInput.value = '';\n opacity.value = 0;\n hue.value = 0;\n saturation.value = 0;\n brightness.value = 0.4;\n emit('color-change', 'transparent');\n}\n</script>\n\n<template>\n <div class=\"color-picker\">\n <div class=\"color-picker__header-wrapper\">\n <div class=\"color-picker__header\">\n <h3 class=\"color-picker__title\">\n {{ title }}\n </h3>\n </div>\n <div\n v-if=\"$slots.tabs\"\n class=\"color-picker__tabs\">\n <slot name=\"tabs\" />\n </div>\n </div>\n <div class=\"color-picker__content-wrapper\">\n <div class=\"color-picker__gradient-wrapper\">\n <div class=\"color-picker__color-area\">\n <div\n ref=\"colorPickerRef\"\n class=\"color-picker__color-canvas\"\n :style=\"{\n background: `linear-gradient(to bottom, transparent, black),\n linear-gradient(to right, white, ${hueColor})`,\n }\"\n @mousedown=\"handleColorPickerMouseDown\">\n <div\n class=\"color-picker__color-indicator\"\n :style=\"{ left: `${saturation * 100}%`, top: `${(1 - brightness) * 100}%` }\" />\n </div>\n </div>\n\n <div class=\"color-picker__hue-wrapper\">\n <div\n ref=\"hueSliderRef\"\n class=\"color-picker__hue-slider\"\n @mousedown=\"handleHueSliderMouseDown\">\n <div\n class=\"color-picker__hue-indicator\"\n :style=\"{ top: `${hue * 100}%` }\" />\n </div>\n </div>\n </div>\n\n <div class=\"color-picker__opacity-wrapper\">\n <div\n ref=\"opacitySliderRef\"\n class=\"color-picker__opacity-slider\"\n @mousedown=\"handleOpacitySliderMouseDown\">\n <div class=\"color-picker__opacity-checkerboard\" />\n <div\n class=\"color-picker__opacity-gradient\"\n :style=\"{\n background: `linear-gradient(to right, ${currentColor}, transparent)`,\n }\" />\n <div\n class=\"color-picker__opacity-handle\"\n :style=\"{\n left: `${(1 - opacity) * 100}%`,\n }\" />\n </div>\n </div>\n\n <div class=\"color-picker__hex-input-wrapper\">\n <InBasicTextInput\n id=\"color-picker-hex-input\"\n name=\"hex-input\"\n placeholder-text=\"\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n v-model=\"hexInput\"\n @blur=\"validateHexInput\"\n @input=\"handleHexInput\"\n @paste=\"handleHexPaste\" />\n </div>\n\n <div\n v-for=\"(row, rowIndex) in presetColorRows\"\n :key=\"`preset-row-${rowIndex}`\"\n class=\"color-picker__preset-row\">\n <div\n v-if=\"rowIndex === 0\"\n class=\"color-picker__no-color\"\n @click=\"setNoColor\">\n <Icon\n name=\"no-color\"\n :size=\"14\" />\n </div>\n <ColorSwatch\n v-for=\"(color, index) in row\"\n :key=\"`preset-${rowIndex}-${index}`\"\n :color=\"color\"\n :is-transparent=\"color === 'transparent'\"\n @click=\"color === 'transparent' ? setOpacity(0) : setColorFromHex(color)\" />\n </div>\n <div\n v-if=\"presetColorRows.length === 0\"\n class=\"color-picker__preset-row\">\n <div\n class=\"color-picker__no-color\"\n @click=\"setNoColor\">\n <Icon\n name=\"no-color\"\n :size=\"14\" />\n </div>\n </div>\n\n <div\n v-if=\"showSaveButton && savedColors.length > 0\"\n class=\"color-picker__preset-row\">\n <ColorSwatch\n v-for=\"(color, index) in savedColors\"\n :key=\"`saved-${index}`\"\n :color=\"color\"\n @click=\"selectSavedColor(color)\" />\n <button\n class=\"color-picker__save-button\"\n title=\"Save current color\"\n @click=\"saveCurrentColor\" />\n </div>\n\n <div\n v-else-if=\"showSaveButton\"\n class=\"color-picker__preset-row\">\n <button\n class=\"color-picker__save-button\"\n title=\"Save current color\"\n @click=\"saveCurrentColor\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.color-picker {\n display: flex;\n flex-direction: column;\n width: 276px;\n background: white;\n border-radius: 4px;\n border: $border_solid;\n box-shadow: $shadow_elevation;\n padding: 0;\n\n &__content-wrapper {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 0;\n margin: 0;\n border-bottom: $border_solid;\n }\n\n // InTabs adds its own top border; drop the header's so they don't stack into 2px.\n &__header-wrapper:has(&__tabs) &__header {\n border-bottom: none;\n }\n\n &__title {\n color: #222938;\n font-weight: 600;\n font-size: 13px;\n line-height: 16px;\n margin: 0;\n width: 100%;\n padding: 12px 16px;\n font-family: \"Figtree\", sans-serif;\n }\n\n &__tabs {\n margin: 0;\n margin-top: 0;\n width: 100%;\n }\n\n &__gradient-wrapper {\n display: flex;\n gap: 10px;\n }\n\n &__color-area {\n position: relative;\n width: 216px;\n height: 167px;\n flex-shrink: 0;\n }\n\n &__color-canvas {\n position: absolute;\n inset: 0;\n border-radius: 2px;\n cursor: crosshair;\n }\n\n &__color-indicator {\n position: absolute;\n width: 5px;\n height: 5px;\n border-radius: 2px;\n background: #383f47;\n transform: translate(-50%, -50%);\n pointer-events: none;\n border: 1px solid white;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);\n }\n\n &__hue-wrapper {\n position: relative;\n width: 20px;\n height: 167px;\n flex-shrink: 0;\n }\n\n &__hue-slider {\n position: absolute;\n left: 2px;\n top: 0;\n width: 16px;\n height: 100%;\n border-radius: 12px;\n cursor: pointer;\n background: linear-gradient(\n to bottom,\n #ff0000 0%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n &__hue-indicator {\n position: absolute;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n width: 20px;\n height: 7px;\n border-radius: 25px;\n border: 1px solid #7d7d7d;\n background: white;\n pointer-events: none;\n }\n\n &__opacity-wrapper {\n position: relative;\n width: 216px;\n height: 20px;\n }\n\n &__opacity-slider {\n position: absolute;\n left: 0;\n top: 2px;\n width: 100%;\n height: 16px;\n border-radius: 48px;\n cursor: pointer;\n overflow: visible;\n }\n\n &__opacity-checkerboard {\n position: absolute;\n inset: 0;\n border-radius: 48px;\n background-image: repeating-conic-gradient(#dcdee6 0% 25%, white 0% 50%);\n background-size: 8px 8px;\n z-index: 1;\n }\n\n &__opacity-gradient {\n position: absolute;\n inset: 0;\n border-radius: 48px;\n z-index: 2;\n }\n\n &__opacity-handle {\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%) rotate(90deg);\n width: 20px;\n height: 7px;\n border-radius: 25px;\n border: 1px solid #7d7d7d;\n background: white;\n pointer-events: none;\n z-index: 10;\n }\n\n &__hex-input-wrapper {\n width: 216px;\n }\n\n &__preset-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n &__no-color {\n width: 14px;\n height: 14px;\n border-radius: 2px;\n border: $border_solid;\n background: white;\n cursor: pointer;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: border-color 0.2s;\n\n &:hover {\n border-color: #666;\n }\n\n :deep(svg) {\n fill: #495366;\n }\n }\n\n &__save-button {\n width: 14px;\n height: 14px;\n border-radius: 2px;\n border: 2px dashed #e1e1e1;\n background: transparent;\n cursor: pointer;\n flex-shrink: 0;\n transition: border-color 0.2s;\n\n &:hover {\n border-color: #666;\n }\n }\n}\n</style>\n","import type { DirectiveBinding, Ref } from 'vue';\n\ninterface ClickOutsideElement extends HTMLElement {\n clickOutsideEvent?: (event: Event) => void;\n clickOutsideCapture?: boolean;\n}\n\ntype DirectiveType = {\n handler: () => void;\n exclude?: Ref<HTMLElement | undefined>[];\n capture?: boolean;\n};\n\nexport default {\n mounted(el: ClickOutsideElement, binding: DirectiveBinding<DirectiveType>) {\n el.clickOutsideEvent = (event: Event) => {\n const excludeElements = (binding.value.exclude || [])\n .filter(el => el.value)\n .map(el => el.value);\n const isClickInside = [el, ...excludeElements].some(element => {\n return element && (element === event.target || element.contains(event.target as Node));\n });\n\n if (!isClickInside) {\n binding.value.handler();\n }\n };\n\n // Use capture phase if specified, otherwise use bubble phase (default)\n const useCapture = binding.value.capture ?? false;\n\n el.clickOutsideCapture = useCapture;\n\n document.addEventListener('click', el.clickOutsideEvent, useCapture);\n },\n unmounted(el: ClickOutsideElement) {\n if (el.clickOutsideEvent) {\n const useCapture = el.clickOutsideCapture ?? false;\n\n document.removeEventListener('click', el.clickOutsideEvent, useCapture);\n }\n },\n};\n","const isFuzzyMatch = (choiceValue: string, searchTerm: string): boolean => {\n let searchIndex = 0;\n for (const char of choiceValue) {\n if (char.toLowerCase() === searchTerm[searchIndex]?.toLowerCase()) {\n searchIndex++;\n }\n if (searchIndex === searchTerm.length) {\n return true;\n }\n }\n return false;\n};\n\n\nexport const fuzzySearch = <T>(\n choices: T[],\n key: keyof T,\n searchTerm: string,\n): T[] => {\n if (!searchTerm.trim()) {\n return choices;\n }\n\n const normalizedSearchTerm = searchTerm.toLowerCase();\n\n return choices\n .filter(choice => {\n const value = String(choice[key]);\n\n return isFuzzyMatch(value.toLowerCase(), normalizedSearchTerm)\n })\n .sort((a, b) => {\n const aValue = String(a[key]).toLowerCase();\n const bValue = String(b[key]).toLowerCase();\n\n if (aValue === normalizedSearchTerm) return -1;\n if (bValue === normalizedSearchTerm) return 1;\n\n if (aValue.startsWith(normalizedSearchTerm) && !bValue.startsWith(normalizedSearchTerm))\n return -1;\n if (!aValue.startsWith(normalizedSearchTerm) && bValue.startsWith(normalizedSearchTerm))\n return 1;\n\n return aValue.length - bValue.length;\n });\n};\n","<script lang=\"ts\" setup>\nimport { ref, computed, type StyleValue, onMounted, reactive, watch } from 'vue';\nimport clickOutside from '@/directives/clickOutside';\nimport { fuzzySearch } from '@/utils/search';\nimport styles from './Dropdown.module.scss';\n\nconst vClickOutside = clickOutside;\n\ninterface MenuItem {\n text: string;\n value: string;\n}\n\ninterface DropdownProps {\n id: string;\n label?: string;\n modelValue?: string;\n menuHeight?: number;\n placeholder?: string;\n addable?: boolean;\n addButtonText?: string;\n searchable?: boolean;\n searchPlaceHolder?: string;\n items: MenuItem[];\n validateAddItem?: (item: string, items: MenuItem[]) => string | null;\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'add-error', error: string): void;\n (e: 'item-added', item: MenuItem): void;\n (e: 'select-item', item: MenuItem): void;\n}\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n menuHeight: 154,\n searchable: false,\n addable: false,\n modelValue: '',\n validateAddItem: () => null,\n});\n\nconst emit = defineEmits<Emits>();\nconst dropdownRef = ref<HTMLDivElement>();\nconst menuRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst selectedItem = ref<MenuItem | null>(null);\nconst searchQuery = ref('');\nconst errorMessage = ref<string | null>(null);\nconst menuPosition = ref({ x: 0, y: 0, width: 0, shouldOpenUp: false, height: props.menuHeight });\nconst filteredItems = reactive([...props.items]);\nconst allItems = reactive([...props.items]);\n\nconst calculateMenuPosition = () => {\n if (!dropdownRef.value) {\n return;\n }\n\n const { offsetTop: top, offsetLeft: left, offsetWidth: width } = dropdownRef.value;\n const viewportHeight = window.innerHeight;\n const bottom = top + dropdownRef.value.offsetHeight;\n const shouldOpenUp = bottom + props.menuHeight > viewportHeight;\n\n menuPosition.value = {\n x: left + window.scrollX,\n y: shouldOpenUp ? top + window.scrollY : bottom + window.scrollY,\n width,\n shouldOpenUp,\n height: props.menuHeight,\n };\n};\n\nconst toggleMenu = () => {\n calculateMenuPosition();\n isOpen.value = !isOpen.value;\n};\n\nconst resetSettings = () => {\n errorMessage.value = null;\n searchQuery.value = '';\n filteredItems.splice(0, filteredItems.length, ...allItems);\n};\n\nconst closeMenu = () => {\n isOpen.value = false;\n\n resetSettings();\n};\n\nconst selectItem = (item: MenuItem) => {\n selectedItem.value = item;\n\n emit('select-item', item);\n emit('update:modelValue', item.value);\n\n closeMenu();\n};\n\nconst addItem = () => {\n const query = searchQuery.value.trim();\n const error = props.validateAddItem(query, allItems);\n\n if (error) {\n errorMessage.value = error;\n\n emit('add-error', error);\n\n return;\n }\n\n const newItem: MenuItem = {\n text: query,\n value: query,\n };\n\n allItems.push(newItem);\n resetSettings();\n\n emit('item-added', newItem);\n};\n\nconst onSearch = () => {\n const results = fuzzySearch<MenuItem>(allItems, 'text', searchQuery.value);\n\n filteredItems.splice(0, filteredItems.length, ...results);\n};\n\nconst onFocusSearch = () => {\n errorMessage.value = '';\n};\n\nconst menuStyle = computed<Partial<StyleValue>>(() => ({\n top: menuPosition.value.shouldOpenUp ? `${menuPosition.value.y - 10}px` : `${menuPosition.value.y}px`,\n left: `${menuPosition.value.x}px`,\n width: `${menuPosition.value.width}px`,\n height: `${props.menuHeight}px`,\n}));\n\nonMounted(() => {\n calculateMenuPosition();\n\n if (props.modelValue) {\n const defaultItem = allItems.find(item => item.value === props.modelValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nconst selectedValue = computed(() => (selectedItem.value ? selectedItem.value.text : ''));\n\nwatch(() => props.modelValue, newValue => {\n if (selectedItem.value?.value !== newValue) {\n const defaultItem = allItems.find(item => item.value === newValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nwatch(\n () => props.items,\n newItems => {\n allItems.splice(0, allItems.length, ...newItems);\n filteredItems.splice(0, filteredItems.length, ...newItems);\n },\n { deep: true }\n);\n\nconst clickOutsideTarget = ref({ handler: closeMenu, exclude: [dropdownRef, menuRef] });\n</script>\n\n<template>\n <div\n ref=\"dropdownRef\"\n :class=\"styles.dropdown\">\n <label\n v-if=\"label\"\n :class=\"styles.dropdown__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <button\n :class=\"[\n styles.dropdown__valueContent, {\n [styles['dropdown__valueContent--open']]: isOpen,\n },\n ]\"\n @click=\"toggleMenu\">\n <span :class=\"styles.dropdown__value\">\n {{ selectedValue }}\n </span>\n <span\n v-if=\"placeholder && !selectedValue\"\n :class=\"styles.dropdown__placeholder\">\n {{ placeholder }}\n </span>\n <svg\n fill=\"none\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n :class=\"styles.dropdown__arrowIcon\">\n <path\n d=\"M8 11.2021L4.5359 6.70215L11.4641 6.70215L8 11.2021Z\"\n fill=\"#91949F\" />\n </svg>\n </button>\n </div>\n\n <div\n v-show=\"isOpen\"\n ref=\"menuRef\"\n :class=\"styles.menu\"\n :style=\"menuStyle\"\n v-click-outside=\"clickOutsideTarget\"\n @click.prevent>\n <div\n v-if=\"props.searchable\"\n :class=\"styles.menu__searchContainer\">\n <div :class=\"styles.menu__searchInputWrap\">\n <input\n type=\"text\"\n :class=\"[\n styles.menu__searchInput, {\n [styles['menu__searchInput--error']]: errorMessage,\n },\n ]\"\n :placeholder=\"searchPlaceHolder\"\n v-model=\"searchQuery\"\n @focus=\"onFocusSearch\"\n @input=\"onSearch\">\n <p\n v-if=\"errorMessage\"\n :class=\"styles.menu__errorMessage\">\n {{ errorMessage }}\n </p>\n </div>\n <button\n v-if=\"props.addable\"\n :class=\"styles.menu__addButton\"\n @click=\"addItem\">\n {{ addButtonText }}\n </button>\n </div>\n <ul :class=\"styles.menu__itemContainer\">\n <li\n v-for=\"(item, index) in filteredItems\"\n :key=\"`${item.value}-${index}`\"\n :class=\"[\n styles.menu__item, {\n [styles['menu__item--active']]: selectedItem && item.value === selectedItem.value,\n },\n ]\"\n @click=\"selectItem(item)\">\n {{ item.text }}\n </li>\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface InBoxProps {\n border?: string;\n borderRadius?: string;\n borderTriangle?: boolean;\n borderTrianglePosition?: string;\n borderTriangleAlign?: string;\n}\n\nconst props = withDefaults(defineProps<InBoxProps>(), {\n border: '',\n borderRadius: '',\n borderTriangle: false,\n borderTrianglePosition: '',\n borderTriangleAlign: '',\n});\n\nconst boxClass = computed(() => {\n const classes: string[] = [];\n\n if (props.border) {\n classes.push(props.border);\n }\n\n if (props.borderRadius) {\n classes.push(props.borderRadius);\n }\n\n if (props.borderTriangle && props.borderTrianglePosition && props.borderTriangleAlign) {\n classes.push(`in-box_${props.borderTrianglePosition}-${props.borderTriangleAlign}`);\n }\n\n return classes.join(' ');\n});\n</script>\n\n<template>\n <div\n class=\"in-box\"\n :class=\"boxClass\">\n <slot />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-box {\n // Base styles - can be extended with utility classes\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, withDefaults, defineProps } from 'vue';\nimport styles from './InInfoBox.module.scss';\n\nexport interface InInfoBoxProps {\n id: string;\n theme?: 'light' | 'dark';\n variant?: 'information' | 'warning' | 'alert' | 'smart' | 'neutral';\n titleStatus?: boolean;\n titleText?: string;\n descriptionStatus?: boolean;\n descriptionText?: string;\n size?: 'small' | 'medium' | 'large';\n fullWidthContentStatus?: boolean;\n autoSize?: boolean;\n}\n\nconst props = withDefaults(defineProps<InInfoBoxProps>(), {\n theme: 'light',\n variant: 'information',\n titleStatus: true,\n titleText: '',\n descriptionStatus: true,\n descriptionText: '',\n size: 'medium',\n fullWidthContentStatus: false,\n autoSize: false,\n});\n\nconst isDark = computed(() => props.theme === 'dark');\nconst borderColorClass = computed(() => `in-info-box__${props.variant}`);\nconst sizeClass = computed(() => (props.autoSize ? '' : `in-info-box__size-${props.size}`));\nconst textColorClass = computed(() => (isDark.value ? 'inverse' : 'default'));\n</script>\n\n<template>\n <div\n :class=\"[\n styles['in-info-box'],\n isDark ? styles['in-info-box__background-inverse'] : styles['in-info-box__background-default'],\n styles[sizeClass],\n styles[borderColorClass],\n ]\">\n <div\n :class=\"[\n styles['in-info-box__container'],\n { [styles['in-info-box__container-full-width']]: fullWidthContentStatus },\n ]\">\n <div\n v-if=\"titleStatus\"\n :class=\"[\n styles['in-info-box__heading-wrapper'],\n { [styles['in-info-box__heading-wrapper-full-width']]: fullWidthContentStatus },\n ]\">\n <div\n :class=\"[\n styles['in-info-box__heading'],\n styles[`in-info-box__heading-${textColorClass}`],\n { [styles['in-info-box__heading-full-width']]: fullWidthContentStatus },\n ]\"\n v-html=\"titleText\" />\n <div\n v-if=\"titleStatus && descriptionStatus\"\n :class=\"[\n styles['in-info-box__heading-details'],\n styles[`in-info-box__heading-details-${textColorClass}`],\n ]\"\n v-html=\"descriptionText\" />\n </div>\n <div :class=\"styles['in-info-box__content']\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type {\n CascadingListItem,\n CascadingMenuItem,\n CascadingMenuProps,\n CascadingSubList,\n VirtualAnchor,\n} from './types';\nimport { autoUpdate, flip, offset, shift, size, useFloating } from '@floating-ui/vue';\nimport { computed, onBeforeUnmount, ref, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { fuzzySearch } from '@/utils/search';\n\nconst props = withDefaults(defineProps<CascadingMenuProps>(), {\n width: 220,\n listWidth: 240,\n listMaxHeight: 400,\n menuMaxHeight: undefined,\n loadingText: '',\n menuStyle: () => ({}),\n listStyle: () => ({}),\n teleportTarget: 'body',\n submenuPlacement: 'right',\n searchable: false,\n searchPlaceholder: 'Search',\n emptySearchText: 'No Search Result',\n loading: false,\n selectedItemId: null,\n selectedSubItemId: null,\n menuTestId: undefined,\n listTestId: undefined,\n searchInputId: undefined,\n});\n\ninterface Events {\n (e: 'update:open', value: boolean): void;\n (e: 'item-click', itemId: string): void;\n (e: 'item-expand', itemId: string): void;\n (e: 'select', payload: { itemId: string; subItemId: string }): void;\n (e: 'update:search-query', value: string): void;\n}\n\nconst emit = defineEmits<Events>();\nconst menuRef = ref<HTMLElement | null>(null);\nconst listRef = ref<HTMLElement | null>(null);\nconst activeItemId = ref<string | null>(null);\nconst childSearchQuery = ref('');\nconst parentSearchQuery = ref('');\nconst itemEls = new Map<string, HTMLElement>();\nconst FALLBACK_SEARCH_INPUT_ID = `in-cascading-menu-search-${Math.random().toString(36).slice(2, 9)}`;\nconst parentSearchInputId = computed(() => props.searchInputId ?? FALLBACK_SEARCH_INPUT_ID);\nconst childSearchInputId = computed(() => `${parentSearchInputId.value}-child`);\n\ntype NormalizedEntry =\n | { type: 'group-header'; label: string }\n | { type: 'item'; item: CascadingMenuItem };\n\nconst normalizedEntries = computed<NormalizedEntry[]>(() => props.items.flatMap<NormalizedEntry>(entry => {\n if ('kind' in entry && entry.kind === 'group') {\n return [\n { type: 'group-header', label: entry.label },\n ...entry.items.map<NormalizedEntry>(item => ({ type: 'item', item })),\n ];\n }\n\n return [{ type: 'item', item: entry as CascadingMenuItem }];\n}));\n\nconst flatItems = computed<CascadingMenuItem[]>(() => normalizedEntries.value\n .filter((e): e is { type: 'item'; item: CascadingMenuItem } => e.type === 'item')\n .map(e => e.item));\n\nconst isGlobalSearchMode = computed(() => props.searchable);\nconst hasActiveParentSearch = computed(() => isGlobalSearchMode.value && parentSearchQuery.value.trim().length > 0);\n\nconst menuSizeStyle = computed(() => {\n const style: Record<string, string> = {\n width: `${props.width}px`,\n maxWidth: `${props.width}px`,\n };\n\n if (props.menuMaxHeight) {\n style.maxHeight = `${props.menuMaxHeight}px`;\n }\n\n return style;\n});\nconst listSizeStyle = computed(() => ({ width: `${props.listWidth}px` }));\n\nconst activeItem = computed<CascadingMenuItem | null>(() => {\n if (!activeItemId.value) {\n return null;\n }\n\n return flatItems.value.find(i => i.id === activeItemId.value) ?? null;\n});\n\nconst activeSubList = computed<CascadingSubList | null>(() => activeItem.value?.subList ?? null);\n\nconst activeItemEl = computed<HTMLElement | null>(() => {\n if (!activeItemId.value) {\n return null;\n }\n\n return itemEls.get(activeItemId.value) ?? null;\n});\n\nconst showChildPanel = computed(() => props.open && !hasActiveParentSearch.value && activeSubList.value !== null);\nconst menuAnchorRef = computed(() => props.anchor as HTMLElement | VirtualAnchor | null);\n\nconst { floatingStyles: menuFloatingStyles } = useFloating(menuAnchorRef, menuRef, {\n placement: 'bottom-start',\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [offset(3), flip(), shift({ padding: 8 })],\n});\n\nconst isLeftPlacement = computed(() => props.submenuPlacement === 'left');\n\ntype ListPlacement = 'right-start' | 'left-start';\n\nconst listPlacement = computed<ListPlacement>(() => (isLeftPlacement.value ? 'left-start' : 'right-start'));\nconst listFallback = computed<ListPlacement[]>(() => (isLeftPlacement.value ? ['right-start'] : ['left-start']));\n\nconst listMiddleware = computed(() => [\n offset({ mainAxis: 0, crossAxis: -8 }),\n flip({ fallbackPlacements: listFallback.value }),\n shift({ padding: 8 }),\n size({\n apply ({ availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${Math.min(availableHeight - 8, props.listMaxHeight)}px`,\n });\n },\n }),\n]);\n\nconst { floatingStyles: listFloatingStyles } = useFloating(activeItemEl, listRef, {\n placement: listPlacement,\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: listMiddleware,\n});\n\nconst childListItems = computed<CascadingListItem[]>(() => {\n if (!activeSubList.value) {\n return [];\n }\n\n if (!activeSubList.value.searchable) {\n return activeSubList.value.items;\n }\n\n return fuzzySearch<CascadingListItem>(activeSubList.value.items, 'label', childSearchQuery.value);\n});\n\ninterface FlatSection {\n parentId: string;\n parentLabel: string;\n items: CascadingListItem[];\n}\n\nconst flatSections = computed<FlatSection[]>(() => {\n if (!hasActiveParentSearch.value) {\n return [];\n }\n\n const query = parentSearchQuery.value;\n\n const collectFromItem = (item: CascadingMenuItem): FlatSection | null => {\n if (!item.subList) {\n return null;\n }\n\n const matched = fuzzySearch<CascadingListItem>(item.subList.items, 'label', query);\n\n if (matched.length === 0) {\n return null;\n }\n\n return { parentId: item.id, parentLabel: item.label, items: matched };\n };\n\n return props.items\n .flatMap<FlatSection | null>(entry => {\n if ('kind' in entry && entry.kind === 'group') {\n return entry.items.map(collectFromItem);\n }\n\n return [collectFromItem(entry as CascadingMenuItem)];\n })\n .filter((section): section is FlatSection => section !== null);\n});\n\nconst flatSectionsEmpty = computed(() => hasActiveParentSearch.value && flatSections.value.length === 0);\n\nfunction registerItemEl (id: string, el: unknown): void {\n if (el instanceof HTMLElement) {\n itemEls.set(id, el);\n } else {\n itemEls.delete(id);\n }\n}\n\nfunction handleItemHover (item: CascadingMenuItem): void {\n if (hasActiveParentSearch.value) {\n return;\n }\n\n const wasActive = activeItemId.value === item.id;\n\n activeItemId.value = item.id;\n childSearchQuery.value = '';\n\n if (item.subList && !wasActive) {\n emit('item-expand', item.id);\n }\n}\n\nfunction handleItemClick (item: CascadingMenuItem): void {\n if (item.subList) {\n activeItemId.value = item.id;\n\n return;\n }\n\n emit('item-click', item.id);\n}\n\nfunction handleListItemClick (parentId: string, listItem: CascadingListItem): void {\n if (listItem.disabled) {\n return;\n }\n\n emit('select', { itemId: parentId, subItemId: listItem.id });\n}\n\nfunction handleChildListItemClick (listItem: CascadingListItem): void {\n if (!activeItem.value) {\n return;\n }\n\n handleListItemClick(activeItem.value.id, listItem);\n}\n\nfunction handleParentSearchUpdate (value: string | number): void {\n const next = String(value);\n\n parentSearchQuery.value = next;\n activeItemId.value = null;\n childSearchQuery.value = '';\n emit('update:search-query', next);\n}\n\nfunction handleChildSearchUpdate (value: string | number): void {\n childSearchQuery.value = String(value);\n}\n\nfunction isInsideAnyLayer (target: Node | null): boolean {\n if (!target) {\n return false;\n }\n\n if (menuRef.value?.contains(target) || listRef.value?.contains(target)) {\n return true;\n }\n\n const { anchor } = props;\n\n if (anchor && 'contains' in anchor && typeof (anchor as Node).contains === 'function') {\n return (anchor as Node).contains(target);\n }\n\n return false;\n}\n\nfunction handleDocumentPointerDown (event: PointerEvent): void {\n if (!props.open) {\n return;\n }\n\n if (isInsideAnyLayer(event.target as Node | null)) {\n return;\n }\n\n emit('update:open', false);\n}\n\nfunction handleWindowKeyDown (event: KeyboardEvent): void {\n if (!props.open || event.key !== 'Escape') {\n return;\n }\n\n if (parentSearchQuery.value || childSearchQuery.value) {\n event.stopPropagation();\n parentSearchQuery.value = '';\n childSearchQuery.value = '';\n activeItemId.value = null;\n\n return;\n }\n\n emit('update:open', false);\n}\n\nwatch(() => props.open, isOpen => {\n if (isOpen) {\n document.addEventListener('pointerdown', handleDocumentPointerDown, true);\n window.addEventListener('keydown', handleWindowKeyDown);\n } else {\n document.removeEventListener('pointerdown', handleDocumentPointerDown, true);\n window.removeEventListener('keydown', handleWindowKeyDown);\n activeItemId.value = null;\n childSearchQuery.value = '';\n parentSearchQuery.value = '';\n itemEls.clear();\n }\n}, { immediate: true });\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', handleDocumentPointerDown, true);\n window.removeEventListener('keydown', handleWindowKeyDown);\n});\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <div\n v-if=\"open\"\n ref=\"menuRef\"\n class=\"in-cascading-menu\"\n role=\"menu\"\n :data-testid=\"menuTestId\"\n :style=\"[menuFloatingStyles, menuSizeStyle, menuStyle as Record<string, string>]\">\n <div\n v-if=\"searchable\"\n class=\"in-cascading-menu__search\">\n <InBasicTextInput\n :id=\"parentSearchInputId\"\n right-icon-status\n name=\"cascading-menu-search\"\n right-icon-name=\"line-search\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"parentSearchQuery\"\n :placeholder-text=\"searchPlaceholder\"\n @update:model-value=\"handleParentSearchUpdate\" />\n </div>\n\n <div\n class=\"in-cascading-menu__body\"\n :class=\"{ 'is-flat-search': hasActiveParentSearch }\">\n <div\n v-if=\"loading\"\n class=\"in-cascading-menu__state in-cascading-menu__state--loading\">\n <Icon\n class=\"in-cascading-menu__spinner-icon\"\n name=\"line-spinner\"\n :size=\"24\" />\n <span\n v-if=\"loadingText\"\n class=\"in-cascading-menu__state-text\">\n {{ loadingText }}\n </span>\n </div>\n\n <template v-else-if=\"hasActiveParentSearch\">\n <div\n v-if=\"flatSectionsEmpty\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-no-search-result\"\n :size=\"40\" />\n <span class=\"in-cascading-menu__state-text\">{{ emptySearchText }}</span>\n </div>\n <div\n v-else\n class=\"in-cascading-menu__flat\">\n <section\n v-for=\"section in flatSections\"\n :key=\"section.parentId\"\n class=\"in-cascading-menu__flat-group\">\n <h4 class=\"in-cascading-menu__group-header\">\n {{ section.parentLabel }}\n </h4>\n <button\n v-for=\"listItem in section.items\"\n :key=\"`${section.parentId}-${listItem.id}`\"\n class=\"in-cascading-menu__list-item\"\n role=\"menuitem\"\n type=\"button\"\n :class=\"{\n 'is-disabled': listItem.disabled,\n 'is-selected': selectedSubItemId === listItem.id,\n }\"\n :data-testid=\"listItem.testId\"\n :disabled=\"listItem.disabled\"\n @click=\"handleListItemClick(section.parentId, listItem)\">\n <span class=\"in-cascading-menu__list-item-content\">\n <span class=\"in-cascading-menu__list-item-label\">{{ listItem.label }}</span>\n <span\n v-if=\"listItem.subtitle\"\n class=\"in-cascading-menu__list-item-subtitle\">\n {{ listItem.subtitle }}\n </span>\n </span>\n <span\n v-if=\"listItem.meta\"\n class=\"in-cascading-menu__list-item-meta\">\n {{ listItem.meta }}\n </span>\n </button>\n </section>\n </div>\n </template>\n\n <template v-else>\n <template\n v-for=\"(entry, index) in normalizedEntries\"\n :key=\"`e-${index}`\">\n <h4\n v-if=\"entry.type === 'group-header'\"\n class=\"in-cascading-menu__group-header\">\n {{ entry.label }}\n </h4>\n <button\n v-else\n :ref=\"el => registerItemEl(entry.item.id, el)\"\n class=\"in-cascading-menu__item\"\n role=\"menuitem\"\n type=\"button\"\n :class=\"{\n 'is-active': activeItemId === entry.item.id,\n 'is-selected': selectedItemId === entry.item.id,\n }\"\n :data-item-id=\"entry.item.id\"\n :data-testid=\"entry.item.testId\"\n @click=\"handleItemClick(entry.item)\"\n @focus=\"handleItemHover(entry.item)\"\n @mouseenter=\"handleItemHover(entry.item)\">\n <span class=\"in-cascading-menu__item-label\">{{ entry.item.label }}</span>\n <Icon\n v-if=\"entry.item.hasChildren || entry.item.subList\"\n class=\"in-cascading-menu__item-chevron\"\n name=\"line-chevron-small-down\"\n :size=\"24\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <div\n v-if=\"showChildPanel && activeSubList\"\n ref=\"listRef\"\n class=\"in-cascading-list\"\n role=\"dialog\"\n :data-testid=\"listTestId ?? activeSubList.testId\"\n :style=\"[listFloatingStyles, listSizeStyle, listStyle as Record<string, string>]\">\n <div\n v-if=\"activeSubList.searchable\"\n class=\"in-cascading-menu__search\">\n <InBasicTextInput\n :id=\"childSearchInputId\"\n right-icon-status\n name=\"cascading-menu-child-search\"\n right-icon-name=\"line-search\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"childSearchQuery\"\n :placeholder-text=\"activeSubList.searchPlaceholder || 'Search'\"\n @update:model-value=\"handleChildSearchUpdate\" />\n </div>\n <div class=\"in-cascading-list__body\">\n <div\n v-if=\"activeSubList.loading\"\n class=\"in-cascading-menu__state in-cascading-menu__state--loading\">\n <Icon\n class=\"in-cascading-menu__spinner-icon\"\n name=\"line-spinner\"\n :size=\"24\" />\n <span\n v-if=\"loadingText\"\n class=\"in-cascading-menu__state-text\">\n {{ loadingText }}\n </span>\n </div>\n <div\n v-else-if=\"activeSubList.error\"\n class=\"in-cascading-menu__state in-cascading-menu__state--error\">\n <span class=\"in-cascading-menu__state-text in-cascading-menu__state-text--error\">\n {{ activeSubList.error }}\n </span>\n </div>\n <div\n v-else-if=\"childListItems.length === 0 && childSearchQuery\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-no-search-result\"\n :size=\"40\" />\n <span class=\"in-cascading-menu__state-text\">\n {{ activeSubList.noResultText || 'No Search Result' }}\n </span>\n </div>\n <div\n v-else-if=\"childListItems.length === 0\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-empty-box\"\n :size=\"40\" />\n <span\n v-if=\"activeSubList.emptyText\"\n class=\"in-cascading-menu__state-text\">\n {{ activeSubList.emptyText }}\n </span>\n </div>\n <ul\n v-else\n class=\"in-cascading-list__items\"\n role=\"listbox\">\n <li\n v-for=\"listItem in childListItems\"\n :key=\"listItem.id\"\n class=\"in-cascading-menu__list-item\"\n role=\"option\"\n :class=\"{\n 'is-disabled': listItem.disabled,\n 'is-selected': selectedSubItemId === listItem.id,\n }\"\n :data-testid=\"listItem.testId\"\n @click=\"handleChildListItemClick(listItem)\"\n @mousedown.prevent>\n <span class=\"in-cascading-menu__list-item-content\">\n <span class=\"in-cascading-menu__list-item-label\">{{ listItem.label }}</span>\n <span\n v-if=\"listItem.subtitle\"\n class=\"in-cascading-menu__list-item-subtitle\">\n {{ listItem.subtitle }}\n </span>\n </span>\n <span\n v-if=\"listItem.meta\"\n class=\"in-cascading-menu__list-item-meta\">\n {{ listItem.meta }}\n </span>\n </li>\n </ul>\n </div>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" scoped>\n$elevation: 0 4px 12px 0 rgba(57, 57, 57, 0.15);\n$radius: 4px;\n$text-default: #292929;\n$text-muted: #666666;\n$primary: #0a2ecc;\n$selected-bg: #f1f3fe;\n$selected-bg-hover: #dae1fb;\n$hover-bg: #f5f5f5;\n$error: #dc2a2a;\n$focus-shadow: #b5c1f1;\n\n.in-cascading-menu {\n z-index: 2147483647;\n background: #ffffff;\n border-radius: $radius;\n box-shadow: $elevation;\n font-family: 'Figtree', sans-serif;\n color: $text-default;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n &__search {\n flex-shrink: 0;\n padding: 8px;\n background: #ffffff;\n position: sticky;\n top: 0;\n z-index: 1;\n\n :deep(.in-basic-text-input-wrapper__input-field) {\n box-shadow: none !important;\n\n &:hover {\n border-color: #dcdee6 !important;\n }\n\n &:focus,\n &:focus-within,\n &:focus-visible {\n border-color: $primary !important;\n }\n }\n\n :deep(.in-basic-text-input-wrapper:focus-within .in-basic-text-input-wrapper__input-field) {\n border-color: $primary !important;\n }\n }\n\n &__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 8px 0;\n\n &.is-flat-search {\n padding-top: 0;\n }\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(57, 57, 57, 0.25);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(57, 57, 57, 0.4);\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n scrollbar-width: thin;\n scrollbar-color: rgba(57, 57, 57, 0.25) transparent;\n }\n\n &__item {\n display: flex;\n align-items: center;\n width: 100%;\n border: none;\n background: transparent;\n padding: var(--in-cascading-menu-item-padding, 4px 16px);\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n color: $text-default;\n transition:\n background 0.15s,\n color 0.15s;\n\n &:hover,\n &.is-active {\n background: $hover-bg;\n }\n\n &.is-selected,\n &.is-selected:hover,\n &.is-selected.is-active {\n color: $primary;\n }\n\n &.is-selected {\n background: $selected-bg;\n }\n\n &.is-selected:hover,\n &.is-selected.is-active {\n background: $selected-bg-hover;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px $focus-shadow;\n }\n }\n\n &__item.is-selected &__item-label,\n &__item.is-selected &__item-chevron {\n color: $primary !important;\n }\n\n &__item-label {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__item-chevron {\n flex: 0 0 auto;\n margin-left: 8px;\n margin-right: -8px;\n transform: rotate(-90deg);\n color: #666 !important;\n }\n\n &__group-header {\n margin: 0;\n padding: 8px 16px;\n background: #ffffff;\n font-family: 'Figtree', sans-serif;\n font-size: 13px;\n font-weight: 600;\n color: $text-muted;\n line-height: 20px;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n &__flat {\n display: flex;\n flex-direction: column;\n }\n\n &__flat-group + &__flat-group {\n padding-top: 0;\n }\n\n &__list-item {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 12px;\n width: 100%;\n border: none;\n background: transparent;\n padding: var(--in-cascading-menu-list-item-padding, 4px 16px);\n cursor: pointer;\n font-family: inherit;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n color: $text-default;\n text-align: left;\n transition: background 0.15s;\n\n &:hover:not(.is-disabled):not(:disabled) {\n background: $hover-bg;\n }\n\n &.is-selected,\n &.is-selected:hover:not(.is-disabled):not(:disabled) {\n color: $primary;\n }\n\n &.is-selected {\n background: $selected-bg;\n }\n\n &.is-selected:hover:not(.is-disabled):not(:disabled) {\n background: $selected-bg-hover;\n }\n\n &.is-disabled,\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px $focus-shadow;\n }\n }\n\n &__list-item.is-selected &__list-item-content,\n &__list-item.is-selected &__list-item-label,\n &__list-item.is-selected &__list-item-meta,\n &__list-item.is-selected &__list-item-subtitle {\n color: $primary;\n }\n\n &__list-item-content {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n &__list-item-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__list-item-meta {\n flex: 0 0 auto;\n font-size: 13px;\n line-height: 20px;\n color: inherit;\n opacity: 0.75;\n white-space: nowrap;\n }\n\n .is-selected .in-cascading-menu__list-item-meta {\n opacity: 1;\n }\n\n &__list-item-subtitle {\n font-size: 13px;\n line-height: 16px;\n color: $text-muted;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .is-selected .in-cascading-menu__list-item-subtitle {\n color: $primary;\n opacity: 0.85;\n }\n\n &__state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: $text-muted;\n\n :deep(svg) {\n color: $text-muted;\n fill: $text-muted;\n }\n }\n\n &__state-text {\n font-family: 'Figtree', sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: $text-muted;\n line-height: 20px;\n text-align: center;\n\n &--error {\n color: $error;\n }\n }\n\n &__state--error {\n :deep(svg) {\n color: $error;\n fill: $error;\n }\n }\n\n &__spinner-icon {\n animation: in-cascading-menu-spin 0.8s linear infinite;\n }\n}\n\n.in-cascading-list {\n z-index: 2147483647;\n background: #ffffff;\n border-radius: $radius;\n box-shadow: $elevation;\n display: flex;\n flex-direction: column;\n font-family: 'Figtree', sans-serif;\n color: $text-default;\n overflow: hidden;\n\n &__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 8px 0;\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(57, 57, 57, 0.25);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(57, 57, 57, 0.4);\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n scrollbar-width: thin;\n scrollbar-color: rgba(57, 57, 57, 0.25) transparent;\n }\n\n &__items {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n}\n\n@keyframes in-cascading-menu-spin {\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","export function useUid (prefix = 'ui'): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 10)}`;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { useUid } from '@/utils/uid';\nimport styles from './SearchInput.module.scss';\n\nexport interface SearchInputProps {\n modelValue?: string;\n placeholder?: string;\n size?: 'small' | 'medium';\n clearable?: boolean;\n id?: string;\n name?: string;\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'escape'): void;\n (e: 'clear'): void;\n}\n\nconst props = withDefaults(defineProps<SearchInputProps>(), {\n modelValue: '',\n placeholder: 'Search',\n size: 'small',\n clearable: true,\n id: '',\n name: '',\n});\n\nconst emit = defineEmits<Emits>();\nconst autoUid = useUid('search');\nconst fieldId = computed(() => props.id || autoUid);\nconst fieldName = computed(() => props.name || fieldId.value);\nconst inputRef = ref<InstanceType<typeof InBasicTextInput> | null>(null);\nconst hasValue = computed(() => props.modelValue.length > 0);\n// eslint-disable-next-line @cspell/spellchecker\nconst clearIconName: IconNames = 'line-close-netural';\nconst rightIcon = computed<IconNames>(() => (\n props.clearable && hasValue.value ? clearIconName : 'line-search'\n));\n\nfunction onUpdate (value: string | number): void {\n emit('update:modelValue', String(value));\n}\n\nfunction onKeydown (event: KeyboardEvent): void {\n if (event.key !== 'Escape') {\n return;\n }\n\n event.stopPropagation();\n\n if (props.modelValue) {\n emit('update:modelValue', '');\n emit('clear');\n\n return;\n }\n\n emit('escape');\n}\n\nfunction onRightIconClick (): void {\n if (!props.clearable || !hasValue.value) {\n return;\n }\n\n emit('update:modelValue', '');\n emit('clear');\n}\n\nfunction focus (): void {\n const native = inputRef.value?.$el?.querySelector('input');\n\n native?.focus();\n}\n\ndefineExpose({ focus });\n</script>\n\n<template>\n <div\n :class=\"[styles.root, size === 'medium' && styles.sizeMedium]\"\n @keydown=\"onKeydown\">\n <InBasicTextInput\n :id=\"fieldId\"\n ref=\"inputRef\"\n right-icon-status\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"modelValue\"\n :name=\"fieldName\"\n :placeholder-text=\"placeholder\"\n :right-icon-name=\"rightIcon\"\n @right-icon-click=\"onRightIconClick\"\n @update:model-value=\"onUpdate\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport styles from './Typography.module.scss';\n\nexport type TypographyVariant =\n | 'heading'\n | 'title'\n | 'body'\n | 'body-default'\n | 'body-muted'\n | 'label'\n | 'detail'\n | 'detail-muted'\n | 'detail-danger'\n | 'section';\n\nexport interface TypographyProps {\n variant?: TypographyVariant;\n as?: string;\n}\n\nconst variantClass: Record<TypographyVariant, string> = {\n heading: styles.heading,\n title: styles.title,\n body: styles.body,\n 'body-default': styles.bodyDefault,\n 'body-muted': styles.bodyMuted,\n label: styles.label,\n detail: styles.detail,\n 'detail-muted': styles.detailMuted,\n 'detail-danger': styles.detailDanger,\n section: styles.section,\n};\n\nwithDefaults(defineProps<TypographyProps>(), {\n variant: 'body',\n as: 'span',\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"[styles.root, variantClass[variant]]\">\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport { Typography } from '@/components/Typography';\nimport { useUid } from '@/utils/uid';\nimport styles from './SelectField.module.scss';\n\nexport interface SelectFieldProps {\n label?: string;\n placeholder?: string;\n value?: string;\n isOpen?: boolean;\n error?: string;\n helperText?: string;\n disabled?: boolean;\n}\n\ninterface Emits {\n (e: 'toggle'): void;\n}\n\nconst props = withDefaults(defineProps<SelectFieldProps>(), {\n label: '',\n placeholder: '',\n value: '',\n isOpen: false,\n error: '',\n helperText: '',\n disabled: false,\n});\n\nconst emit = defineEmits<Emits>();\nconst uid = useUid('select-field');\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst showError = computed(() => Boolean(props.error));\nconst showPlaceholder = computed(() => !props.value);\nconst displayText = computed(() => props.value || props.placeholder);\n\nfunction handleClick (): void {\n if (props.disabled) {\n return;\n }\n\n emit('toggle');\n}\n\ndefineExpose({ triggerRef });\n</script>\n\n<template>\n <fieldset :class=\"styles.root\">\n <Typography\n v-if=\"label\"\n as=\"label\"\n variant=\"label\"\n :for=\"`${uid}-trigger`\">\n {{ label }}\n </Typography>\n <button\n :id=\"`${uid}-trigger`\"\n ref=\"triggerRef\"\n type=\"button\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-invalid=\"showError\"\n :class=\"[\n styles.trigger,\n {\n [styles.isOpen]: isOpen,\n [styles.hasError]: showError,\n [styles.isDisabled]: disabled,\n },\n ]\"\n :disabled=\"disabled\"\n @click=\"handleClick\">\n <Typography\n :class=\"styles.triggerText\"\n :variant=\"showPlaceholder ? 'body-muted' : 'body-default'\">\n {{ displayText }}\n </Typography>\n <span :class=\"[styles.chevron, { [styles.isOpen]: isOpen }]\">\n <Icon\n color=\"#666666\"\n name=\"dropdown-arrow\"\n :size=\"24\" />\n </span>\n </button>\n <div\n v-if=\"showError\"\n role=\"alert\"\n :class=\"styles.message\">\n <Icon\n name=\"filled-error-box-colored\"\n :size=\"16\" />\n <Typography variant=\"label\">\n {{ error }}\n </Typography>\n </div>\n <div\n v-else-if=\"helperText\"\n :class=\"styles.message\">\n <Typography variant=\"detail\">\n {{ helperText }}\n </Typography>\n </div>\n </fieldset>\n</template>\n","<script setup lang=\"ts\">\nimport type { Placement, Strategy } from '@floating-ui/vue';\nimport { autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/vue';\nimport { ref, watch, computed, nextTick, onMounted } from 'vue';\nimport { InBox } from '@/components/InBox';\nimport clickOutside from '@/directives/clickOutside';\n\nconst vClickOutside = clickOutside;\n\ninterface PopoverProps {\n modelValue?: boolean;\n align?: 'left' | 'center' | 'right' | 'left-side' | 'right-side';\n position?: 'bottom' | 'top';\n width?: number;\n positionStrategy?: 'fixed' | 'absolute';\n closeOnClickOutside?: boolean;\n elevated?: boolean;\n // Absolute mode only: opt out of the default `width: 100%` (matching the\n // wrapper). Set when the popover content has its own width and shouldn't\n // be constrained to the trigger element's width.\n fitContent?: boolean;\n gap?: number;\n // CSS selector resolved within the popover wrapper to find the actual measurement anchor.\n // Use when the trigger slot wraps extra chrome (labels, helper text) and the popover should\n // open from a specific child (e.g. just the `<input>`). Defaults to `firstElementChild`.\n anchorSelector?: string;\n}\n\ninterface PopoverEmits {\n (e: 'update:modelValue', value: boolean): void;\n (e: 'open'): void;\n (e: 'close'): void;\n}\n\nconst DEFAULT_GAP = 4;\nconst SHIFT_PADDING = 8;\n\nconst props = withDefaults(defineProps<PopoverProps>(), {\n modelValue: false,\n align: 'left',\n position: 'bottom',\n positionStrategy: 'fixed',\n closeOnClickOutside: false,\n elevated: false,\n fitContent: false,\n gap: DEFAULT_GAP,\n anchorSelector: undefined,\n});\n\nconst emit = defineEmits<PopoverEmits>();\nconst popoverRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\nconst anchorRef = ref<HTMLElement | null>(null);\nconst isOpen = ref(props.modelValue);\n\n// floating-ui measures from this element. Defaults to the trigger root; `anchorSelector` narrows it to a\n// child (e.g. the bare `<input>` inside a labelled trigger) so the popover opens from the field, not the chrome.\nfunction resolveAnchor (): HTMLElement | null {\n const root = popoverRef.value;\n\n if (!root) {\n return null;\n }\n\n const triggerRoot = (root.firstElementChild as HTMLElement | null) ?? root;\n\n if (props.anchorSelector) {\n return triggerRoot.querySelector<HTMLElement>(props.anchorSelector) ?? triggerRoot;\n }\n\n return triggerRoot;\n}\n\n// `position` is the preferred side; `flip()` overrides it when there isn't room. `align` maps to floating-ui\n// alignment (`-start`/`-end`); `*-side` opens the popover beside the trigger with bottom edges aligned.\nconst placement = computed<Placement>(() => {\n if (props.align === 'left-side') {\n return 'left-end';\n }\n\n if (props.align === 'right-side') {\n return 'right-end';\n }\n\n const side = props.position === 'top' ? 'top' : 'bottom';\n\n if (props.align === 'center') {\n return side;\n }\n\n if (props.align === 'right') {\n return `${side}-end`;\n }\n\n return `${side}-start`;\n});\n\nconst strategy = computed<Strategy>(() => (props.positionStrategy === 'fixed' ? 'fixed' : 'absolute'));\nconst middleware = computed(() => [offset(props.gap), flip(), shift({ padding: SHIFT_PADDING })]);\n\nconst { floatingStyles, isPositioned } = useFloating(anchorRef, contentRef, {\n placement,\n strategy,\n middleware,\n whileElementsMounted: autoUpdate,\n});\n\n// Width is independent of placement: absolute mode defaults to the trigger width (`100%`) unless `fitContent`;\n// an explicit `width` always wins. Fixed mode has no implicit width (content sizes itself).\nconst sizeStyle = computed<Record<string, string>>(() => {\n const styles: Record<string, string> = {};\n\n if (props.positionStrategy === 'absolute' && !props.fitContent) {\n styles.width = '100%';\n }\n\n if (props.width) {\n styles.width = `${props.width}px`;\n styles.minWidth = `${props.width}px`;\n }\n\n return styles;\n});\n\nonMounted(() => {\n anchorRef.value = resolveAnchor();\n});\n\nwatch(\n () => props.modelValue,\n newValue => {\n isOpen.value = newValue;\n\n if (newValue) {\n nextTick(() => {\n anchorRef.value = resolveAnchor();\n });\n }\n }\n);\n\nconst toggle = () => {\n isOpen.value = !isOpen.value;\n emit('update:modelValue', isOpen.value);\n\n if (isOpen.value) {\n emit('open');\n nextTick(() => {\n anchorRef.value = resolveAnchor();\n });\n } else {\n emit('close');\n }\n};\n\nconst close = () => {\n isOpen.value = false;\n\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst clickOutsideTarget = computed(() => ({\n handler: close,\n exclude: [popoverRef, contentRef],\n capture: props.closeOnClickOutside,\n}));\n\ndefineExpose({\n isOpen,\n toggle,\n close,\n});\n</script>\n\n<template>\n <div\n ref=\"popoverRef\"\n class=\"popover\">\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :toggle=\"toggle\" />\n <div\n v-if=\"isOpen\"\n ref=\"contentRef\"\n class=\"popover__content\"\n :class=\"{\n 'popover__content--visible': isPositioned,\n 'popover__content--elevated': elevated,\n }\"\n :style=\"[floatingStyles, sizeStyle]\"\n v-click-outside=\"clickOutsideTarget\"\n @click.prevent>\n <InBox>\n <slot />\n </InBox>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.popover {\n position: relative;\n display: inline-block;\n\n &__content {\n z-index: 10000;\n visibility: hidden;\n\n &--visible {\n visibility: visible;\n }\n\n &--elevated {\n background: $overlay_color_background_default;\n border: $border_solid;\n border-radius: $radius_container_medium;\n box-shadow: $shadow_elevation;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { MenuItem } from '../DropdownMenu/types';\nimport { ref, watch, onMounted } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { Popover } from '@/components/Popover';\nimport { Button } from '@/index';\nimport { fuzzySearch } from '@/utils/search';\n\ninterface InDropdownMenuProps {\n modelValue?: string;\n items: MenuItem[];\n searchable?: boolean;\n searchPlaceholder?: string;\n addable?: boolean;\n addButtonText?: string;\n validateAddItem?: (item: string, items: MenuItem[]) => string | null;\n showSelectedIcon?: boolean;\n rotateArrow?: boolean;\n // Used in CSS via v-bind for max-height calculation\n // eslint-disable-next-line vue/no-unused-properties\n menuHeight?: number;\n width?: number;\n mode?: 'primary' | 'smart';\n anchorSelector?: string;\n position?: 'bottom' | 'top';\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'add-error', error: string): void;\n (e: 'item-added', item: MenuItem): void;\n (e: 'select-item', item: MenuItem): void;\n}\n\nconst props = withDefaults(defineProps<InDropdownMenuProps>(), {\n menuHeight: 154,\n searchable: false,\n addable: false,\n modelValue: '',\n searchPlaceholder: 'Search',\n addButtonText: 'Add',\n validateAddItem: () => null,\n showSelectedIcon: false,\n rotateArrow: false,\n mode: 'primary',\n anchorSelector: undefined,\n position: 'bottom',\n});\n\nconst emit = defineEmits<Emits>();\nconst isOpen = ref(false);\nconst selectedItem = ref<MenuItem | null>(null);\nconst searchQuery = ref('');\nconst errorMessage = ref<string | null>(null);\nconst filteredItems = ref<MenuItem[]>([...props.items]);\nconst allItems = ref<MenuItem[]>([...props.items]);\n\nconst handleToggle = () => {\n isOpen.value = !isOpen.value;\n};\n\nconst resetSettings = () => {\n errorMessage.value = null;\n searchQuery.value = '';\n filteredItems.value = [...allItems.value];\n};\n\nwatch(\n () => isOpen.value,\n newValue => {\n if (!newValue) {\n resetSettings();\n }\n }\n);\n\nconst closeMenu = () => {\n isOpen.value = false;\n resetSettings();\n};\n\nconst selectItem = (item: MenuItem) => {\n selectedItem.value = item;\n\n emit('select-item', item);\n emit('update:modelValue', item.value);\n\n closeMenu();\n};\n\nconst addItem = () => {\n const query = searchQuery.value.trim();\n const error = props.validateAddItem(query, allItems.value);\n\n if (error) {\n errorMessage.value = error;\n emit('add-error', error);\n\n return;\n }\n\n const newItem: MenuItem = {\n text: query,\n value: query,\n };\n\n allItems.value.push(newItem);\n resetSettings();\n\n emit('item-added', newItem);\n};\n\nconst onSearch = (value: string | number) => {\n searchQuery.value = String(value);\n\n const results = fuzzySearch<MenuItem>(allItems.value, 'text', searchQuery.value);\n\n filteredItems.value = results;\n};\n\nconst onFocusSearch = () => {\n errorMessage.value = null;\n};\n\nonMounted(() => {\n if (props.modelValue) {\n const defaultItem = allItems.value.find(item => item.value === props.modelValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (selectedItem.value?.value !== newValue) {\n const defaultItem = allItems.value.find(item => item.value === newValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n } else {\n // Clear selection if no matching item found\n selectedItem.value = null;\n }\n }\n }\n);\n\nwatch(\n () => props.items,\n newItems => {\n allItems.value = [...newItems];\n filteredItems.value = [...newItems];\n },\n { deep: true }\n);\n\ndefineExpose({\n isOpen,\n toggleMenu: handleToggle,\n closeMenu,\n selectedItem,\n});\n</script>\n\n<template>\n <Popover\n class=\"in-dropdown-menu\"\n position-strategy=\"absolute\"\n :position=\"props.position\"\n :anchor-selector=\"anchorSelector\"\n :class=\"{\n 'in-dropdown-menu--open': isOpen,\n 'in-dropdown-menu--rotate-arrow': props.rotateArrow,\n [`in-dropdown-menu--${props.mode}`]: true,\n }\"\n :width=\"props.width\"\n v-model=\"isOpen\">\n <template #trigger=\"{ isOpen: popoverIsOpen }\">\n <slot\n name=\"trigger\"\n :is-open=\"popoverIsOpen\"\n :toggle=\"handleToggle\" />\n </template>\n\n <div\n class=\"in-dropdown-menu__menu\"\n :class=\"[`in-dropdown-menu__menu--${props.mode}`]\"\n @click.prevent>\n <div\n v-if=\"searchable\"\n class=\"in-dropdown-menu__search-container\">\n <InBasicTextInput\n id=\"dropdown-search-input\"\n right-icon-status\n name=\"dropdown-search-input\"\n right-icon-name=\"line-search\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :placeholder-text=\"searchPlaceholder\"\n :state-message=\"errorMessage || ''\"\n :states=\"errorMessage ? 'error' : 'default'\"\n v-model=\"searchQuery\"\n @focus=\"onFocusSearch\"\n @input=\"onSearch\" />\n <Button\n v-if=\"addable\"\n color=\"primary\"\n left-icon-name=\"line-plus-netural\"\n size=\"small\"\n variant=\"text\"\n :label=\"addButtonText\"\n @click=\"addItem\" />\n </div>\n <slot\n v-if=\"filteredItems.length === 0 && searchable\"\n name=\"no-results\" />\n <ul\n v-else\n class=\"in-dropdown-menu__item-container\">\n <li\n v-for=\"(item, index) in filteredItems\"\n :key=\"`${item.value}-${index}`\"\n class=\"in-dropdown-menu__item\">\n <template v-if=\"$slots.item\">\n <div\n class=\"in-dropdown-menu__item-content\"\n :class=\"[\n {\n 'in-dropdown-menu__item--active':\n selectedItem && item.value === selectedItem.value,\n },\n ]\"\n @click=\"selectItem(item)\">\n <slot\n name=\"item\"\n :is-selected=\"selectedItem?.value === item.value\"\n :item=\"item\" />\n </div>\n </template>\n <Button\n v-else\n fill\n class=\"in-dropdown-menu__item-button\"\n color=\"secondary\"\n size=\"small\"\n variant=\"ghost\"\n :class=\"[\n {\n 'in-dropdown-menu__item-button--active':\n selectedItem && item.value === selectedItem.value,\n },\n ]\"\n :label=\"item.text\"\n :right-icon-name=\"\n props.showSelectedIcon && selectedItem?.value === item.value\n ? 'line-check-natural'\n : undefined\n \"\n @click=\"selectItem(item)\" />\n </li>\n </ul>\n </div>\n </Popover>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-dropdown-menu__menu {\n display: flex;\n flex-direction: column;\n background-color: $color_blackAndWhite_white;\n box-shadow: 0px 4px 12px 0px rgba(57, 57, 57, 0.15);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.in-dropdown-menu__search-container {\n border-bottom: 1px solid $color_neutral_100;\n flex-shrink: 0;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.in-dropdown-menu__item-container {\n all: unset;\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: auto;\n flex-grow: 0;\n list-style: none;\n padding: 8px 0;\n margin: 0;\n max-height: v-bind('`${props.menuHeight}px`');\n}\n\n.in-dropdown-menu__item {\n all: unset;\n list-style: none;\n display: block;\n}\n\n.in-dropdown-menu__item-button,\n.in-dropdown-menu__item-content {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 4px 8px !important;\n border-radius: 0 !important;\n min-height: 26px;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s;\n color: $color_gray_800;\n font-family: 'Figtree', sans-serif;\n\n &:hover {\n background-color: $color_gray_100 !important;\n }\n}\n\n.in-dropdown-menu__item-button {\n width: 100%;\n justify-content: flex-start;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover {\n background-color: $color_gray_100 !important;\n }\n}\n\n.in-dropdown-menu__menu--primary {\n .in-dropdown-menu__item--active,\n .in-dropdown-menu__item-button--active {\n background-color: #F1F3FE !important;\n color: #0A2ECC !important;\n\n :deep(svg) {\n fill: #0A2ECC;\n }\n }\n}\n\n.in-dropdown-menu__menu--smart {\n .in-dropdown-menu__item--active,\n .in-dropdown-menu__item-button--active {\n background-color: #F0EBFA !important;\n color: #5F24AF !important;\n\n :deep(svg) {\n fill: #5F24AF;\n }\n }\n}\n\n/* Arrow rotation for custom Icon triggers (class=\"dropdown-arrow\") */\n.in-dropdown-menu :deep(.dropdown-arrow) {\n transition: transform 0.2s ease;\n}\n\n.in-dropdown-menu--open :deep(.dropdown-arrow) {\n transform: rotate(180deg);\n}\n\n/* Arrow rotation for InBasicTextInput triggers (opt-in via rotateArrow prop) */\n.in-dropdown-menu--rotate-arrow {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__icon-right) {\n transition: transform 0.2s ease;\n }\n\n &.in-dropdown-menu--open {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__icon-right) {\n transform: rotate(180deg);\n }\n }\n}\n\n/* Focus state for InBasicTextInput triggers when dropdown is open */\n.in-dropdown-menu--open.in-dropdown-menu--primary {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__input-field) {\n border-color: $color_primary_500;\n box-shadow: $shadow_primary;\n }\n}\n\n.in-dropdown-menu--open.in-dropdown-menu--smart {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__input-field) {\n border-color: $color_purple_500;\n box-shadow: $shadow_create;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\n\nexport interface TabItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface InTabsProps {\n tabs: TabItem[];\n modelValue?: string;\n disabled?: boolean;\n}\n\ninterface InTabsEmits {\n (e: 'update:modelValue', value: string): void;\n (e: 'change', value: string): void;\n}\n\nconst props = withDefaults(defineProps<InTabsProps>(), {\n modelValue: '',\n disabled: false,\n});\n\nconst emit = defineEmits<InTabsEmits>();\nconst selectedValue = ref<string>(props.modelValue || (props.tabs.length > 0 ? props.tabs[0].value : ''));\n\nconst selectTab = (tab: TabItem) => {\n if (props.disabled || tab.disabled) {\n return;\n }\n\n selectedValue.value = tab.value;\n emit('update:modelValue', tab.value);\n emit('change', tab.value);\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (newValue !== undefined && newValue !== selectedValue.value) {\n selectedValue.value = newValue;\n }\n }\n);\n\nwatch(\n () => props.tabs,\n newTabs => {\n if (newTabs.length > 0 && !newTabs.some(tab => tab.value === selectedValue.value)) {\n selectedValue.value = newTabs[0].value;\n emit('update:modelValue', newTabs[0].value);\n }\n },\n { deep: true }\n);\n</script>\n\n<template>\n <div class=\"in-tabs\">\n <button\n v-for=\"(tab, index) in tabs\"\n :key=\"`${tab.value}-${index}`\"\n class=\"in-tabs__tab\"\n :class=\"[\n {\n 'in-tabs__tab--active': selectedValue === tab.value,\n },\n ]\"\n :data-value=\"tab.value\"\n :disabled=\"disabled || tab.disabled\"\n @click=\"selectTab(tab)\">\n {{ tab.label }}\n </button>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-tabs {\n display: flex;\n align-items: flex-start;\n background-color: transparent;\n height: 34px;\n gap: 0;\n border-bottom: 1px solid #dcdee6;\n border-top: 1px solid #dcdee6;\n width: 100%;\n position: relative;\n\n &__tab {\n list-style-type: none;\n font-family: Figtree, sans-serif;\n font-weight: 400;\n font-size: 13px;\n line-height: 16px;\n letter-spacing: 0px;\n color: #5d6980;\n text-decoration: none;\n cursor: pointer;\n background: transparent;\n border: none;\n border-top: 1px solid transparent;\n border-right: 1px solid #dcdee6;\n padding: 0 16px;\n height: 34px;\n white-space: nowrap;\n transition: color 0.2s, border-color 0.2s;\n position: relative;\n margin-left: -1px;\n margin-top: -1px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:hover:not(:disabled) {\n color: #0a2ecc;\n }\n\n &--active {\n color: #0a2ecc;\n border-top: 2px solid #0a2ecc;\n position: relative;\n z-index: 1;\n padding: 0 16px 0px;\n height: 34px;\n align-items: center;\n margin-top: -1px;\n padding-top: 1px;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0px;\n left: 1px;\n right: 0;\n height: 1px;\n background-color: #ffffff;\n z-index: 2;\n }\n\n &:first-child::after {\n left: 0;\n }\n }\n\n &:disabled {\n pointer-events: none;\n color: #91949f;\n cursor: not-allowed;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref, computed, withDefaults, defineProps, defineEmits } from 'vue';\nimport styles from './InTextArea.module.scss';\n\nexport interface InTextAreaProps {\n id: string;\n name: string;\n modelValue: string;\n label?: string;\n withLabel?: boolean;\n placeholder: string;\n disabled?: boolean;\n invalid?: boolean;\n invalidMessage?: string;\n theme?: 'grey' | 'white';\n type?: 'default' | 'smart';\n rowLength?: number;\n preventXss?: boolean;\n maxLength?: number;\n width?: string;\n height?: string;\n padding?: string;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nconst props = withDefaults(defineProps<InTextAreaProps>(), {\n label: '',\n withLabel: true,\n disabled: false,\n invalid: false,\n invalidMessage: '',\n theme: 'grey',\n type: 'default',\n rowLength: 2,\n preventXss: true,\n});\n\nconst textareaStyle = computed(() => {\n const style: Record<string, string> = {};\n\n if (props.width) {\n style.width = props.width;\n }\n\n if (props.height) {\n style.height = props.height;\n }\n\n if (props.padding) {\n style.padding = props.padding;\n }\n\n if (props.resize) {\n style.resize = props.resize;\n }\n\n return style;\n});\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'keyup', event: KeyboardEvent): void;\n (e: 'keypress', event: KeyboardEvent): void;\n (e: 'click', event: MouseEvent): void;\n (e: 'cut', event: ClipboardEvent): void;\n (e: 'paste', event: ClipboardEvent): void;\n (e: 'blur', event: FocusEvent): void;\n}\n\nconst emit = defineEmits<Emits>();\nconst textareaRef = ref<HTMLTextAreaElement>();\n\nconst preventXSS = (html = '') => {\n if (typeof html === 'string') {\n return html.replace(/<\\/style>/gi, '')\n .replace(/<(.*?) on(.*?)=['\"](.*?)>/gi, '')\n .replace(/(<meta |<style|<\\/*script)(.*?)>/gi, '')\n .replace(/(<([^>]+)>)/ig, '')\n .replace(/<(.*?) (href|src)=\"j(.*)a(.*)v(.*)a(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*):(.*?)>/gi, '');\n }\n\n return html;\n};\n\nconst computedValue = computed(() => {\n if (props.preventXss) {\n return preventXSS(props.modelValue);\n }\n\n return props.modelValue;\n});\n\nconst handleKeyup = (event: KeyboardEvent) => {\n fixValue();\n emit('keyup', event);\n};\n\nconst handleKeypress = (event: KeyboardEvent) => {\n fixValue();\n emit('keypress', event);\n};\n\nconst handleClick = (event: MouseEvent) => {\n fixValue();\n emit('click', event);\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n\n fixValue();\n emit('update:modelValue', target.value);\n};\n\nconst handleCut = (event: ClipboardEvent) => {\n fixValue();\n emit('cut', event);\n};\n\nconst handlePaste = (event: ClipboardEvent) => {\n fixValue();\n emit('paste', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n fixValue();\n emit('blur', event);\n};\n\nconst fixValue = () => {\n if (props.preventXss && textareaRef.value) {\n textareaRef.value.value = preventXSS(textareaRef.value.value);\n }\n};\n\ndefineExpose({\n textareaRef,\n});\n</script>\n\n<template>\n <fieldset\n :class=\"[\n styles['in-form-item'],\n styles['in-textarea-wrapper'],\n { [styles['in-form-item_invalid']]: invalid },\n ]\">\n <label\n v-if=\"withLabel\"\n :class=\"[\n styles['in-textarea-wrapper__label'],\n { [styles['in-textarea-wrapper__label_disable']]: disabled },\n ]\"\n :for=\"id\">\n {{ label }}\n </label>\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n :class=\"[\n styles['in-textarea-wrapper__textarea'],\n { [styles['in-textarea-wrapper__textarea_disable']]: disabled },\n { [styles['in-textarea-wrapper__textarea_smart']]: type === 'smart' },\n styles[`in-textarea-wrapper__textarea_${theme}`],\n ]\"\n :disabled=\"disabled\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :rows=\"rowLength\"\n :style=\"textareaStyle\"\n :value=\"computedValue\"\n @blur=\"handleBlur\"\n @click=\"handleClick\"\n @cut=\"handleCut\"\n @input=\"handleInput\"\n @keypress=\"handleKeypress\"\n @keyup=\"handleKeyup\"\n @paste=\"handlePaste\" />\n <p\n v-if=\"invalid\"\n :class=\"[styles['in-textarea-wrapper__error-message']]\">\n {{ invalidMessage }}\n </p>\n </fieldset>\n</template>\n","<script setup lang=\"ts\">\ninterface InRadioButtonProps {\n id: string;\n name: string;\n value: string | number | boolean;\n selected: string | number | boolean;\n label?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<InRadioButtonProps>(), {\n label: '',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [value: string | number | boolean];\n}>();\n\nconst onClick = () => {\n if (!props.disabled) {\n emit('click', props.value);\n }\n};\n</script>\n\n<template>\n <fieldset class=\"in-form-item in-radio-button-wrapper\">\n <input\n :id=\"id\"\n class=\"in-radio-button-wrapper__input\"\n type=\"radio\"\n :checked=\"value === selected\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @click=\"onClick\">\n <label\n class=\"in-radio-button-wrapper__label\"\n :class=\"{ 'in-radio-button-wrapper__label_disable': disabled }\"\n :for=\"id\">\n {{ label }}\n </label>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n$color-base-4: #ffffff;\n$color-base-6: #dcdee6;\n$color-base-7: #0a2ecc;\n$color-base-36: #91949f;\n\n.in-radio-button-wrapper {\n border: none;\n padding: 0;\n margin: 0;\n display: inline-flex;\n align-items: center;\n\n &__input:not(:checked),\n &__input:checked {\n opacity: 0;\n position: absolute;\n margin: 0;\n z-index: -1;\n overflow: hidden;\n left: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n }\n\n &__input ~ &__label {\n position: relative;\n cursor: pointer;\n padding-left: 28px;\n font-size: 15px;\n line-height: 24px;\n color: #2C3546;\n user-select: none;\n font-family: Figtree;\n font-style: normal;\n font-weight: 400;\n\n &:after,\n &:before {\n position: absolute;\n content: '';\n border-radius: 50%;\n transition: all 0.2s ease;\n }\n\n &:before {\n width: 6px;\n height: 6px;\n top: 50%;\n left: 7px;\n transform: translateY(-50%);\n background-color: $color-base-4;\n }\n\n &:after {\n width: 20px;\n height: 20px;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n }\n }\n\n &__input:not(:checked) ~ &__label {\n &:before {\n transform: translateY(-50%) scale(0);\n }\n\n &:after {\n border: 1px solid $color-base-6;\n }\n }\n\n &__input:checked ~ &__label {\n &:before {\n z-index: 1;\n border: 1px solid $color-base-4;\n background-color: $color-base-4;\n transform: translateY(-50%) scale(1);\n }\n\n &:after {\n border: 1px solid $color-base-7;\n background-color: $color-base-7;\n }\n }\n\n &__input:not(:checked) ~ &__label_disable {\n &:after {\n background-color: $color-base-6 !important;\n }\n }\n\n &__input:checked ~ &__label_disable {\n &:before {\n border-color: $color-base-36 !important;\n background-color: $color-base-36 !important;\n }\n\n &:after {\n border-color: $color-base-6 !important;\n background-color: $color-base-6 !important;\n }\n }\n\n &__label_disable {\n cursor: default !important;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\nconst ACTIVE_ICON_NAME: IconNames = 'line-check-netural';\nconst DISABLE_ICON_NAME: IconNames = 'line-close-netural';\n\ninterface InToggleProps {\n id: string;\n name: string;\n checked?: boolean;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<InToggleProps>(), {\n checked: false,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [checked: boolean];\n 'update:modelValue': [value: boolean];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst iconName = computed(() => (props.checked ? ACTIVE_ICON_NAME : DISABLE_ICON_NAME));\n\nconst onChange = (event: Event) => {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n\n emit('click', newValue);\n emit('update:modelValue', newValue);\n};\n\nconst handleLabelClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n if (inputRef.value && !inputRef.value.disabled) {\n inputRef.value.checked = !inputRef.value.checked;\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }));\n }\n};\n</script>\n\n<template>\n <fieldset\n class=\"in-form-item in-toggle-wrapper\"\n :class=\"[\n {\n 'in-toggle-wrapper_disable': disabled,\n 'in-toggle-wrapper_checked': checked,\n },\n ]\">\n <input\n :id=\"id\"\n ref=\"inputRef\"\n class=\"in-toggle-wrapper__input\"\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :name=\"name\"\n @change=\"onChange\">\n <label\n class=\"in-toggle-wrapper__label\"\n :for=\"id\"\n @click=\"handleLabelClick\">\n <Icon\n :name=\"iconName\"\n :size=\"28\" />\n </label>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n// Color variables from design-tokens/_variables.scss\n$color-base-4: #ffffff;\n$color-base-6: #dcdee6;\n$color-base-7: #0a2ecc;\n$color-base-36: #eff2f4;\n\n.in-toggle-wrapper {\n &__input:not(:checked),\n &__input:checked {\n opacity: 0;\n position: absolute;\n margin: 0;\n z-index: -1;\n overflow: hidden;\n left: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n }\n\n &__input {\n ~ label {\n position: relative;\n display: block;\n width: 52px;\n height: 28px;\n background-color: $color-base-4;\n border-radius: 100px;\n cursor: pointer;\n border: 1px solid $color-base-6;\n pointer-events: auto;\n\n svg {\n position: absolute;\n z-index: 1;\n top: -1px;\n left: 3px;\n fill: $color-base-6;\n transition-property: color, left;\n transition: color 0.3s, left 0.5s;\n transition-timing-function: ease;\n pointer-events: none;\n }\n }\n\n ~ label:after {\n content: '';\n position: absolute;\n top: -1px;\n left: -1px;\n display: block;\n width: 36px;\n height: 28px;\n border-radius: 100px;\n background-color: $color-base-4;\n border: 1px solid $color-base-6;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: all 0.5s ease;\n box-sizing: border-box;\n pointer-events: none;\n }\n }\n\n &_checked {\n label {\n border-color: $color-base-7;\n background: $color-base-7;\n\n svg {\n left: 20px;\n fill: $color-base-7;\n }\n\n &:after {\n left: 16px;\n border-color: $color-base-7;\n background-color: $color-base-4;\n }\n }\n }\n\n &_disable {\n cursor: initial;\n\n label {\n background-color: $color-base-6 !important;\n border-color: $color-base-6 !important;\n cursor: initial !important;\n\n svg {\n fill: $color-base-6 !important;\n }\n\n &:after {\n border-color: $color-base-36 !important;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport Icon from '@/components/Icon/Icon.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './InputButton.module.scss';\n\ninterface InputButtonProps {\n variant: 'solid' | 'ghost' | 'text' | 'outline';\n color: 'primary' | 'subtle-primary' | 'secondary' | 'neutral' | 'danger' | 'warning' | 'smart';\n size?: 'default' | 'small';\n rightIconName?: IconNames;\n iconSize?: 16 | 24;\n loadingStatus?: boolean;\n successStatus?: boolean;\n disabled?: boolean;\n fill?: boolean;\n customClass?: string;\n inputValue?: string;\n inputPlaceholder?: string;\n inputType?: 'text' | 'number';\n}\n\nconst props = withDefaults(defineProps<InputButtonProps>(), {\n loadingStatus: false,\n successStatus: false,\n disabled: false,\n fill: false,\n iconSize: 16,\n size: 'default',\n inputValue: '',\n inputPlaceholder: '',\n inputType: 'text',\n});\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n 'input-change': [value: string];\n}>();\n\nconst onClick = (event: MouseEvent) => {\n if (props.disabled) {\n return;\n }\n\n emit('click', event);\n};\n\nconst handleInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n\n emit('input-change', target.value);\n};\n\nconst handleInputKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n (event.target as HTMLInputElement).blur();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n (event.target as HTMLInputElement).value = props.inputValue || '';\n (event.target as HTMLInputElement).blur();\n }\n};\n\nconst leftIcon = computed<IconNames | undefined>(() => {\n if (props.loadingStatus) {\n return 'loading-circle';\n } else if (props.successStatus) {\n return 'line-check-natural';\n }\n\n return undefined;\n});\n\nconst buttonClasses = computed(() => {\n const classes = [\n styles.inputButton,\n styles[`inputButton__${props.variant}`],\n styles[`inputButton__${props.variant}-${props.color}`],\n styles[`inputButton__size_${props.size}`],\n ];\n\n if (props.fill) {\n classes.push(styles.fill);\n }\n\n if (props.customClass) {\n classes.push(props.customClass);\n }\n\n return classes;\n});\n</script>\n\n<template>\n <button\n :class=\"buttonClasses\"\n :disabled=\"props.disabled\"\n @click=\"onClick\">\n <Icon\n v-if=\"leftIcon\"\n :name=\"leftIcon\"\n :size=\"iconSize\" />\n <input\n :class=\"styles.inputButton__input\"\n :disabled=\"props.disabled\"\n :placeholder=\"inputPlaceholder\"\n :type=\"inputType\"\n :value=\"inputValue\"\n @click.stop\n @input=\"handleInputChange\"\n @keydown=\"handleInputKeydown\">\n <Icon\n v-if=\"rightIconName\"\n :name=\"rightIconName\"\n :size=\"iconSize\" />\n </button>\n</template>\n","export function debounce<Args extends unknown[]> (\n fn: (...args: Args) => unknown,\n wait: number,\n): (...args: Args) => void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n return (...args: Args): void => {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn(...args);\n }, wait);\n };\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nconst dedent = createDedent({});\nexport default dedent;\nfunction createDedent(options) {\n dedent.withOptions = newOptions => createDedent(_objectSpread(_objectSpread({}, options), newOptions));\n return dedent;\n function dedent(strings, ...values) {\n const raw = typeof strings === \"string\" ? [strings] : strings.raw;\n const {\n escapeSpecialCharacters = Array.isArray(strings)\n } = options;\n\n // first, perform interpolation\n let result = \"\";\n for (let i = 0; i < raw.length; i++) {\n let next = raw[i];\n if (escapeSpecialCharacters) {\n // handle escaped newlines, backticks, and interpolation characters\n next = next.replace(/\\\\\\n[ \\t]*/g, \"\").replace(/\\\\`/g, \"`\").replace(/\\\\\\$/g, \"$\").replace(/\\\\\\{/g, \"{\");\n }\n result += next;\n if (i < values.length) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n result += values[i];\n }\n }\n\n // now strip indentation\n const lines = result.split(\"\\n\");\n let mindent = null;\n for (const l of lines) {\n const m = l.match(/^(\\s+)\\S+/);\n if (m) {\n const indent = m[1].length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n }\n if (mindent !== null) {\n const m = mindent; // appease TypeScript\n result = lines\n // https://github.com/typescript-eslint/typescript-eslint/issues/7140\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n .map(l => l[0] === \" \" || l[0] === \"\\t\" ? l.slice(m) : l).join(\"\\n\");\n }\n\n // dedent eats leading and trailing whitespace too\n result = result.trim();\n if (escapeSpecialCharacters) {\n // handle escaped newlines at the end to ensure they don't get stripped too\n result = result.replace(/\\\\n/g, \"\\n\");\n }\n return result;\n }\n}\n","export default \"<!DOCTYPE html>\\n<html lang=\\\"en\\\">\\n\\n<head>\\n <meta charset=\\\"UTF-8\\\">\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">\\n <title>Code Editor</title>\\n <link rel=\\\"stylesheet\\\" data-name=\\\"vs/editor/editor.main\\\" href=\\\"{vsPath}/editor/editor.main.css\\\">\\n <style>\\n html,\\n body,\\n .editor {\\n width: 100%;\\n height: 100%;\\n padding: 0;\\n margin: 0;\\n }\\n </style>\\n</head>\\n\\n<body>\\n <div class=\\\"editor\\\"></div>\\n <script src=\\\"{vsPath}/loader.js\\\"></script>\\n <script>\\n require.config({\\n paths: { 'vs': '{vsPath}' }\\n });\\n window.editorPromise = new Promise((resolve, reject) => {\\n require([\\\"vs/editor/editor.main\\\"], resolve, reject);\\n })\\n </script>\\n</body>\\n\\n</html>\\n\"","import dd from 'dedent';\nimport iframeContent from './iframeContent.html?raw';\n\n/**\n * Builds the iframe document that hosts the Monaco editor.\n *\n * Monaco's `vs` assets (loader.js, editor.main.css, ...) are loaded over HTTP\n * from `{vsBaseUrl}`. As a published library this component cannot serve those\n * assets itself — the consuming app must host them and pass the base URL.\n *\n * @param vsBaseUrl Absolute URL to the served `vs` directory. When omitted it\n * falls back to the current module origin + `/vs` (works when the consumer\n * serves `vs` at its own origin, e.g. skeleton-design-bundle).\n */\nexport function generateIframeContent (vsBaseUrl?: string) {\n const vsPath = vsBaseUrl ?? `${new URL(import.meta.url).origin}/vs`;\n\n return dd(iframeContent.replace(/\\{vsPath\\}/g, vsPath));\n}\n","import type * as Monaco from 'monaco-editor';\n\ntype MonacoApi = typeof import('monaco-editor/esm/vs/editor/editor.api');\n\nexport interface LiquidVariable {\n key: string;\n displayName?: string;\n}\n\n// Register once per Monaco instance. Each MonacoEditor mounts its own iframe\n// (its own `monaco`), so this guards against a double `createEditorInstance`.\nconst registered = new WeakSet<object>();\n\n// HTML-embedded Liquid grammar: tokenizes HTML loosely and switches into\n// dedicated states for `{{ output }}` and `{% tag %}`. Liquid inside HTML\n// attributes works too, since `{{`/`{%` are matched from the root regardless of\n// tag context. Token names are standard so the default theme colors them.\n//\n// IMPORTANT: patterns are STRINGS, not RegExp literals. Monaco runs in the\n// editor iframe (a separate realm); a RegExp created here would fail Monarch's\n// `instanceof RegExp` check inside the iframe (\"rules must start with a match\n// string or regular expression\"). Strings are realm-agnostic — Monarch compiles\n// them to RegExp in its own realm.\nconst liquidMonarch: Monaco.languages.IMonarchLanguage = {\n defaultToken: '',\n tokenizer: {\n root: [\n ['\\\\{\\\\{', { token: 'delimiter.curly', next: '@liquidOutput' }],\n ['\\\\{%', { token: 'delimiter.curly', next: '@liquidTag' }],\n ['<!--', { token: 'comment', next: '@htmlComment' }],\n ['</?[a-zA-Z][\\\\w-]*', 'tag'],\n ['>', 'tag'],\n ],\n liquidOutput: [\n ['\\\\}\\\\}', { token: 'delimiter.curly', next: '@pop' }],\n { include: '@liquidInner' },\n ],\n liquidTag: [\n ['%\\\\}', { token: 'delimiter.curly', next: '@pop' }],\n { include: '@liquidInner' },\n ],\n liquidInner: [\n ['\\\\b(?:if|elsif|else|endif|unless|endunless|for|endfor|case|when|endcase|assign|capture|endcapture|include|render|raw|endraw|comment|endcomment|break|continue|cycle|increment|decrement|tablerow|endtablerow|liquid|echo)\\\\b', 'keyword'],\n ['\\\\b(?:and|or|contains|in|with|as|empty|nil|null|blank|true|false|by)\\\\b', 'keyword'],\n ['\\\\|', 'operator'],\n ['[a-zA-Z_][\\\\w.]*', 'variable'],\n ['\"[^\"]*\"', 'string'],\n [\"'[^']*'\", 'string'],\n ['\\\\d+(?:\\\\.\\\\d+)?', 'number'],\n ['[=!<>]=?|[:.,?-]', 'operator'],\n ],\n htmlComment: [\n ['-->', { token: 'comment', next: '@pop' }],\n ['.', 'comment'],\n ],\n },\n};\n\nfunction registerLanguage (monaco: MonacoApi): void {\n monaco.languages.register({ id: 'liquid' });\n\n // Highlight/config failures must never block editor creation — the language\n // is registered above, so the editor still mounts (as plain text) if either\n // of these throws.\n try {\n monaco.languages.setLanguageConfiguration('liquid', {\n autoClosingPairs: [\n { open: '{{', close: ' }}' },\n { open: '{%', close: ' %}' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid language configuration failed', error);\n }\n\n try {\n monaco.languages.setMonarchTokensProvider('liquid', liquidMonarch);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid tokenizer registration failed', error);\n }\n}\n\nfunction registerCompletion (monaco: MonacoApi, getVariables: () => LiquidVariable[]): void {\n monaco.languages.registerCompletionItemProvider('liquid', {\n triggerCharacters: ['{', '.', ' ', '|'],\n provideCompletionItems (model, position) {\n const lineText = model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: 1,\n endLineNumber: position.lineNumber,\n endColumn: position.column,\n });\n\n // Only suggest variables inside an open `{{ … }}` / `{% … %}`.\n const open = Math.max(lineText.lastIndexOf('{{'), lineText.lastIndexOf('{%'));\n const close = Math.max(lineText.lastIndexOf('}}'), lineText.lastIndexOf('%}'));\n\n if (open === -1 || open <= close) {\n return { suggestions: [] };\n }\n\n const word = model.getWordUntilPosition(position);\n const range: Monaco.IRange = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n\n const suggestions = getVariables().map(variable => ({\n label: variable.key,\n kind: monaco.languages.CompletionItemKind.Variable,\n insertText: variable.key,\n detail: variable.displayName ?? '',\n range,\n }));\n\n return { suggestions };\n },\n });\n}\n\n/**\n * Registers the `liquid` language (HTML-embedded highlight) and a completion\n * provider that suggests dynamic variables inside `{{ }}` / `{% %}`.\n *\n * @param monaco The Monaco API from the editor iframe's contentWindow.\n * @param getVariables Lazily read the current variable list (kept reactive).\n */\nexport function registerLiquid (monaco: MonacoApi, getVariables: () => LiquidVariable[]): void {\n if (registered.has(monaco)) {\n return;\n }\n\n registered.add(monaco);\n\n registerLanguage(monaco);\n\n try {\n registerCompletion(monaco, getVariables);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid completion registration failed', error);\n }\n}\n","// Monaco renders inside a fixed-size blob iframe, so wheel events never reach the\n// host page and Monaco consumes them at its own scroll boundaries. These helpers\n// let the component forward a wheel gesture to the nearest scrollable ancestor of\n// the iframe once the editor itself can't scroll further, so a surrounding\n// scrollable container (e.g. a drawer) keeps scrolling.\n\n/**\n * The nearest ancestor of `element` that can actually scroll vertically, or\n * `null` when none exists (e.g. the editor isn't inside a scroll container).\n */\nexport function findScrollableParent(element: HTMLElement | null): HTMLElement | null {\n let node = element?.parentElement ?? null;\n\n while (node) {\n const { overflowY } = window.getComputedStyle(node);\n const canScroll = (overflowY === 'auto' || overflowY === 'scroll') && node.scrollHeight > node.clientHeight;\n\n if (canScroll) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return null;\n}\n\n/**\n * True when the editor cannot scroll further in the wheel's direction — either\n * its content fits entirely, or it is already pinned to the top (scrolling up)\n * or bottom (scrolling down). At that point the gesture should chain to the\n * parent.\n */\nexport function isAtScrollEdge(deltaY: number, scrollTop: number, scrollHeight: number, visibleHeight: number): boolean {\n if (scrollHeight <= visibleHeight) {\n return true;\n }\n\n if (deltaY < 0) {\n return scrollTop <= 0;\n }\n\n if (deltaY > 0) {\n return Math.ceil(scrollTop + visibleHeight) >= scrollHeight;\n }\n\n return false;\n}\n\n/** Normalise a wheel delta to pixels (some devices report line/page units). */\nexport function normalizeWheelDeltaY(deltaY: number, deltaMode: number): number {\n if (deltaMode === 1) {\n return deltaY * 16;\n }\n\n return deltaY;\n}\n\n/**\n * The pixel amount to chain onto the parent scroller for a wheel event, or `null`\n * when the gesture should stay with the editor (a zero delta, or the editor can\n * still scroll further in that direction). Combines the edge test with unit\n * normalisation so the component's wheel handler is a thin DOM shim over logic\n * that is covered by unit tests (the editor-in-iframe itself is not).\n */\nexport function resolveChainedScrollDelta(\n deltaY: number,\n deltaMode: number,\n scrollTop: number,\n scrollHeight: number,\n visibleHeight: number\n): number | null {\n if (deltaY === 0) {\n return null;\n }\n\n if (!isAtScrollEdge(deltaY, scrollTop, scrollHeight, visibleHeight)) {\n return null;\n }\n\n return normalizeWheelDeltaY(deltaY, deltaMode);\n}\n","// The custom error tooltip is anchored to the error LINE, not the pointer, so it\n// stays put while the cursor moves over the glyph. These pure helpers hold the\n// re-anchor gate and the vertical placement so they can be unit tested — the\n// surrounding Monaco/iframe wiring in MonacoEditor.vue cannot.\n\n/** Gap in pixels between the error line and the tooltip. */\nexport const TOOLTIP_GAP = 3;\n\n/**\n * True when the tooltip should be re-positioned: only when the hovered error line\n * differs from the line it is already anchored to (`null` when hidden). Moving the\n * pointer within the same line's glyph must NOT re-anchor it.\n */\nexport function shouldReanchorTooltip(hoveredLine: number, anchoredLine: number | null): boolean {\n return hoveredLine !== anchoredLine;\n}\n\n/**\n * The tooltip's `top` (px). Placed just below the error line, but flipped above it\n * when placing it below would spill past the viewport bottom (errors on the last\n * lines would otherwise be clipped by the iframe's overflow). Clamped to 4px so it\n * never leaves the top edge when flipped.\n */\nexport function resolveTooltipTop(\n lineTop: number,\n lineHeight: number,\n tooltipHeight: number,\n viewportHeight: number\n): number {\n const below = lineTop + lineHeight + TOOLTIP_GAP;\n\n if (below + tooltipHeight > viewportHeight) {\n return Math.max(4, lineTop - tooltipHeight - TOOLTIP_GAP);\n }\n\n return below;\n}\n","import type cssValidator from './css';\nimport type htmlValidator from './html';\nimport type jsValidator from './js';\nimport type liquidValidator from './liquid';\n\nconst validator: {\n javascript?: typeof jsValidator;\n html?: typeof htmlValidator;\n css?: typeof cssValidator;\n liquid?: typeof liquidValidator;\n} = {};\n\nexport function useValidators () {\n return {\n async javascript (...params: Parameters<typeof jsValidator>) {\n if (!validator.javascript) {\n validator.javascript = (await import('./js')).default;\n }\n\n return validator.javascript(...params);\n },\n async html (...params: Parameters<typeof htmlValidator>) {\n if (!validator.html) {\n validator.html = (await import('./html')).default;\n }\n\n return validator.html(...params);\n },\n async css (...params: Parameters<typeof cssValidator>) {\n if (!validator.css) {\n validator.css = (await import('./css')).default;\n }\n\n return validator.css(...params);\n },\n async liquid (...params: Parameters<typeof liquidValidator>) {\n if (!validator.liquid) {\n validator.liquid = (await import('./liquid')).default;\n }\n\n return validator.liquid(...params);\n },\n };\n}\n","<script setup lang=\"ts\">\nimport type { editor as Editor, IDisposable } from 'monaco-editor';\nimport { ref, onUnmounted, watch, withDefaults } from 'vue';\nimport { debounce } from '@/utils/debounce';\nimport { generateIframeContent } from './generateIframeContent';\nimport { registerLiquid, type LiquidVariable } from './liquid/registerLiquid';\nimport styles from './MonacoEditor.module.scss';\nimport { findScrollableParent, resolveChainedScrollDelta } from './scrollChaining';\nimport { resolveTooltipTop, shouldReanchorTooltip } from './tooltipPosition';\nimport { useValidators } from './validators/useValidators';\n\nexport type { LiquidVariable };\n\nexport interface MonacoEditorProps {\n language?: keyof ReturnType<typeof useValidators>;\n code?: string;\n disableValidation?: boolean;\n /**\n * Absolute URL to the served Monaco `vs` directory. The consuming app must\n * host these assets. When omitted, falls back to the current origin + `/vs`.\n */\n monacoVsPath?: string;\n /**\n * Dynamic variables suggested by autocomplete when `language` is `liquid`.\n */\n liquidVariables?: LiquidVariable[];\n /**\n * Per-consumer Monaco options merged over the shared defaults (e.g. disabling\n * the minimap). `language`/`value` are always owned by the component.\n */\n editorOptions?: Editor.IStandaloneEditorConstructionOptions;\n /** Render the custom error icon (gutter) + hover infobox. Off by default. */\n errorGlyph?: boolean;\n /** Dimmed text shown over the editor while it is empty. */\n placeholder?: string;\n}\n\ninterface Emits {\n (e: 'update:codeEditorLength', length: number): void;\n (e: 'update:shouldShowLengthError', show: boolean): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'ready', editor: Editor.IStandaloneCodeEditor): void;\n (e: 'destroyed'): void;\n}\n\nconst emit = defineEmits<Emits>();\n\nconst props = withDefaults(defineProps<MonacoEditorProps>(), {\n language: 'javascript',\n code: '',\n disableValidation: false,\n liquidVariables: () => [],\n editorOptions: () => ({}),\n errorGlyph: false,\n placeholder: '',\n});\n\nlet editor: Editor.IStandaloneCodeEditor;\nlet markersListener: IDisposable | undefined;\nlet removeWheelForwarding: (() => void) | undefined;\nconst iframe = ref<HTMLIFrameElement | null>(null);\nconst blob = new Blob([generateIframeContent(props.monacoVsPath)], { type: 'text/html' });\nconst src = URL.createObjectURL(blob);\nconst validators = useValidators();\n\nconst validateCode = async () => {\n const monaco = iframe.value?.contentWindow?.monaco;\n\n if (!monaco) {\n return false;\n }\n\n return (await validators[props.language](editor, monaco)).valid || false;\n};\n\nasync function createEditorInstance () {\n const frame = iframe.value;\n\n if (!frame?.contentWindow || !frame.contentDocument) {\n return;\n }\n\n const { contentDocument, contentWindow } = frame;\n\n await contentWindow.editorPromise;\n\n const { monaco } = contentWindow;\n const container = contentDocument.querySelector<HTMLDivElement>('.editor');\n\n if (!container) {\n return;\n }\n\n contentDocument.body.appendChild(container);\n\n if (props.language === 'liquid') {\n try {\n registerLiquid(monaco, () => props.liquidVariables);\n } catch (error) {\n // Never let liquid registration block editor creation.\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] registerLiquid failed', error);\n }\n }\n\n try {\n editor = monaco.editor.create(container, {\n wordWrap: 'on',\n // Error icon renders in the line-decorations margin (to the RIGHT of the\n // line number) via the marker listener; reserve width for it + the gutter.\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 29,\n // Hide the overview ruler and its marker decorations (both consumers).\n overviewRulerLanes: 0,\n // Per-consumer overrides (e.g. design-editor disables the minimap) merge\n // over the shared defaults. language/value stay owned by the component.\n ...props.editorOptions,\n language: props.language,\n value: props.code,\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`[MonacoEditor] monaco.editor.create failed (language=${props.language})`, error);\n\n return;\n }\n\n emit('update:codeEditorLength', props.code.length);\n\n emit('ready', editor);\n\n // Monaco lives in a fixed-size iframe and consumes wheel events at its own\n // scroll boundary, so a surrounding scroll container (e.g. the DEF drawer)\n // stops scrolling once the pointer is over the editor. Forward the gesture to\n // the nearest scrollable ancestor once the editor itself can't scroll further.\n const forwardWheelAtEdge = (event: WheelEvent): void => {\n if (!editor) {\n return;\n }\n\n const delta = resolveChainedScrollDelta(\n event.deltaY,\n event.deltaMode,\n editor.getScrollTop(),\n editor.getScrollHeight(),\n editor.getLayoutInfo().height\n );\n\n if (delta === null) {\n return;\n }\n\n const scrollable = findScrollableParent(iframe.value);\n\n if (scrollable) {\n scrollable.scrollTop += delta;\n }\n };\n\n contentDocument.addEventListener('wheel', forwardWheelAtEdge, { capture: true, passive: true });\n removeWheelForwarding = () => contentDocument.removeEventListener('wheel', forwardWheelAtEdge, { capture: true });\n\n // Fire-and-forget: validators set Monaco markers when they resolve, which\n // drives the error tint + `update:valid` via the marker listener below.\n const runValidation = (): void => {\n if (props.disableValidation) {\n return;\n }\n\n if (props.language === 'html') {\n void validators.html(editor, monaco);\n\n return;\n }\n\n if (props.language === 'liquid') {\n void validators.liquid(editor, monaco, props.liquidVariables.map(item => item.key));\n\n return;\n }\n\n if (props.language === 'javascript') {\n void validators.javascript(editor, monaco);\n }\n };\n\n editor.onDidChangeModelContent(debounce(() => {\n emit('update:codeEditorLength', editor.getValue().length);\n runValidation();\n }, 300));\n\n editor.onMouseDown(debounce(async () => {\n emit('update:shouldShowLengthError', false);\n }, 100));\n\n // Tint the whole line behind any error marker. Driven by Monaco markers, so\n // it works for every language/validator and looks identical across all\n // consumers (SDB popups + the DEF liquid editor). The CSS lives in the\n // editor iframe document, where Monaco renders. Wrapped so a decoration API\n // hiccup can never disable validation (registered above).\n try {\n const errorStyle = contentDocument.createElement('style');\n\n // Gray-blue gutter is part of the design-editor look (errorGlyph) only;\n // other consumers (SDB popups) keep Monaco's default white gutter.\n const gutterThemeCss = props.errorGlyph\n ? '.monaco-editor .margin { background-color: #dcdee6 !important; }'\n + ' .monaco-editor .line-numbers { color: #91949f !important; text-align: center !important;'\n + ' font-family: Figtree, sans-serif !important; font-size: 15px !important; }'\n + ' .monaco-editor .view-overlays .current-line {'\n + ' border: none !important; background-color: transparent !important; }'\n + ' .monaco-editor .lines-content { left: 16px !important; }'\n + ' .monaco-editor .monaco-scrollable-element { background-color: #ffffff !important; }'\n : '';\n\n // Monaco does NOT render an icon in the glyph margin for markers (only a\n // squiggle + overview ruler), so we paint our own red circle-X there.\n // cspell:ignore Csvg Ccircle Cpath infobox posx posy Figtree\n errorStyle.textContent = `\n ${gutterThemeCss}\n .decorationsOverviewRuler { display: none !important; }\n .monaco-error-glyph {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23dc2626'/%3E%3Cpath d='M5.5 5.5l5 5M10.5 5.5l-5 5' stroke='white' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: left center;\n background-size: 14px 14px;\n cursor: pointer;\n }\n .monaco-error-tooltip {\n position: absolute;\n z-index: 1000;\n max-width: 160px;\n max-height: 120px;\n overflow-y: auto;\n padding: 8px 10px;\n background: #ffffff;\n border-top: 4px solid #dc2626;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.16);\n font-family: 'JetBrains Mono', monospace;\n font-size: 13px;\n line-height: 16px;\n color: #292929;\n white-space: pre-wrap;\n word-break: break-word;\n pointer-events: none;\n }\n .monaco-placeholder {\n pointer-events: none;\n color: #91949f;\n white-space: pre;\n }\n `;\n contentDocument.head.appendChild(errorStyle);\n\n const errorDecorations = editor.createDecorationsCollection();\n const markerModel = editor.getModel();\n\n markersListener = monaco.editor.onDidChangeMarkers(() => {\n if (!markerModel) {\n return;\n }\n\n const errorMarkers = monaco.editor\n .getModelMarkers({ resource: markerModel.uri })\n .filter(marker => marker.severity === monaco.MarkerSeverity.Error);\n\n if (props.errorGlyph) {\n errorDecorations.set(errorMarkers.map(marker => ({\n range: new monaco.Range(marker.startLineNumber, 1, marker.startLineNumber, 1),\n options: {\n isWholeLine: true,\n firstLineDecorationClassName: 'monaco-error-glyph',\n },\n })));\n }\n\n emit('update:valid', errorMarkers.length === 0);\n });\n\n // Custom infobox shown when hovering the error icon (the line-decorations\n // gutter on an error line). Only for consumers that opt into the custom\n // error UI (design-editor) and turn Monaco's native hover off.\n if (props.errorGlyph) {\n const errorTooltip = contentDocument.createElement('div');\n\n errorTooltip.className = 'monaco-error-tooltip';\n errorTooltip.style.display = 'none';\n contentDocument.body.appendChild(errorTooltip);\n\n let tooltipLine: number | null = null;\n\n const hideErrorTooltip = (): void => {\n errorTooltip.style.display = 'none';\n tooltipLine = null;\n };\n\n editor.onMouseMove(event => {\n if (event.target.type !== monaco.editor.MouseTargetType.GUTTER_LINE_DECORATIONS\n || !event.target.position\n || !markerModel) {\n hideErrorTooltip();\n\n return;\n }\n\n const line = event.target.position.lineNumber;\n const lineMarkers = monaco.editor\n .getModelMarkers({ resource: markerModel.uri })\n .filter(item => item.severity === monaco.MarkerSeverity.Error && item.startLineNumber === line);\n\n if (lineMarkers.length === 0) {\n hideErrorTooltip();\n\n return;\n }\n\n // Re-anchor only when the hovered error line changes — otherwise the\n // tooltip would jump around as the pointer moves within the same glyph.\n if (!shouldReanchorTooltip(line, tooltipLine)) {\n return;\n }\n\n tooltipLine = line;\n\n const grouped = new Map<string, Set<string> | null>();\n\n lineMarkers.forEach(item => {\n const separator = item.message.indexOf(': ');\n\n if (separator > -1) {\n const prefix = item.message.slice(0, separator);\n const values = grouped.get(prefix) ?? new Set<string>();\n\n values.add(item.message.slice(separator + 2));\n grouped.set(prefix, values);\n } else if (!grouped.has(item.message)) {\n grouped.set(item.message, null);\n }\n });\n\n const entries: string[] = [];\n\n grouped.forEach((values, key) => {\n entries.push(values ? `${key}: ${[...values].join(', ')}` : key);\n });\n\n const message = entries.length > 1\n ? entries.map(entry => `• ${entry}`).join('\\n')\n : entries[0];\n\n errorTooltip.textContent = message;\n errorTooltip.style.display = 'block';\n\n // Anchor to the error LINE (not the pointer / hovered element rect) so\n // the tooltip stays put while the pointer moves over the glyph.\n const linePosition = editor.getScrolledVisiblePosition({ lineNumber: line, column: 1 });\n\n if (linePosition) {\n const containerRect = container.getBoundingClientRect();\n const glyphLeft = containerRect.left + editor.getLayoutInfo().decorationsLeft;\n const lineTop = containerRect.top + linePosition.top;\n const top = resolveTooltipTop(\n lineTop,\n linePosition.height,\n errorTooltip.offsetHeight,\n contentDocument.documentElement.clientHeight\n );\n\n errorTooltip.style.left = `${glyphLeft}px`;\n errorTooltip.style.top = `${top}px`;\n }\n });\n\n editor.onMouseLeave(hideErrorTooltip);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] error-line highlight setup failed', error);\n }\n\n // Monaco 0.48 has no native placeholder — anchor a content widget at line 1 /\n // column 1 so it renders exactly where typed text begins. A content widget is\n // positioned by Monaco itself, so it stays aligned with the first line's font\n // metrics + padding (a hand-placed absolute overlay drifts below the line).\n if (props.placeholder) {\n try {\n const placeholderEl = contentDocument.createElement('div');\n const fontInfo = editor.getOption(monaco.editor.EditorOption.fontInfo);\n\n placeholderEl.className = 'monaco-placeholder';\n placeholderEl.textContent = props.placeholder;\n placeholderEl.style.fontFamily = fontInfo.fontFamily;\n placeholderEl.style.fontSize = `${fontInfo.fontSize}px`;\n placeholderEl.style.lineHeight = `${fontInfo.lineHeight}px`;\n\n editor.addContentWidget({\n getId: () => 'monaco.placeholder.widget',\n getDomNode: () => placeholderEl,\n getPosition: () => ({\n position: { lineNumber: 1, column: 1 },\n preference: [monaco.editor.ContentWidgetPositionPreference.EXACT],\n }),\n });\n\n const updatePlaceholder = (): void => {\n placeholderEl.style.display = editor.getValue().length === 0 ? 'block' : 'none';\n };\n\n updatePlaceholder();\n editor.onDidChangeModelContent(updatePlaceholder);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] placeholder setup failed', error);\n }\n }\n\n // Validate the initial content so markers / error tint / `update:valid`\n // reflect a template that opens with an existing (possibly invalid) value.\n runValidation();\n}\n\n// Re-validate when the dynamic-content variables arrive (they load async), so an\n// already-rendered liquid editor flags unknown variables once the list is known.\nwatch(\n () => props.liquidVariables,\n () => {\n const monaco = iframe.value?.contentWindow?.monaco;\n\n if (editor && monaco && props.language === 'liquid' && !props.disableValidation) {\n void validators.liquid(editor, monaco, props.liquidVariables.map(item => item.key));\n }\n }\n);\n\nonUnmounted(() => {\n removeWheelForwarding?.();\n markersListener?.dispose();\n editor?.dispose();\n\n emit('destroyed');\n});\n\nconst getCode = async () => {\n const valid = props.disableValidation ? true : await validateCode();\n\n return {\n code: editor.getValue(),\n valid,\n };\n};\n\ndefineExpose({ getCode });\n</script>\n\n<template>\n <iframe\n ref=\"iframe\"\n sandbox=\"allow-same-origin allow-scripts allow-forms allow-modals allow-popups\"\n :class=\"styles['monaco-editor-iframe']\"\n :src=\"src\"\n @load=\"createEditorInstance\" />\n</template>\n","/*\n * liquidjs@10.27.1, https://github.com/harttle/liquidjs\n * (c) 2016-2026 harttle\n * Released under the MIT License.\n */\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass Drop {\r\n liquidMethodMissing(key, context) {\r\n return undefined;\r\n }\r\n}\n\nconst toString$1 = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\nconst hasOwnProperty = Object.hasOwnProperty;\r\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction isPromise(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n if (isString(value))\r\n return value;\r\n if (isNil(value))\r\n return '';\r\n if (isArray(value))\r\n return value.map(x => stringify(x)).join('');\r\n return String(value);\r\n}\r\nfunction toEnumerable(val) {\r\n val = toValue(val);\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isIterable(val))\r\n return Array.from(val);\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n val = toValue(val);\r\n if (isNil(val))\r\n return [];\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\r\nfunction toValue(value) {\r\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value;\r\n}\r\nfunction toNumber(value) {\r\n return +toValue(value) || 0;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value == null;\r\n}\r\nfunction isUndefined(value) {\r\n return value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toString$1.call(value) === '[object Array]';\r\n}\r\nfunction isArrayLike(value) {\r\n return value && isNumber(value.length);\r\n}\r\nfunction isIterable(value) {\r\n return isObject(value) && Symbol.iterator in value;\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(obj, iteratee) {\r\n obj = obj || {};\r\n for (const k in obj) {\r\n if (hasOwnProperty.call(obj, k)) {\r\n if (iteratee(obj[k], k, obj) === false)\r\n break;\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n const n = length - str.length;\r\n if (n <= 0)\r\n return str;\r\n return add(str, ch.repeat(n));\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.slice(0, N - 3) + '...' : str;\r\n}\r\nfunction orderedCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\nfunction argumentsToValue(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toValue)); };\r\n}\r\nfunction argumentsToNumber(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toNumber)); };\r\n}\r\n/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */\r\nfunction* strictUniq(array) {\r\n const seen = new Set();\r\n for (const element of array) {\r\n const key = JSON.stringify(element);\r\n if (!seen.has(key)) {\r\n seen.add(key);\r\n yield element;\r\n }\r\n }\r\n}\n\n/**\r\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\r\n */\r\nconst TRAIT = '__liquidClass__';\r\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n /**\r\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\r\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\r\n */\r\n super(typeof err === 'string' ? err : err.message);\r\n this.context = '';\r\n if (typeof err !== 'string')\r\n Object.defineProperty(this, 'originalError', { value: err, enumerable: false });\r\n Object.defineProperty(this, 'token', { value: token, enumerable: false });\r\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false });\r\n }\r\n update() {\r\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false });\r\n this.message = mkMessage(this.message, this.token);\r\n this.stack = this.message + '\\n' + this.context +\r\n '\\n' + this.stack;\r\n if (this.originalError)\r\n this.stack += '\\nFrom ' + this.originalError.stack;\r\n }\r\n static is(obj) {\r\n return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError';\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(message, token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'RenderError';\r\n }\r\n}\r\nclass LiquidErrors extends LiquidError {\r\n constructor(errors) {\r\n super(errors[0], errors[0].token);\r\n this.errors = errors;\r\n this.name = 'LiquidErrors';\r\n const s = errors.length > 1 ? 's' : '';\r\n this.message = `${errors.length} error${s} found`;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'LiquidErrors';\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line, col] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const rowIndicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n let text = `${rowIndicator}${num}| `;\r\n const colIndicator = lineNumber === line\r\n ? '\\n' + padStart('^', col + text.length)\r\n : '';\r\n text += lines[lineNumber - 1];\r\n text += colIndicator;\r\n return text;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst WORD = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nconst PUNCTUATION = 128;\r\nfunction isWord(char) {\r\n const code = char.charCodeAt(0);\r\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD);\r\n}\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\r\nTYPES[8220] = TYPES[8221] = PUNCTUATION;\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = typeof message === 'function'\r\n ? message()\r\n : (message || `expect ${predicate} to be true`);\r\n throw new AssertionError(msg);\r\n }\r\n}\r\nfunction assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) {\r\n assert(!predicate, message);\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value));\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (value instanceof EmptyDrop)\r\n return false;\r\n value = toValue(value);\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n static is(value) {\r\n return value instanceof EmptyDrop;\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n static is(value) {\r\n return value instanceof BlankDrop;\r\n }\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length, collection, variable) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n this.name = `${variable}-${collection}`;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nclass SimpleEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n this.buffer += stringify(html);\r\n }\r\n}\n\nclass StreamedEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n this.stream = null;\r\n throw new Error('streaming not supported in browser');\r\n }\r\n}\n\nclass KeepingTypeEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n html = toValue(html);\r\n // This will only preserve the type if the value is isolated.\r\n // I.E:\r\n // {{ my-port }} -> 42\r\n // {{ my-host }}:{{ my-port }} -> 'host:42'\r\n if (typeof html !== 'string' && this.buffer === '') {\r\n this.buffer = html;\r\n }\r\n else {\r\n this.buffer = stringify(this.buffer) + stringify(html);\r\n }\r\n }\r\n}\n\nclass BlockDrop extends Drop {\r\n constructor(\r\n // the block render from layout template\r\n superBlockRender = () => '') {\r\n super();\r\n this.superBlockRender = superBlockRender;\r\n }\r\n /**\r\n * Provide parent access in child block by\r\n * {{ block.super }}\r\n */\r\n *super() {\r\n const emitter = new SimpleEmitter();\r\n yield this.superBlockRender(emitter);\r\n return emitter.buffer;\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return (arg &&\r\n isFunction(arg.equals) &&\r\n isFunction(arg.gt) &&\r\n isFunction(arg.geq) &&\r\n isFunction(arg.lt) &&\r\n isFunction(arg.leq));\r\n}\n\nconst nil = new NullDrop();\r\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': nil,\r\n 'null': nil,\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\n// Tries are built once per input object and reused: the Tokenizer rebuilds them\r\n// on every instantiation, but `input` (operators/literalValues) is a stable\r\n// reference. WeakMap-keying by `input` lets short-lived operator objects (and\r\n// their tries) be garbage collected. The returned trie is treated as read-only\r\n// by callers (matchTrie only reads it); do not mutate it.\r\nconst trieCache = new WeakMap();\r\nfunction createTrie(input) {\r\n const cached = trieCache.get(input);\r\n if (cached)\r\n return cached;\r\n const trie = {};\r\n for (const [name, data] of Object.entries(input)) {\r\n let node = trie;\r\n for (let i = 0; i < name.length; i++) {\r\n const c = name[i];\r\n node[c] = node[c] || {};\r\n if (i === name.length - 1 && isWord(name[i])) {\r\n node[c].needBoundary = true;\r\n }\r\n node = node[c];\r\n }\r\n node.data = data;\r\n node.end = true;\r\n }\r\n trieCache.set(input, trie);\r\n return trie;\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nfunction toLiquidAsync(asyncFn, syncFn) {\r\n const syncImpl = syncFn || asyncFn;\r\n return (sync, ...args) => {\r\n return sync ? syncImpl(...args) : asyncFn(...args);\r\n };\r\n}\r\n// convert an async iterator to a Promise\r\nfunction toPromise(val) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = !!state.done;\r\n value = state.value;\r\n next = 'next';\r\n try {\r\n if (isIterator(value))\r\n value = toPromise(value);\r\n if (isPromise(value))\r\n value = yield value;\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n } while (!done);\r\n return value;\r\n });\r\n}\r\n// convert an async iterator to a value in a synchronous manner\r\nfunction toValueSync(val) {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = !!state.done;\r\n value = state.value;\r\n next = 'next';\r\n if (isIterator(value)) {\r\n try {\r\n value = toValueSync(value);\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n }\r\n } while (!done);\r\n return value;\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction ordinal(d) {\r\n const date = d.getDate();\r\n if ([11, 12, 13].includes(date))\r\n return 'th';\r\n switch (date % 10) {\r\n case 1: return 'st';\r\n case 2: return 'nd';\r\n case 3: return 'rd';\r\n default: return 'th';\r\n }\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\nconst padSpaceChars = new Set('aAbBceklpP');\r\nfunction getTimezoneOffset(d, opts) {\r\n const nOffset = Math.abs(d.getTimezoneOffset());\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n}\r\nconst formatCodes = {\r\n a: (d) => d.getShortWeekdayName(),\r\n A: (d) => d.getLongWeekdayName(),\r\n b: (d) => d.getShortMonthName(),\r\n B: (d) => d.getLongMonthName(),\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n var _a;\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).slice(0, width);\r\n (_a = opts.memoryLimit) === null || _a === void 0 ? void 0 : _a.use(width - str.length);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => ordinal(d),\r\n s: (d) => Math.round(d.getTime() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().slice(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: getTimezoneOffset,\r\n Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime(d, formatStr, memoryLimit) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match, memoryLimit);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match, memoryLimit) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier, memoryLimit }));\r\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0';\r\n let padWidth = Number(width) || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n memoryLimit === null || memoryLimit === void 0 ? void 0 : memoryLimit.use(Number(padWidth) - ret.length);\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction getDateTimeFormat() {\r\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined);\r\n}\n\n// one minute in milliseconds\r\nconst OneMinute = 60000;\r\n/**\r\n * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS\r\n * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3\r\n */\r\nconst TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):?(\\d{2}))$/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3));\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3));\r\n/**\r\n * A date implementation with timezone info, just like Ruby date\r\n *\r\n * Implementation:\r\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\r\n * - rewrite getTimezoneOffset() to trick strftime\r\n */\r\nclass LiquidDate {\r\n constructor(init, locale, timezone) {\r\n this.locale = locale;\r\n this.DateTimeFormat = getDateTimeFormat();\r\n this.date = new Date(init);\r\n this.timezoneFixed = timezone !== undefined;\r\n if (timezone === undefined) {\r\n timezone = this.date.getTimezoneOffset();\r\n }\r\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone;\r\n this.timezoneName = isString(timezone) ? timezone : '';\r\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute;\r\n const time = this.date.getTime() + diff;\r\n this.displayDate = new Date(time);\r\n }\r\n getTime() {\r\n return this.displayDate.getTime();\r\n }\r\n getMilliseconds() {\r\n return this.displayDate.getMilliseconds();\r\n }\r\n getSeconds() {\r\n return this.displayDate.getSeconds();\r\n }\r\n getMinutes() {\r\n return this.displayDate.getMinutes();\r\n }\r\n getHours() {\r\n return this.displayDate.getHours();\r\n }\r\n getDay() {\r\n return this.displayDate.getDay();\r\n }\r\n getDate() {\r\n return this.displayDate.getDate();\r\n }\r\n getMonth() {\r\n return this.displayDate.getMonth();\r\n }\r\n getFullYear() {\r\n return this.displayDate.getFullYear();\r\n }\r\n toLocaleString(locale, init) {\r\n if (init === null || init === void 0 ? void 0 : init.timeZone) {\r\n return this.date.toLocaleString(locale, init);\r\n }\r\n return this.displayDate.toLocaleString(locale, init);\r\n }\r\n toLocaleTimeString(locale) {\r\n return this.displayDate.toLocaleTimeString(locale);\r\n }\r\n toLocaleDateString(locale) {\r\n return this.displayDate.toLocaleDateString(locale);\r\n }\r\n getTimezoneOffset() {\r\n return this.timezoneOffset;\r\n }\r\n getTimeZoneName() {\r\n if (this.timezoneFixed)\r\n return this.timezoneName;\r\n if (!this.DateTimeFormat)\r\n return;\r\n return this.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n getLongMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()];\r\n }\r\n getShortMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()];\r\n }\r\n getLongWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()];\r\n }\r\n getShortWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()];\r\n }\r\n valid() {\r\n return !isNaN(this.getTime());\r\n }\r\n format(options) {\r\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate);\r\n }\r\n /**\r\n * Create a Date object fixed to it's declared Timezone. Both\r\n * - 2021-08-06T02:29:00.000Z and\r\n * - 2021-08-06T02:29:00.000+08:00\r\n * will always be displayed as\r\n * - 2021-08-06 02:29:00\r\n * regardless timezoneOffset in JavaScript realm\r\n *\r\n * The implementation hack:\r\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\r\n * we create a different Date to trick strftime, it's both simpler and more performant.\r\n * Given that a template is expected to be parsed fewer times than rendered.\r\n */\r\n static createDateFixedToTimezone(dateString, locale) {\r\n const m = dateString.match(TIMEZONE_PATTERN);\r\n // representing a UTC timestamp\r\n if (m && m[1] === 'Z') {\r\n return new LiquidDate(+new Date(dateString), locale, 0);\r\n }\r\n // has a timezone specified\r\n if (m && m[2] && m[3] && m[4]) {\r\n const [, , sign, hours, minutes] = m;\r\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10));\r\n return new LiquidDate(+new Date(dateString), locale, offset);\r\n }\r\n return new LiquidDate(dateString, locale);\r\n }\r\n static getTimezoneOffset(timezoneName, date) {\r\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName });\r\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' });\r\n const localDate = new Date(localDateString);\r\n const utcDate = new Date(utcDateString);\r\n return (+utcDate - +localDate) / (60 * 1000);\r\n }\r\n}\n\nclass Limiter {\r\n constructor(resource, limit) {\r\n this.base = 0;\r\n this.message = `${resource} limit exceeded`;\r\n this.limit = limit;\r\n }\r\n use(count) {\r\n if (+count > 0) {\r\n assert(this.base + +count <= this.limit, this.message);\r\n this.base += +count;\r\n }\r\n }\r\n check(count) {\r\n if (+count > 0) {\r\n assert(+count <= this.limit, this.message);\r\n }\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n const tl = input[contentBegin] === '-';\r\n const tr = input[contentEnd - 1] === '-';\r\n let l = tl ? contentBegin + 1 : contentBegin;\r\n let r = tr ? contentEnd - 1 : contentEnd;\r\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK))\r\n l++;\r\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK))\r\n r--;\r\n this.contentRange = [l, r];\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n get content() {\r\n return this.input.slice(this.contentRange[0], this.contentRange[1]);\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length];\r\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`);\r\n this.tokenizer.skipBlank();\r\n this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length];\r\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Number, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = Number(this.getText());\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n}\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n this.content = literalValues[this.literal];\r\n }\r\n}\n\nconst operatorPrecedences = {\r\n '==': 2,\r\n '!=': 2,\r\n '>': 2,\r\n '<': 2,\r\n '>=': 2,\r\n '<=': 2,\r\n 'contains': 2,\r\n 'not': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nconst operatorTypes = {\r\n '==': 0 /* OperatorType.Binary */,\r\n '!=': 0 /* OperatorType.Binary */,\r\n '>': 0 /* OperatorType.Binary */,\r\n '<': 0 /* OperatorType.Binary */,\r\n '>=': 0 /* OperatorType.Binary */,\r\n '<=': 0 /* OperatorType.Binary */,\r\n 'contains': 0 /* OperatorType.Binary */,\r\n 'not': 1 /* OperatorType.Unary */,\r\n 'and': 0 /* OperatorType.Binary */,\r\n 'or': 0 /* OperatorType.Binary */\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1;\r\n }\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, input, begin, end, file) {\r\n super(TokenKind.PropertyAccess, input, begin, end, file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = parseStringLiteral(this.getText());\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\n/**\r\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\r\n */\r\nclass LiquidTagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax');\r\n this.tokenizer.skipBlank();\r\n }\r\n get args() {\r\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\n/**\r\n * value expression with optional filters\r\n * e.g.\r\n * {% assign foo=\"bar\" | append: \"coo\" %}\r\n */\r\nclass FilteredValueToken extends Token {\r\n constructor(initial, filters, input, begin, end, file) {\r\n super(TokenKind.FilteredValue, input, begin, end, file);\r\n this.initial = initial;\r\n this.filters = filters;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nconst polyfill = {\r\n now: () => Date.now()\r\n};\r\nfunction getPerformance() {\r\n return (typeof global === 'object' && global.performance) ||\r\n (typeof window === 'object' && window.performance) ||\r\n polyfill;\r\n}\n\nclass Render {\r\n renderTemplatesToNodeStream(templates, ctx) {\r\n const emitter = new StreamedEmitter();\r\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\r\n .then(() => emitter.end(), err => emitter.error(err));\r\n return emitter.stream;\r\n }\r\n *renderTemplates(templates, ctx, emitter) {\r\n if (!emitter) {\r\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter();\r\n }\r\n ctx.renderLimit.check(getPerformance().now());\r\n const errors = [];\r\n for (const tpl of templates) {\r\n ctx.renderLimit.check(getPerformance().now());\r\n try {\r\n // if tpl.render supports emitter, it'll return empty `html`\r\n const html = yield tpl.render(ctx, emitter);\r\n // if not, it'll return an `html`, write to the emitter for it\r\n html && emitter.write(html);\r\n if (ctx.breakCalled || ctx.continueCalled)\r\n break;\r\n }\r\n catch (e) {\r\n const err = LiquidError.is(e) ? e : new RenderError(e, tpl);\r\n if (ctx.opts.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length) {\r\n throw new LiquidErrors(errors);\r\n }\r\n return emitter.buffer;\r\n }\r\n}\n\nclass Expression {\r\n constructor(tokens) {\r\n this.postfix = [...toPostfix(tokens)];\r\n }\r\n *evaluate(ctx, lenient) {\r\n assert(ctx, 'unable to evaluate: context not defined');\r\n const operands = [];\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = operands.pop();\r\n let result;\r\n if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) {\r\n result = yield ctx.opts.operators[token.operator](r, ctx);\r\n }\r\n else {\r\n const l = operands.pop();\r\n result = yield ctx.opts.operators[token.operator](l, r, ctx);\r\n }\r\n operands.push(result);\r\n }\r\n else {\r\n operands.push(yield evalToken(token, ctx, lenient));\r\n }\r\n }\r\n return operands[0];\r\n }\r\n valid() {\r\n return !!this.postfix.length;\r\n }\r\n}\r\nfunction* evalToken(token, ctx, lenient = false) {\r\n if (!token)\r\n return;\r\n if ('content' in token)\r\n return token.content;\r\n if (isPropertyAccessToken(token))\r\n return yield evalPropertyAccessToken(token, ctx, lenient);\r\n if (isRangeToken(token))\r\n return yield evalRangeToken(token, ctx);\r\n}\r\nfunction* evalPropertyAccessToken(token, ctx, lenient) {\r\n const props = [];\r\n for (const prop of token.props) {\r\n props.push((yield evalToken(prop, ctx, false)));\r\n }\r\n try {\r\n if (token.variable) {\r\n const variable = yield evalToken(token.variable, ctx, lenient);\r\n return yield ctx._getFromScope(variable, props);\r\n }\r\n else {\r\n return yield ctx._get(props);\r\n }\r\n }\r\n catch (e) {\r\n if (lenient && e.name === 'InternalUndefinedVariableError')\r\n return null;\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n}\r\nfunction evalQuotedToken(token) {\r\n return token.content;\r\n}\r\nfunction* evalRangeToken(token, ctx) {\r\n const low = yield evalToken(token.lhs, ctx);\r\n const high = yield evalToken(token.rhs, ctx);\r\n ctx.memoryLimit.use(high - low + 1);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n val = toValue(val);\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst defaultOperators = {\r\n '==': equals,\r\n '!=': (l, r) => !equals(l, r),\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return toValue(l) > toValue(r);\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return toValue(l) < toValue(r);\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return toValue(l) >= toValue(r);\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return toValue(l) <= toValue(r);\r\n },\r\n 'contains': (l, r) => {\r\n l = toValue(l);\r\n if (isArray(l))\r\n return l.some((i) => equals(i, r));\r\n if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf))\r\n return l.indexOf(toValue(r)) > -1;\r\n return false;\r\n },\r\n 'not': (v, ctx) => isFalsy(toValue(v), ctx),\r\n 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\r\n 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\r\n};\r\nfunction equals(lhs, rhs) {\r\n if (isComparable(lhs))\r\n return lhs.equals(rhs);\r\n if (isComparable(rhs))\r\n return rhs.equals(lhs);\r\n lhs = toValue(lhs);\r\n rhs = toValue(rhs);\r\n if (isArray(lhs)) {\r\n return isArray(rhs) && arrayEquals(lhs, rhs);\r\n }\r\n return lhs === rhs;\r\n}\r\nfunction arrayEquals(lhs, rhs) {\r\n if (lhs.length !== rhs.length)\r\n return false;\r\n return !lhs.some((value, i) => !equals(value, rhs[i]));\r\n}\r\nfunction arrayIncludes(arr, item) {\r\n return arr.some(value => equals(value, item));\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nfunction readFile(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nfunction exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return true;\r\n });\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\r\nfunction dirname(filepath) {\r\n return domResolve(filepath, '.');\r\n}\r\nconst sep = '/';\n\nvar fs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync,\n dirname: dirname,\n sep: sep\n});\n\nfunction defaultFilter(value, defaultValue, ...args) {\r\n value = toValue(value);\r\n if (isArray(value) || isString(value))\r\n return value.length ? value : defaultValue;\r\n if (value === false && (new Map(args)).get('allow_false'))\r\n return false;\r\n return isFalsy(value, this.context) ? defaultValue : value;\r\n}\r\nfunction json(value, space = 0) {\r\n return JSON.stringify(value, null, space);\r\n}\r\nfunction inspect(value, space = 0) {\r\n const ancestors = [];\r\n return JSON.stringify(value, function (_key, value) {\r\n if (typeof value !== 'object' || value === null)\r\n return value;\r\n // `this` is the object that value is contained in, i.e., its direct parent.\r\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this)\r\n ancestors.pop();\r\n if (ancestors.includes(value))\r\n return '[Circular]';\r\n ancestors.push(value);\r\n return value;\r\n }, space);\r\n}\r\nfunction to_integer(value) {\r\n return Number(value);\r\n}\r\nconst raw = {\r\n raw: true,\r\n handler: identify\r\n};\r\nvar misc = {\r\n default: defaultFilter,\r\n raw,\r\n jsonify: json,\r\n to_integer,\r\n json,\r\n inspect\r\n};\n\nconst escapeMap = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&#34;',\r\n \"'\": '&#39;'\r\n};\r\nconst unescapeMap = {\r\n '&amp;': '&',\r\n '&lt;': '<',\r\n '&gt;': '>',\r\n '&#34;': '\"',\r\n '&#39;': \"'\"\r\n};\r\nfunction escape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction xml_escape(str) {\r\n return escape.call(this, str);\r\n}\r\nfunction unescape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escape_once(str) {\r\n return escape.call(this, unescape.call(this, str));\r\n}\r\nfunction newline_to_br(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '<br />\\n');\r\n}\r\n// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex\r\n// equivalent is O(n^2) in V8 on unclosed openers.\r\nfunction strip_html(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const blocks = new Map([['<script', '</script>'], ['<style', '</style>'], ['<!--', '-->'], ['<', '>']]);\r\n let out = '';\r\n let i = 0;\r\n while (i < str.length) {\r\n const lt = str.indexOf('<', i);\r\n if (lt < 0)\r\n return out + str.slice(i);\r\n out += str.slice(i, lt);\r\n for (const [opener, closer] of blocks) {\r\n if (!str.startsWith(opener, lt))\r\n continue;\r\n const e = str.indexOf(closer, lt + opener.length);\r\n if (e >= 0) {\r\n i = e + closer.length;\r\n break;\r\n }\r\n blocks.delete(opener);\r\n }\r\n if (i <= lt)\r\n return out + str.slice(lt);\r\n }\r\n return out;\r\n}\n\nvar htmlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n escape: escape,\n xml_escape: xml_escape,\n escape_once: escape_once,\n newline_to_br: newline_to_br,\n strip_html: strip_html\n});\n\nclass MapFS {\r\n constructor(mapping) {\r\n this.mapping = mapping;\r\n this.sep = '/';\r\n }\r\n exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.existsSync(filepath);\r\n });\r\n }\r\n existsSync(filepath) {\r\n return !isNil(this.mapping[filepath]);\r\n }\r\n readFile(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.readFileSync(filepath);\r\n });\r\n }\r\n readFileSync(filepath) {\r\n const content = this.mapping[filepath];\r\n if (isNil(content))\r\n throw new Error(`ENOENT: ${filepath}`);\r\n return content;\r\n }\r\n dirname(filepath) {\r\n const segments = filepath.split(this.sep);\r\n segments.pop();\r\n return segments.join(this.sep);\r\n }\r\n resolve(dir, file, ext) {\r\n file += ext;\r\n if (dir === '.')\r\n return file;\r\n const segments = dir.split(/\\/+/);\r\n for (const segment of file.split(this.sep)) {\r\n if (segment === '.' || segment === '')\r\n continue;\r\n else if (segment === '..') {\r\n if (segments.length > 1 || segments[0] !== '')\r\n segments.pop();\r\n }\r\n else\r\n segments.push(segment);\r\n }\r\n return segments.join(this.sep);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n layouts: ['.'],\r\n partials: ['.'],\r\n relativeReference: true,\r\n jekyllInclude: false,\r\n keyValueSeparator: ':',\r\n cache: undefined,\r\n extname: '',\r\n fs: fs,\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\r\n locale: '',\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n preserveTimezones: false,\r\n strictFilters: false,\r\n strictVariables: false,\r\n ownPropertyOnly: true,\r\n lenientIf: false,\r\n globals: {},\r\n keepOutputType: false,\r\n operators: defaultOperators,\r\n memoryLimit: Infinity,\r\n parseLimit: Infinity,\r\n renderLimit: Infinity\r\n};\r\nfunction normalize(options) {\r\n var _a, _b;\r\n if (options.hasOwnProperty('root')) {\r\n if (!options.hasOwnProperty('partials'))\r\n options.partials = options.root;\r\n if (!options.hasOwnProperty('layouts'))\r\n options.layouts = options.root;\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options);\r\n if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) {\r\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning');\r\n options.relativeReference = false;\r\n }\r\n options.root = normalizeDirectoryList(options.root);\r\n options.partials = normalizeDirectoryList(options.partials);\r\n options.layouts = normalizeDirectoryList(options.layouts);\r\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape);\r\n if (!options.locale) {\r\n options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US';\r\n }\r\n if (options.templates) {\r\n options.fs = new MapFS(options.templates);\r\n options.relativeReference = true;\r\n options.root = options.partials = options.layouts = '.';\r\n }\r\n return options;\r\n}\r\nfunction getOutputEscapeFunction(nameOrFunction) {\r\n if (nameOrFunction === 'escape')\r\n return escape;\r\n if (nameOrFunction === 'json')\r\n return misc.json;\r\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');\r\n return nameOrFunction;\r\n}\r\nfunction normalizeDirectoryList(value) {\r\n let list = [];\r\n if (isArray(value))\r\n list = value;\r\n if (isString(value))\r\n list = [value];\r\n return list;\r\n}\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Tokenizer {\r\n constructor(input, operators = defaultOptions.operators, file, range) {\r\n this.input = input;\r\n this.file = file;\r\n this.rawBeginAt = -1;\r\n this.p = range ? range[0] : 0;\r\n this.N = range ? range[1] : input.length;\r\n this.opTrie = createTrie(operators);\r\n this.literalTrie = createTrie(literalValues);\r\n }\r\n readExpression() {\r\n return new Expression(this.readExpressionTokens());\r\n }\r\n *readExpressionTokens() {\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (operator) {\r\n yield operator;\r\n continue;\r\n }\r\n const operand = this.readValue();\r\n if (operand) {\r\n yield operand;\r\n continue;\r\n }\r\n return;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.opTrie);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n matchTrie(trie) {\r\n let node = trie;\r\n let i = this.p;\r\n let info;\r\n while (node[this.input[i]] && i < this.N) {\r\n node = node[this.input[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && isWord(this.peek(i - this.p)))\r\n return -1;\r\n return i;\r\n }\r\n readFilteredValue() {\r\n const begin = this.p;\r\n const initial = this.readExpression();\r\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`);\r\n const filters = this.readFilters();\r\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n this.assert(this.read() === '|', `expected \"|\" before filter`);\r\n const name = this.readIdentifier();\r\n if (!name.size()) {\r\n this.assert(this.end(), `expected filter name`);\r\n return null;\r\n }\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n this.skipBlank();\r\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`);\r\n } while (this.peek() === ',');\r\n }\r\n else if (this.peek() === '|' || this.end()) ;\r\n else {\r\n throw this.error('expected \":\" after filter name');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]);\r\n }\r\n readHTMLToken(stopStrings) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n if (stopStrings.some(str => this.match(str)))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const begin = this.p;\r\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\r\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readToDelimiter(delimiter, respectQuoted = false) {\r\n this.skipBlank();\r\n while (this.p < this.N) {\r\n if (respectQuoted && (this.peekType() & QUOTE)) {\r\n this.readQuoted();\r\n continue;\r\n }\r\n ++this.p;\r\n if (this.rmatch(delimiter))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readOutputToken(options = defaultOptions) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\r\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n readLiquidTagTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readLiquidTagToken(options);\r\n token && tokens.push(token);\r\n }\r\n return tokens;\r\n }\r\n readLiquidTagToken(options) {\r\n this.skipBlank();\r\n if (this.end())\r\n return;\r\n const begin = this.p;\r\n this.readToDelimiter('\\n');\r\n const end = this.p;\r\n return new LiquidTagToken(this.input, begin, end, options, this.file);\r\n }\r\n error(msg, pos = this.p) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file));\r\n }\r\n assert(pred, msg, pos) {\r\n if (!pred)\r\n throw this.error(typeof msg === 'function' ? msg() : msg, pos);\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32));\r\n }\r\n /**\r\n * @deprecated use #readIdentifier instead\r\n */\r\n readWord() {\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (!this.end() && isWord(this.peek()))\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readNonEmptyIdentifier() {\r\n const id = this.readIdentifier();\r\n return id.size() ? id : undefined;\r\n }\r\n readTagName() {\r\n this.skipBlank();\r\n // Handle inline comment tags\r\n if (this.input[this.p] === '#')\r\n return this.input.slice(this.p, ++this.p);\r\n return this.readIdentifier().getText();\r\n }\r\n readHashes(jekyllStyle) {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash(jekyllStyle);\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash(jekyllStyle) {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readNonEmptyIdentifier();\r\n if (!name)\r\n return;\r\n let value;\r\n this.skipBlank();\r\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':');\r\n if (this.peek() === sep) {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p, this.N);\r\n }\r\n advance(step = 1) {\r\n this.p += step;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n read() {\r\n return this.input[this.p++];\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const variable = this.readLiteral() || this.readQuoted() || this.readRange() || this.readNumber();\r\n const props = this.readProperties(!variable);\r\n if (!props.length)\r\n return variable;\r\n return new PropertyAccessToken(variable, props, this.input, begin, this.p);\r\n }\r\n readScopeValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const props = this.readProperties();\r\n if (!props.length)\r\n return undefined;\r\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p);\r\n }\r\n readProperties(isBegin = true) {\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.assert(this.readTo(']') !== -1, '[ not closed');\r\n props.push(prop);\r\n continue;\r\n }\r\n if (isBegin && !props.length) {\r\n const prop = this.readNonEmptyIdentifier();\r\n if (prop) {\r\n props.push(prop);\r\n continue;\r\n }\r\n }\r\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readNonEmptyIdentifier();\r\n if (!prop)\r\n break;\r\n props.push(prop);\r\n continue;\r\n }\r\n break;\r\n }\r\n return props;\r\n }\r\n readNumber() {\r\n this.skipBlank();\r\n let decimalFound = false;\r\n let digitFound = false;\r\n let n = 0;\r\n if (this.peekType() & SIGN)\r\n n++;\r\n while (this.p + n <= this.N) {\r\n if (this.peekType(n) & NUMBER) {\r\n digitFound = true;\r\n n++;\r\n }\r\n else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\r\n if (decimalFound || !digitFound)\r\n return;\r\n decimalFound = true;\r\n n++;\r\n }\r\n else\r\n break;\r\n }\r\n if (digitFound && !isWord(this.peek(n))) {\r\n const num = new NumberToken(this.input, this.p, this.p + n, this.file);\r\n this.advance(n);\r\n return num;\r\n }\r\n }\r\n readLiteral() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.literalTrie);\r\n if (end === -1)\r\n return;\r\n const literal = new LiteralToken(this.input, this.p, end, this.file);\r\n this.p = end;\r\n return literal;\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === '.' && this.read() === '.', 'invalid range syntax');\r\n const rhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === ')', 'invalid range syntax');\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n *readFileNameTemplate(options) {\r\n const { outputDelimiterLeft } = options;\r\n const htmlStopStrings = [',', ' ', '\\r', '\\n', '\\t', outputDelimiterLeft];\r\n const htmlStopStringSet = new Set(htmlStopStrings);\r\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\r\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\r\n yield this.match(outputDelimiterLeft)\r\n ? this.readOutputToken(options)\r\n : this.readHTMLToken(htmlStopStrings);\r\n }\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.p + n >= this.N ? '' : this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h.call(this, arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, remainTokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n this.liquid = liquid;\r\n this.tokenizer = token.tokenizer;\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(input, jekyllStyle) {\r\n this.hash = {};\r\n const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {});\r\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createTagClass(options) {\r\n return class extends Tag {\r\n constructor(token, tokens, liquid) {\r\n super(token, tokens, liquid);\r\n if (isFunction(options.parse)) {\r\n options.parse.call(this, token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx));\r\n return yield options.render.call(this, ctx, emitter, hash);\r\n }\r\n };\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(token, options, liquid) {\r\n this.token = token;\r\n this.name = token.name;\r\n this.handler = isFunction(options)\r\n ? options\r\n : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify);\r\n this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw);\r\n this.args = token.args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(input, liquid) {\r\n this.filters = [];\r\n const token = typeof input === 'string'\r\n ? new Tokenizer(input, liquid.options.operators).readFilteredValue()\r\n : input;\r\n this.initial = token.initial;\r\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid));\r\n }\r\n *value(ctx, lenient) {\r\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default');\r\n let val = yield this.initial.evaluate(ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n getFilter(liquid, name) {\r\n const impl = liquid.filters[name];\r\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, liquid) {\r\n var _a;\r\n super(token);\r\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange);\r\n this.value = new Value(tokenizer.readFilteredValue(), liquid);\r\n const filters = this.value.filters;\r\n const outputEscape = liquid.options.outputEscape;\r\n if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) {\r\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0);\r\n filters.push(new Filter(token, outputEscape, liquid));\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\n/**\r\n * A variable's segments and location, which can be coerced to a string.\r\n */\r\nclass Variable {\r\n constructor(segments, location) {\r\n this.segments = segments;\r\n this.location = location;\r\n }\r\n toString() {\r\n return segmentsString(this.segments, true);\r\n }\r\n /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */\r\n toArray() {\r\n function* _visit(...segments) {\r\n for (const segment of segments) {\r\n if (segment instanceof Variable) {\r\n yield Array.from(_visit(...segment.segments));\r\n }\r\n else {\r\n yield segment;\r\n }\r\n }\r\n }\r\n return Array.from(_visit(...this.segments));\r\n }\r\n}\r\n/**\r\n * Group variables by the string representation of their root segment.\r\n */\r\nclass VariableMap {\r\n constructor() {\r\n this.map = new Map();\r\n }\r\n get(key) {\r\n const k = segmentsString([key.segments[0]]);\r\n if (!this.map.has(k)) {\r\n this.map.set(k, []);\r\n }\r\n return this.map.get(k);\r\n }\r\n has(key) {\r\n return this.map.has(segmentsString([key.segments[0]]));\r\n }\r\n push(variable) {\r\n this.get(variable).push(variable);\r\n }\r\n asObject() {\r\n return Object.fromEntries(this.map);\r\n }\r\n}\r\nconst defaultStaticAnalysisOptions = {\r\n partials: true\r\n};\r\nfunction* _analyze(templates, partials, sync) {\r\n const variables = new VariableMap();\r\n const globals = new VariableMap();\r\n const locals = new VariableMap();\r\n const rootScope = new DummyScope(new Set());\r\n // Names of partial templates that we've already analyzed.\r\n const seen = new Set();\r\n function updateVariables(variable, scope) {\r\n variables.push(variable);\r\n const aliased = scope.alias(variable);\r\n if (aliased !== undefined) {\r\n const root = aliased.segments[0];\r\n // TODO: What if a a template renders a rendered template? Do we need scope.parent?\r\n if (isString(root) && !rootScope.has(root)) {\r\n globals.push(aliased);\r\n }\r\n }\r\n else {\r\n const root = variable.segments[0];\r\n if (isString(root) && !scope.has(root)) {\r\n globals.push(variable);\r\n }\r\n }\r\n // Recurse for nested Variables\r\n for (const segment of variable.segments) {\r\n if (segment instanceof Variable) {\r\n updateVariables(segment, scope);\r\n }\r\n }\r\n }\r\n function* visit(template, scope) {\r\n if (template.arguments) {\r\n for (const arg of template.arguments()) {\r\n for (const variable of extractVariables(arg)) {\r\n updateVariables(variable, scope);\r\n }\r\n }\r\n }\r\n if (template.localScope) {\r\n for (const ident of template.localScope()) {\r\n scope.add(ident.content);\r\n scope.deleteAlias(ident.content);\r\n const [row, col] = ident.getPosition();\r\n locals.push(new Variable([ident.content], { row, col, file: ident.file }));\r\n }\r\n }\r\n if (template.children) {\r\n if (template.partialScope) {\r\n const partial = template.partialScope();\r\n if (partial === undefined) {\r\n // Layouts, for example, can have children that are not partials.\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n return;\r\n }\r\n if (seen.has(partial.name))\r\n return;\r\n const partialScopeNames = new Set();\r\n const partialScope = partial.isolated\r\n ? new DummyScope(partialScopeNames)\r\n : scope.push(partialScopeNames);\r\n for (const name of partial.scope) {\r\n if (isString(name)) {\r\n partialScopeNames.add(name);\r\n }\r\n else {\r\n const [alias, argument] = name;\r\n partialScopeNames.add(alias);\r\n const variables = Array.from(extractVariables(argument));\r\n if (variables.length) {\r\n partialScope.setAlias(alias, variables[0].segments);\r\n }\r\n }\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, partialScope);\r\n seen.add(partial.name);\r\n }\r\n partialScope.pop();\r\n }\r\n else {\r\n if (template.blockScope) {\r\n scope.push(new Set(template.blockScope()));\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n if (template.blockScope) {\r\n scope.pop();\r\n }\r\n }\r\n }\r\n }\r\n for (const template of templates) {\r\n yield visit(template, rootScope);\r\n }\r\n return {\r\n variables: variables.asObject(),\r\n globals: globals.asObject(),\r\n locals: locals.asObject()\r\n };\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyze(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toPromise(_analyze(template, opts.partials, false));\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyzeSync(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toValueSync(_analyze(template, opts.partials, true));\r\n}\r\n/**\r\n * A stack to manage scopes while traversing templates during static analysis.\r\n */\r\nclass DummyScope {\r\n constructor(globals) {\r\n this.stack = [{ names: globals, aliases: new Map() }];\r\n }\r\n /** Return true if `name` is in scope. */\r\n has(name) {\r\n for (const scope of this.stack) {\r\n if (scope.names.has(name)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n push(scope) {\r\n this.stack.push({ names: scope, aliases: new Map() });\r\n return this;\r\n }\r\n pop() {\r\n var _a;\r\n return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names;\r\n }\r\n // Add a name to the template scope.\r\n add(name) {\r\n this.stack[0].names.add(name);\r\n }\r\n /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */\r\n alias(variable) {\r\n const root = variable.segments[0];\r\n if (!isString(root))\r\n return undefined;\r\n const alias = this.getAlias(root);\r\n if (alias === undefined)\r\n return undefined;\r\n return new Variable([...alias, ...variable.segments.slice(1)], variable.location);\r\n }\r\n // TODO: `from` could be a path with multiple segments, like `include.x`.\r\n setAlias(from, to) {\r\n this.stack[this.stack.length - 1].aliases.set(from, to);\r\n }\r\n deleteAlias(name) {\r\n this.stack[this.stack.length - 1].aliases.delete(name);\r\n }\r\n getAlias(name) {\r\n for (const scope of this.stack) {\r\n if (scope.aliases.has(name)) {\r\n return scope.aliases.get(name);\r\n }\r\n // If a scope has defined `name`, then it masks aliases in parent scopes.\r\n if (scope.names.has(name)) {\r\n return undefined;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\nfunction* extractVariables(value) {\r\n if (isValueToken(value)) {\r\n yield* extractValueTokenVariables(value);\r\n }\r\n else if (value instanceof Value) {\r\n yield* extractFilteredValueVariables(value);\r\n }\r\n}\r\nfunction* extractFilteredValueVariables(value) {\r\n for (const token of value.initial.postfix) {\r\n if (isValueToken(token)) {\r\n yield* extractValueTokenVariables(token);\r\n }\r\n }\r\n for (const filter of value.filters) {\r\n for (const arg of filter.args) {\r\n if (isKeyValuePair(arg) && arg[1]) {\r\n yield* extractValueTokenVariables(arg[1]);\r\n }\r\n else if (isValueToken(arg)) {\r\n yield* extractValueTokenVariables(arg);\r\n }\r\n }\r\n }\r\n}\r\nfunction* extractValueTokenVariables(token) {\r\n if (isRangeToken(token)) {\r\n yield* extractValueTokenVariables(token.lhs);\r\n yield* extractValueTokenVariables(token.rhs);\r\n }\r\n else if (isPropertyAccessToken(token)) {\r\n yield extractPropertyAccessVariable(token);\r\n }\r\n}\r\nfunction extractPropertyAccessVariable(token) {\r\n const segments = [];\r\n // token is not guaranteed to have `file` set. We'll try to get it from a prop if not.\r\n let file = token.file;\r\n // Here we're flattening the first segment of a path if it is a nested path.\r\n const root = token.props[0];\r\n file = file || root.file;\r\n if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) {\r\n segments.push(root.content);\r\n }\r\n else if (isPropertyAccessToken(root)) {\r\n // Flatten paths that start with a nested path.\r\n segments.push(...extractPropertyAccessVariable(root).segments);\r\n }\r\n for (const prop of token.props.slice(1)) {\r\n file = file || prop.file;\r\n if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) {\r\n segments.push(prop.content);\r\n }\r\n else if (isPropertyAccessToken(prop)) {\r\n segments.push(extractPropertyAccessVariable(prop));\r\n }\r\n }\r\n const [row, col] = token.getPosition();\r\n return new Variable(segments, {\r\n row,\r\n col,\r\n file\r\n });\r\n}\r\n// This is used to detect segments that can be represented with dot notation\r\n// when creating a string representation of VariableSegments.\r\nconst RE_PROPERTY = /^[\\u0080-\\uFFFFa-zA-Z_][\\u0080-\\uFFFFa-zA-Z0-9_-]*$/;\r\n/**\r\n * Return a string representation of segments using dot notation where possible.\r\n * @param segments - The property names and array indices that make up a path to a variable.\r\n * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets.\r\n */\r\nfunction segmentsString(segments, bracketedRoot = false) {\r\n const buf = [];\r\n const root = segments[0];\r\n if (isString(root)) {\r\n if (!bracketedRoot || root.match(RE_PROPERTY)) {\r\n buf.push(`${root}`);\r\n }\r\n else {\r\n buf.push(`['${root}']`);\r\n }\r\n }\r\n for (const segment of segments.slice(1)) {\r\n if (segment instanceof Variable) {\r\n buf.push(`[${segmentsString(segment.segments)}]`);\r\n }\r\n else if (isString(segment)) {\r\n if (segment.match(RE_PROPERTY)) {\r\n buf.push(`.${segment}`);\r\n }\r\n else {\r\n buf.push(`['${segment}']`);\r\n }\r\n }\r\n else {\r\n buf.push(`[${segment}]`);\r\n }\r\n }\r\n return buf.join('');\r\n}\n\nvar LookupType;\r\n(function (LookupType) {\r\n LookupType[\"Partials\"] = \"partials\";\r\n LookupType[\"Layouts\"] = \"layouts\";\r\n LookupType[\"Root\"] = \"root\";\r\n})(LookupType || (LookupType = {}));\r\nclass Loader {\r\n constructor(options) {\r\n var _a, _b, _c, _d;\r\n this.options = options;\r\n if (options.relativeReference) {\r\n const sep = options.fs.sep;\r\n assert(sep, '`fs.sep` is required for relative reference');\r\n const prefixes = ['.' + sep, '..' + sep, './', '../'];\r\n this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix));\r\n }\r\n else {\r\n this.shouldLoadRelative = (_referencedFile) => false;\r\n }\r\n const fs = options.fs;\r\n this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return true; })), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (() => true));\r\n this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return false; })), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs));\r\n }\r\n *lookup(file, type, sync, currentFile) {\r\n const dirs = this.options[type];\r\n for (const filepath of this.candidates(file, dirs, currentFile)) {\r\n let allowed = false;\r\n for (const dir of dirs) {\r\n if (yield this.contains(!!sync, dir, filepath)) {\r\n allowed = true;\r\n break;\r\n }\r\n }\r\n if (!allowed)\r\n continue;\r\n if (yield this.exists(!!sync, filepath))\r\n return filepath;\r\n }\r\n throw this.lookupError(file, dirs);\r\n }\r\n *candidates(file, dirs, currentFile) {\r\n const { fs, extname } = this.options;\r\n if (this.shouldLoadRelative(file) && currentFile) {\r\n const referenced = fs.resolve(this.dirname(currentFile), file, extname);\r\n yield referenced;\r\n }\r\n for (const dir of dirs) {\r\n const referenced = fs.resolve(dir, file, extname);\r\n yield referenced;\r\n }\r\n if (fs.fallback !== undefined) {\r\n const filepath = fs.fallback(file);\r\n if (filepath !== undefined)\r\n yield filepath;\r\n }\r\n }\r\n dirname(path) {\r\n const fs = this.options.fs;\r\n assert(fs.dirname, '`fs.dirname` is required for relative reference');\r\n return fs.dirname(path);\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n var _a, _b;\r\n this.liquid = liquid;\r\n this.cache = this.liquid.options.cache;\r\n this.fs = this.liquid.options.fs;\r\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile;\r\n this.loader = new Loader(this.liquid.options);\r\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit);\r\n this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (() => __awaiter(this, void 0, void 0, function* () { throw new Error('readFile not implemented'); })), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs));\r\n }\r\n parse(html, filepath) {\r\n html = String(html);\r\n this.parseLimit.use(html.length);\r\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options);\r\n return this.parseTokens(tokens);\r\n }\r\n parseTokens(tokens) {\r\n let token;\r\n const templates = [];\r\n const errors = [];\r\n while ((token = tokens.shift())) {\r\n try {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n catch (err) {\r\n if (this.liquid.options.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length)\r\n throw new LiquidErrors(errors);\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n const TagClass = this.liquid.tags[token.name];\r\n assert(TagClass, `tag \"${token.name}\" not found`);\r\n return new TagClass(token, remainTokens, this.liquid, this);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n if (LiquidError.is(e))\r\n throw e;\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n *_parseFileCached(file, sync, type = LookupType.Root, currentFile) {\r\n const cache = this.cache;\r\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file;\r\n const tpls = yield cache.read(key);\r\n if (tpls)\r\n return tpls;\r\n const task = this._parseFile(file, sync, type, currentFile);\r\n // sync mode: exec the task and cache the result\r\n // async mode: cache the task before exec\r\n const taskOrTpl = sync ? yield task : toPromise(task);\r\n cache.write(key, taskOrTpl);\r\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\r\n try {\r\n return yield taskOrTpl;\r\n }\r\n catch (err) {\r\n cache.remove(key);\r\n throw err;\r\n }\r\n }\r\n *_parseFile(file, sync, type = LookupType.Root, currentFile) {\r\n const filepath = yield this.loader.lookup(file, type, sync, currentFile);\r\n return this.parse(yield this.readFile(!!sync, filepath), filepath);\r\n }\r\n}\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"FilteredValue\"] = 4096] = \"FilteredValue\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction isValueToken(val) {\r\n // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range\r\n return (getKind(val) & 1667) > 0;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken,\n isValueToken: isValueToken\n});\n\nfunction createScope(from) {\r\n const scope = Object.create(null);\r\n if (from)\r\n Object.assign(scope, from);\r\n return scope;\r\n}\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit } = {}) {\r\n var _a, _b, _c, _d, _e;\r\n /**\r\n * insert a Context-level empty scope,\r\n * for tags like `{% capture %}` `{% assign %}` to operate\r\n */\r\n this.scopes = [createScope()];\r\n this.registers = {};\r\n this.breakCalled = false;\r\n this.continueCalled = false;\r\n this.sync = !!renderOptions.sync;\r\n this.opts = opts;\r\n this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals;\r\n this.environments = isObject(env) ? env : Object(env);\r\n this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables;\r\n this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly;\r\n this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit);\r\n this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit));\r\n }\r\n getRegister(key, defaultValue = undefined) {\r\n return (this.registers[key] = this.registers[key] || defaultValue);\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n /**\r\n * @deprecated use `_get()` or `getSync()` instead\r\n */\r\n get(paths) {\r\n return this.getSync(paths);\r\n }\r\n getSync(paths) {\r\n return toValueSync(this._get(paths));\r\n }\r\n *_get(paths) {\r\n const scope = this.findScope(paths[0]); // first prop should always be a string\r\n return yield this._getFromScope(scope, paths);\r\n }\r\n /**\r\n * @deprecated use `_get()` instead\r\n */\r\n getFromScope(scope, paths) {\r\n return toValueSync(this._getFromScope(scope, paths));\r\n }\r\n *_getFromScope(scope, paths, strictVariables = this.strictVariables) {\r\n if (isString(paths))\r\n paths = paths.split('.');\r\n for (let i = 0; i < paths.length; i++) {\r\n scope = yield this.readProperty(scope, paths[i]);\r\n if (strictVariables && isUndefined(scope)) {\r\n throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.'));\r\n }\r\n }\r\n return scope;\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n spawn(scope = {}) {\r\n return new Context(scope, this.opts, {\r\n sync: this.sync,\r\n globals: this.globals,\r\n strictVariables: this.strictVariables,\r\n ownPropertyOnly: this.ownPropertyOnly\r\n }, {\r\n renderLimit: this.renderLimit,\r\n memoryLimit: this.memoryLimit\r\n });\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n readProperty(obj, key) {\r\n obj = toLiquid(obj);\r\n key = toValue(key);\r\n if (isNil(obj))\r\n return obj;\r\n if (isArray(obj) && key < 0)\r\n return obj[obj.length + +key];\r\n const value = readJSProperty(obj, key, this.ownPropertyOnly);\r\n if (value === undefined && obj instanceof Drop)\r\n return obj.liquidMethodMissing(key, this);\r\n if (isFunction(value))\r\n return value.call(obj);\r\n if (key === 'size')\r\n return readSize(obj);\r\n else if (key === 'first')\r\n return readFirst(obj);\r\n else if (key === 'last')\r\n return readLast(obj);\r\n return value;\r\n }\r\n}\r\nfunction readJSProperty(obj, key, ownPropertyOnly) {\r\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop))\r\n return undefined;\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined)\r\n return obj['size'];\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n if (typeof obj === 'object')\r\n return Object.keys(obj).length;\r\n}\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\n\nconst abs = argumentsToNumber(Math.abs);\r\nconst at_least = argumentsToNumber(Math.max);\r\nconst at_most = argumentsToNumber(Math.min);\r\nconst ceil = argumentsToNumber(Math.ceil);\r\nconst divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor);\r\nconst floor = argumentsToNumber(Math.floor);\r\nconst minus = argumentsToNumber((v, arg) => v - arg);\r\nconst plus = argumentsToNumber((lhs, rhs) => lhs + rhs);\r\nconst modulo = argumentsToNumber((v, arg) => v % arg);\r\nconst times = argumentsToNumber((v, arg) => v * arg);\r\nfunction round(v, arg = 0) {\r\n v = toNumber(v);\r\n arg = toNumber(arg);\r\n const amp = Math.pow(10, arg);\r\n const scaled = (v * amp) * (1 + Number.EPSILON);\r\n return Math.round(scaled) / amp;\r\n}\n\nvar mathFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n abs: abs,\n at_least: at_least,\n at_most: at_most,\n ceil: ceil,\n divided_by: divided_by,\n floor: floor,\n minus: minus,\n plus: plus,\n modulo: modulo,\n times: times,\n round: round\n});\n\nconst url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ');\r\nconst url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+');\r\nconst cgi_escape = (x) => encodeURIComponent(stringify(x))\r\n .replace(/%20/g, '+')\r\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());\r\nconst uri_escape = (x) => encodeURI(stringify(x))\r\n .replace(/%5B/g, '[')\r\n .replace(/%5D/g, ']');\r\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug;\r\nconst rSlugifyReplacers = {\r\n 'raw': /\\s+/g,\r\n 'default': rSlugifyDefault,\r\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\r\n 'ascii': /[^A-Za-z0-9]+/g,\r\n 'latin': rSlugifyDefault,\r\n 'none': null\r\n};\r\nfunction slugify(str, mode = 'default', cased = false) {\r\n str = stringify(str);\r\n const replacer = rSlugifyReplacers[mode];\r\n if (replacer) {\r\n if (mode === 'latin')\r\n str = removeAccents(str);\r\n str = str.replace(replacer, '-').replace(/^-|-$/g, '');\r\n }\r\n return cased ? str : str.toLowerCase();\r\n}\r\nfunction removeAccents(str) {\r\n return str.replace(/[àáâãäå]/g, 'a')\r\n .replace(/[æ]/g, 'ae')\r\n .replace(/[ç]/g, 'c')\r\n .replace(/[èéêë]/g, 'e')\r\n .replace(/[ìíîï]/g, 'i')\r\n .replace(/[ð]/g, 'd')\r\n .replace(/[ñ]/g, 'n')\r\n .replace(/[òóôõöø]/g, 'o')\r\n .replace(/[ùúûü]/g, 'u')\r\n .replace(/[ýÿ]/g, 'y')\r\n .replace(/[ß]/g, 'ss')\r\n .replace(/[œ]/g, 'oe')\r\n .replace(/[þ]/g, 'th')\r\n .replace(/[ẞ]/g, 'SS')\r\n .replace(/[Œ]/g, 'OE')\r\n .replace(/[Þ]/g, 'TH');\r\n}\n\nvar urlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n url_decode: url_decode,\n url_encode: url_encode,\n cgi_escape: cgi_escape,\n uri_escape: uri_escape,\n slugify: slugify\n});\n\nconst join = argumentsToValue(function (v, arg) {\r\n const array = toArray(v);\r\n const sep = isNil(arg) ? ' ' : stringify(arg);\r\n const complexity = array.length * (1 + sep.length);\r\n this.context.memoryLimit.use(complexity);\r\n return array.join(sep);\r\n});\r\nconst last$1 = argumentsToValue((v) => isArrayLike(v) ? last(v) : '');\r\nconst first = argumentsToValue((v) => isArrayLike(v) ? v[0] : '');\r\nconst reverse = argumentsToValue(function (v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].reverse();\r\n});\r\nfunction* sortBy(arr, property, comparator) {\r\n const values = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n values.push([\r\n item,\r\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\r\n ]);\r\n }\r\n return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]);\r\n}\r\nfunction* sort(arr, property) {\r\n return yield* sortBy.call(this, arr, property, orderedCompare);\r\n}\r\nfunction* sort_natural(arr, property) {\r\n return yield* sortBy.call(this, arr, property, caseInsensitiveCompare);\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction* map(arr, property) {\r\n const results = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n results.push(yield this.context._getFromScope(item, stringify(property), false));\r\n }\r\n return results;\r\n}\r\nfunction* sum(arr, property) {\r\n let sum = 0;\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item);\r\n sum += Number.isNaN(data) ? 0 : data;\r\n }\r\n return sum;\r\n}\r\nfunction compact(arr) {\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n return array.filter(x => !isNil(toValue(x)));\r\n}\r\nfunction concat(v, arg = []) {\r\n const lhs = toArray(v);\r\n const rhs = toArray(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs.concat(rhs);\r\n}\r\nfunction push(v, arg) {\r\n return concat.call(this, v, [arg]);\r\n}\r\nfunction unshift(v, arg) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.unshift(arg);\r\n return clone;\r\n}\r\nfunction pop(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.pop();\r\n return clone;\r\n}\r\nfunction shift(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.shift();\r\n return clone;\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n begin = begin < 0 ? v.length + begin : begin;\r\n this.context.memoryLimit.use(length);\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction expectedMatcher(expected) {\r\n if (this.context.opts.jekyllWhere) {\r\n return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected));\r\n }\r\n else if (expected === undefined) {\r\n return (v) => isTruthy(v, this.context);\r\n }\r\n else {\r\n return (v) => equals(v, expected);\r\n }\r\n}\r\nfunction* filter(include, arr, property, expected) {\r\n const values = [];\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n for (const item of arr) {\r\n values.push(yield evalToken(token, this.context.spawn(item)));\r\n }\r\n const matcher = expectedMatcher.call(this, expected);\r\n return arr.filter((_, i) => matcher(values[i]) === include);\r\n}\r\nfunction* filter_exp(include, arr, itemName, exp) {\r\n const filtered = [];\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n this.context.push({ [itemName]: item });\r\n const value = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (value === include)\r\n filtered.push(item);\r\n }\r\n return filtered;\r\n}\r\nfunction* where(arr, property, expected) {\r\n return yield* filter.call(this, true, arr, property, expected);\r\n}\r\nfunction* reject(arr, property, expected) {\r\n return yield* filter.call(this, false, arr, property, expected);\r\n}\r\nfunction* where_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, true, arr, itemName, exp);\r\n}\r\nfunction* reject_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, false, arr, itemName, exp);\r\n}\r\nfunction* group_by(arr, property) {\r\n const map = new Map();\r\n arr = toEnumerable(arr);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield evalToken(token, this.context.spawn(item));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* group_by_exp(arr, itemName, exp) {\r\n const map = new Map();\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n arr = toEnumerable(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n this.context.push({ [itemName]: item });\r\n const key = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* search(arr, property, expected) {\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n const array = toArray(arr);\r\n const matcher = expectedMatcher.call(this, expected);\r\n for (let index = 0; index < array.length; index++) {\r\n const value = yield evalToken(token, this.context.spawn(array[index]));\r\n if (matcher(value))\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* search_exp(arr, itemName, exp) {\r\n const predicate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n for (let index = 0; index < array.length; index++) {\r\n this.context.push({ [itemName]: array[index] });\r\n const value = yield predicate.value(this.context);\r\n this.context.pop();\r\n if (value)\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* has(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return !!result;\r\n}\r\nfunction* has_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return !!result;\r\n}\r\nfunction* find_index(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find_index_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction* find_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction uniq(arr) {\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n return [...new Set(arr)];\r\n}\r\nfunction sample(v, count = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n this.context.memoryLimit.use(v.length);\r\n const shuffled = [...v].sort(() => Math.random() - 0.5);\r\n if (count === 1)\r\n return shuffled[0];\r\n return shuffled.slice(0, count);\r\n}\n\nvar arrayFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n sort_natural: sort_natural,\n size: size,\n map: map,\n sum: sum,\n compact: compact,\n concat: concat,\n push: push,\n unshift: unshift,\n pop: pop,\n shift: shift,\n slice: slice,\n where: where,\n reject: reject,\n where_exp: where_exp,\n reject_exp: reject_exp,\n group_by: group_by,\n group_by_exp: group_by_exp,\n has: has,\n has_exp: has_exp,\n find_index: find_index,\n find_index_exp: find_index_exp,\n find: find,\n find_exp: find_exp,\n uniq: uniq,\n sample: sample\n});\n\nfunction date(v, format, timezoneOffset) {\r\n var _a, _b;\r\n const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _b !== void 0 ? _b : 0);\r\n this.context.memoryLimit.use(size);\r\n const date = parseDate(v, this.context.opts, timezoneOffset);\r\n if (!date)\r\n return v;\r\n format = toValue(format);\r\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format);\r\n this.context.memoryLimit.use(format.length);\r\n return strftime(date, format, this.context.memoryLimit);\r\n}\r\nfunction date_to_xmlschema(v) {\r\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z');\r\n}\r\nfunction date_to_rfc822(v) {\r\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z');\r\n}\r\nfunction date_to_string(v, type, style) {\r\n return stringify_date.call(this, v, '%b', type, style);\r\n}\r\nfunction date_to_long_string(v, type, style) {\r\n return stringify_date.call(this, v, '%B', type, style);\r\n}\r\nfunction stringify_date(v, month_type, type, style) {\r\n const date = parseDate(v, this.context.opts);\r\n if (!date)\r\n return v;\r\n const ml = this.context.memoryLimit;\r\n if (type === 'ordinal') {\r\n const d = date.getDate();\r\n return style === 'US'\r\n ? strftime(date, `${month_type} ${d}%q, %Y`, ml)\r\n : strftime(date, `${d}%q ${month_type} %Y`, ml);\r\n }\r\n return strftime(date, `%d ${month_type} %Y`, ml);\r\n}\r\nfunction parseDate(v, opts, timezoneOffset) {\r\n let date;\r\n const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset;\r\n const locale = opts.locale;\r\n v = toValue(v);\r\n if (isNil(v)) {\r\n return undefined;\r\n }\r\n else if (v === 'now' || v === 'today') {\r\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset);\r\n }\r\n else if (isNumber(v)) {\r\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (isString(v)) {\r\n if (/^\\d+$/.test(v)) {\r\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (opts.preserveTimezones && timezoneOffset === undefined) {\r\n date = LiquidDate.createDateFixedToTimezone(v, locale);\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n return date.valid() ? date : undefined;\r\n}\n\nvar dateFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n date: date,\n date_to_xmlschema: date_to_xmlschema,\n date_to_rfc822: date_to_rfc822,\n date_to_string: date_to_string,\n date_to_long_string: date_to_long_string\n});\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu;\r\n// Word boundary followed by word characters (for detecting words)\r\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu;\r\nfunction append(v, arg) {\r\n assert(arguments.length === 2, 'append expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs + rhs;\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arguments.length === 2, 'prepend expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return rhs + lhs;\r\n}\r\nfunction lstrip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = 0, set = new Set(chars); i < str.length; i++) {\r\n if (!set.has(str[i]))\r\n return str.slice(i);\r\n }\r\n return '';\r\n }\r\n return str.trimStart();\r\n}\r\nfunction downcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.toLowerCase();\r\n}\r\nfunction upcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n const str = stringify(v);\r\n arg = stringify(arg);\r\n this.context.memoryLimit.use(str.length + arg.length);\r\n return str.split(arg).join('');\r\n}\r\nfunction remove_first(v, l) {\r\n const str = stringify(v);\r\n l = stringify(l);\r\n this.context.memoryLimit.use(str.length + l.length);\r\n return str.replace(l, '');\r\n}\r\nfunction remove_last(v, l) {\r\n const str = stringify(v);\r\n const pattern = stringify(l);\r\n this.context.memoryLimit.use(str.length + pattern.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + str.substring(index + pattern.length);\r\n}\r\nfunction rstrip(str, chars) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) {\r\n if (!set.has(str[i]))\r\n return str.slice(0, i + 1);\r\n }\r\n return '';\r\n }\r\n return str.trimEnd();\r\n}\r\nfunction split(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(stringify(arg));\r\n // align to ruby split, which is the behavior of shopify/liquid\r\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\r\n while (arr.length && arr[arr.length - 1] === '')\r\n arr.pop();\r\n return arr;\r\n}\r\nfunction strip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n const set = new Set(stringify(chars));\r\n this.context.memoryLimit.use(set.size);\r\n let i = 0;\r\n let j = str.length - 1;\r\n while (set.has(str[i]))\r\n i++;\r\n while (j >= i && set.has(str[j]))\r\n j--;\r\n return str.slice(i, j + 1);\r\n }\r\n return str.trim();\r\n}\r\nfunction strip_newlines(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n const str = stringify(v);\r\n pattern = stringify(pattern);\r\n replacement = stringify(replacement);\r\n const parts = str.split(pattern);\r\n const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length);\r\n this.context.memoryLimit.use(outputSize);\r\n return parts.join(replacement);\r\n}\r\nfunction replace_first(v, arg1, arg2) {\r\n const str = stringify(v);\r\n arg1 = stringify(arg1);\r\n arg2 = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + arg1.length + arg2.length);\r\n return str.replace(arg1, () => arg2);\r\n}\r\nfunction replace_last(v, arg1, arg2) {\r\n const str = stringify(v);\r\n const pattern = stringify(arg1);\r\n const replacement = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + pattern.length + replacement.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + replacement + str.substring(index + pattern.length);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n if (str.length <= l)\r\n return v;\r\n return str.substring(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, words = 15, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n const arr = str.split(/\\s+/);\r\n if (words <= 0)\r\n words = 1;\r\n let ret = arr.slice(0, words).join(' ');\r\n if (arr.length >= words)\r\n ret += o;\r\n return ret;\r\n}\r\nfunction normalize_whitespace(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\s+/g, ' ');\r\n}\r\nfunction number_of_words(input, mode) {\r\n const str = stringify(input);\r\n this.context.memoryLimit.use(str.length);\r\n input = str.trim();\r\n if (!input)\r\n return 0;\r\n switch (mode) {\r\n case 'cjk':\r\n // Count CJK characters and words\r\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length;\r\n case 'auto':\r\n // Count CJK characters, if none, count words\r\n return rCJKWord.test(input)\r\n ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length\r\n : input.split(/\\s+/).length;\r\n default:\r\n // Count words only\r\n return input.split(/\\s+/).length;\r\n }\r\n}\r\nfunction array_to_sentence_string(array, connector = 'and') {\r\n connector = stringify(connector);\r\n this.context.memoryLimit.use(array.length + connector.length);\r\n switch (array.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return array[0];\r\n case 2:\r\n return `${array[0]} ${connector} ${array[1]}`;\r\n default:\r\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`;\r\n }\r\n}\n\nvar stringFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n remove_first: remove_first,\n remove_last: remove_last,\n rstrip: rstrip,\n split: split,\n strip: strip,\n strip_newlines: strip_newlines,\n capitalize: capitalize,\n replace: replace,\n replace_first: replace_first,\n replace_last: replace_last,\n truncate: truncate,\n truncatewords: truncatewords,\n normalize_whitespace: normalize_whitespace,\n number_of_words: number_of_words,\n array_to_sentence_string: array_to_sentence_string\n});\n\nfunction base64Encode(str) {\r\n return btoa(String.fromCharCode(...new TextEncoder().encode(str)));\r\n}\r\nfunction base64Decode(str) {\r\n return new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0)));\r\n}\n\n/**\r\n * Base64 related filters\r\n *\r\n * Implements base64_encode and base64_decode filters for Shopify compatibility\r\n */\r\nfunction base64_encode(value) {\r\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\r\n this.context.memoryLimit.use(value.byteLength);\r\n return value.toString('base64');\r\n }\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Encode(str);\r\n}\r\nfunction base64_decode(value) {\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Decode(str);\r\n}\n\nvar base64Filters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n base64_encode: base64_encode,\n base64_decode: base64_decode\n});\n\nfunction bufferToHex(buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let hex = '';\r\n for (let i = 0; i < bytes.length; i++) {\r\n hex += bytes[i].toString(16).padStart(2, '0');\r\n }\r\n return hex;\r\n}\r\nfunction sha256(str) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const data = new TextEncoder().encode(str);\r\n const digest = yield crypto.subtle.digest('SHA-256', data);\r\n return bufferToHex(digest);\r\n });\r\n}\r\nfunction hmacSha256(str, key) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const encoder = new TextEncoder();\r\n const cryptoKey = yield crypto.subtle.importKey('raw', encoder.encode(key), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\r\n const signature = yield crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str));\r\n return bufferToHex(signature);\r\n });\r\n}\n\n/**\r\n * Crypto related filters\r\n *\r\n * Implements sha256 and hmac_sha256 filters for Shopify compatibility\r\n */\r\nfunction sha256$1(value) {\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return sha256(str);\r\n}\r\nfunction hmac_sha256(value, key) {\r\n const str = stringify(value);\r\n const keyStr = stringify(key);\r\n this.context.memoryLimit.use(str.length + keyStr.length);\r\n return hmacSha256(str, keyStr);\r\n}\n\nvar cryptoFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n sha256: sha256$1,\n hmac_sha256: hmac_sha256\n});\n\nconst filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), cryptoFilters), misc);\n\nclass AssignTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.key = this.identifier.content;\r\n this.tokenizer.assert(this.key, 'expected variable name');\r\n this.tokenizer.skipBlank();\r\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"');\r\n this.tokenizer.advance();\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n *render(ctx) {\r\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nconst MODIFIERS = ['offset', 'limit', 'reversed'];\r\nclass ForTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n const inStr = this.tokenizer.readIdentifier();\r\n const collection = this.tokenizer.readValue();\r\n if (!variable.size() || inStr.content !== 'in' || !collection) {\r\n throw new Error(`illegal tag: ${token.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; })\r\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText();\r\n ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) }));\r\n const hash = (yield this.hash.render(ctx));\r\n ctx.pop();\r\n const modifiers = this.liquid.options.orderedFilterParameters\r\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\r\n : MODIFIERS.filter(x => hash[x] !== undefined);\r\n collection = modifiers.reduce((collection, modifier) => {\r\n if (modifier === 'offset')\r\n return offset(collection, hash['offset']);\r\n if (modifier === 'limit')\r\n return limit(collection, hash['limit']);\r\n return reversed(collection);\r\n }, collection);\r\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length);\r\n const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) });\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (ctx.breakCalled)\r\n break;\r\n scope.forloop.next();\r\n }\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n ctx.pop();\r\n }\r\n *children() {\r\n const templates = this.templates.slice();\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'forloop'];\r\n }\r\n}\r\nfunction reversed(arr) {\r\n return [...arr].reverse();\r\n}\r\nfunction offset(arr, count) {\r\n return arr.slice(count);\r\n}\r\nfunction limit(arr, count) {\r\n return arr.slice(0, count);\r\n}\n\nclass CaptureTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.templates = [];\r\n this.identifier = this.readVariable();\r\n this.variable = this.identifier.content;\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcapture')\r\n return;\r\n this.templates.push(parser.parseToken(token, remainTokens));\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n readVariable() {\r\n let ident = this.tokenizer.readIdentifier();\r\n if (ident.content)\r\n return ident;\r\n ident = this.tokenizer.readQuoted();\r\n if (ident)\r\n return ident;\r\n throw this.tokenizer.error('invalid capture name');\r\n }\r\n *render(ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CaseTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n if (elseCount > 0) {\r\n return;\r\n }\r\n p = [];\r\n const values = [];\r\n while (!token.tokenizer.end()) {\r\n values.push(token.tokenizer.readValueOrThrow());\r\n token.tokenizer.skipBlank();\r\n if (token.tokenizer.peek() === ',') {\r\n token.tokenizer.readTo(',');\r\n }\r\n else {\r\n token.tokenizer.readTo('or');\r\n }\r\n }\r\n this.branches.push({\r\n values,\r\n templates: p\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\r\n let branchHit = false;\r\n for (const branch of this.branches) {\r\n for (const valueToken of branch.values) {\r\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\r\n if (equals(target, value)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n branchHit = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!branchHit) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n }\r\n *arguments() {\r\n yield this.value;\r\n yield* this.branches.flatMap(b => b.values);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n}\n\nclass CommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcomment')\r\n return;\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() { }\r\n}\n\nclass RenderTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokenizer = this.tokenizer;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n // can be normal key/value pair, like \"with: true\"\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n // can be normal key, like \"with,\"\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n const binding = { value, alias: alias && alias.content };\r\n if (keyword.content === 'with')\r\n this.with = binding;\r\n else\r\n this.forBinding = binding;\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue; // matched!\r\n }\r\n }\r\n }\r\n /**\r\n * restore cursor if with/for not matched\r\n */\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash } = this;\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const childCtx = ctx.spawn();\r\n const scope = childCtx.bottom();\r\n __assign(scope, yield hash.render(ctx));\r\n if (this.with) {\r\n const { value, alias } = this.with;\r\n scope[alias || filepath] = yield evalToken(value, ctx);\r\n }\r\n if (this.forBinding) {\r\n const { value, alias } = this.forBinding;\r\n const collection = toEnumerable(yield evalToken(value, ctx));\r\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n scope['forloop'].next();\r\n }\r\n }\r\n else {\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this.file)) {\r\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n const names = Object.keys(this.hash.hash);\r\n if (this.with) {\r\n const { value, alias } = this.with;\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n if (this.forBinding) {\r\n const { value, alias } = this.forBinding;\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n return { name: this.file, isolated: true, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (this.with) {\r\n const { value } = this.with;\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n if (this.forBinding) {\r\n const { value } = this.forBinding;\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @return null for \"none\",\r\n * @return Template[] for quoted with tags and/or filters\r\n * @return Token for expression (not quoted)\r\n * @throws TypeError if cannot read next token\r\n */\r\nfunction parseFilePath(tokenizer, liquid, parser) {\r\n if (liquid.options.dynamicPartials) {\r\n const file = tokenizer.readValue();\r\n tokenizer.assert(file, 'illegal file path');\r\n if (file.getText() === 'none')\r\n return;\r\n if (isQuotedToken(file)) {\r\n // for filenames like \"files/{{file}}\", eval as liquid template\r\n const templates = parser.parse(evalQuotedToken(file));\r\n return optimize(templates);\r\n }\r\n return file;\r\n }\r\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)];\r\n const templates = optimize(parser.parseTokens(tokens));\r\n return templates === 'none' ? undefined : templates;\r\n}\r\nfunction optimize(templates) {\r\n // for filenames like \"files/file.liquid\", extract the string directly\r\n if (templates.length === 1 && isHTMLToken(templates[0].token))\r\n return templates[0].token.getContent();\r\n return templates;\r\n}\r\nfunction* renderFilePath(file, ctx, liquid) {\r\n if (typeof file === 'string')\r\n return file;\r\n if (Array.isArray(file))\r\n return liquid.renderer.renderTemplates(file, ctx);\r\n return yield evalToken(file, ctx);\r\n}\n\nclass IncludeTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const { tokenizer } = token;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash, withVar } = this;\r\n const { renderer } = liquid;\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n const scope = createScope((yield hash.render(ctx)));\r\n if (withVar)\r\n scope[filepath] = yield evalToken(withVar, ctx);\r\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile));\r\n ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this.file)) {\r\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n let names;\r\n if (this.liquid.options.jekyllInclude) {\r\n names = ['include'];\r\n }\r\n else {\r\n names = Object.keys(this.hash.hash);\r\n if (this.withVar) {\r\n names.push([this.file, this.withVar]);\r\n }\r\n }\r\n return { name: this.file, isolated: false, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n yield* Object.values(this.hash.hash).filter(isValueToken);\r\n if (isValueToken(this.file)) {\r\n yield this.file;\r\n }\r\n if (isValueToken(this.withVar)) {\r\n yield this.withVar;\r\n }\r\n }\r\n}\n\nclass DecrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CycleTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.candidates = [];\r\n const group = this.tokenizer.readValue();\r\n this.tokenizer.skipBlank();\r\n if (group) {\r\n if (this.tokenizer.peek() === ':') {\r\n this.group = group;\r\n this.tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!this.tokenizer.end()) {\r\n const value = this.tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n this.tokenizer.readTo(',');\r\n }\r\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`);\r\n }\r\n *render(ctx, emitter) {\r\n const group = (yield evalToken(this.group, ctx));\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle', {});\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n return yield evalToken(candidate, ctx);\r\n }\r\n *arguments() {\r\n yield* this.candidates;\r\n if (this.group) {\r\n yield this.group;\r\n }\r\n }\r\n}\n\nclass IfTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n let p = [];\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n assert(!this.elseTemplates, 'unexpected elsif after else');\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', tag => {\r\n assertEmpty(tag.args);\r\n assert(!this.elseTemplates, 'duplicated else');\r\n p = this.elseTemplates = [];\r\n })\r\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (isTruthy(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass IncrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass LayoutTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.file = parseFilePath(this.tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = parser.parseTokens(remainTokens);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, args, file } = this;\r\n const { renderer } = liquid;\r\n if (file === undefined) {\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n yield renderer.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile));\r\n // render remaining contents and store rendered results\r\n ctx.setRegister('blockMode', BlockMode.STORE);\r\n const html = yield renderer.renderTemplates(this.templates, ctx);\r\n const blocks = ctx.getRegister('blocks', {});\r\n // set whole content to anonymous block if anonymous doesn't specified\r\n if (blocks[''] === undefined)\r\n blocks[''] = (parent, emitter) => emitter.write(html);\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n // render the layout file use stored blocks\r\n ctx.push(createScope((yield args.render(ctx))));\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n }\r\n *children(partials) {\r\n const templates = this.templates.slice();\r\n if (partials && isString(this.file)) {\r\n templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile)));\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (isValueToken(this.file)) {\r\n yield this.file;\r\n }\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) };\r\n }\r\n }\r\n}\n\nclass BlockTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.templates = [];\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endblock')\r\n return;\r\n const template = parser.parseToken(token, remainTokens);\r\n this.templates.push(template);\r\n }\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n }\r\n *render(ctx, emitter) {\r\n const blockRender = this.getBlockRender(ctx);\r\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\r\n ctx.getRegister('blocks', {})[this.block] = blockRender;\r\n }\r\n else {\r\n yield blockRender(new BlockDrop(), emitter);\r\n }\r\n }\r\n getBlockRender(ctx) {\r\n const self = this;\r\n const { liquid, templates } = this;\r\n const renderChild = ctx.getRegister('blocks', {})[this.block];\r\n const renderCurrent = function* (superBlock, emitter) {\r\n const stack = ctx.getRegister('blockStack', []);\r\n if (stack.includes(self))\r\n throw new Error('block tag cannot be nested');\r\n stack.push(self);\r\n ctx.push(createScope({ block: superBlock }));\r\n yield liquid.renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n stack.pop();\r\n };\r\n return renderChild\r\n ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter)\r\n : renderCurrent;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n blockScope() {\r\n return ['block'];\r\n }\r\n}\n\nclass RawTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n this.tokens = [];\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endraw')\r\n return;\r\n this.tokens.push(token);\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n}\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols, collection, variable) {\r\n super(length, collection, variable);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nclass TablerowTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n this.tokenizer.skipBlank();\r\n const predicate = this.tokenizer.readIdentifier();\r\n const collectionToken = this.tokenizer.readValue();\r\n if (predicate.content !== 'in' || !collectionToken) {\r\n throw new Error(`illegal tag: ${tagToken.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collectionToken;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const args = (yield this.args.render(ctx));\r\n const offset = args.offset || 0;\r\n const limit = (args.limit === undefined) ? collection.length : args.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = args.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable);\r\n const scope = createScope({ tablerowloop });\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('</tr>');\r\n emitter.write(`<tr class=\"row${tablerowloop.row()}\">`);\r\n }\r\n emitter.write(`<td class=\"col${tablerowloop.col()}\">`);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('</td>');\r\n }\r\n if (collection.length)\r\n emitter.write('</tr>');\r\n ctx.pop();\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'tablerowloop'];\r\n }\r\n}\n\nclass UnlessTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n test: isFalsy,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n if (elseCount > 0) {\r\n p = [];\r\n return;\r\n }\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n test: isTruthy,\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endunless', function () { this.stop(); })\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, test, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (test(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n *children() {\r\n const children = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n children.push(...this.elseTemplates);\r\n }\r\n return children;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass BreakTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.breakCalled = true;\r\n }\r\n}\n\nclass ContinueTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.continueCalled = true;\r\n }\r\n}\n\nclass EchoTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.tokenizer.skipBlank();\r\n if (!this.tokenizer.end()) {\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n if (!this.value)\r\n return;\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n if (this.value) {\r\n yield this.value;\r\n }\r\n }\r\n}\n\nclass LiquidTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options);\r\n this.templates = parser.parseTokens(tokens);\r\n }\r\n *render(ctx, emitter) {\r\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter);\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n}\n\nclass InlineCommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\r\n throw new Error('every line of an inline comment must start with a \\'#\\' character');\r\n }\r\n }\r\n render() { }\r\n}\n\nconst tags = {\r\n assign: AssignTag,\r\n 'for': ForTag,\r\n capture: CaptureTag,\r\n 'case': CaseTag,\r\n comment: CommentTag,\r\n include: IncludeTag,\r\n render: RenderTag,\r\n decrement: DecrementTag,\r\n increment: IncrementTag,\r\n cycle: CycleTag,\r\n 'if': IfTag,\r\n layout: LayoutTag,\r\n block: BlockTag,\r\n raw: RawTag,\r\n tablerow: TablerowTag,\r\n unless: UnlessTag,\r\n 'break': BreakTag,\r\n 'continue': ContinueTag,\r\n echo: EchoTag,\r\n liquid: LiquidTag,\r\n '#': InlineCommentTag\r\n};\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.renderer = new Render();\r\n this.filters = Object.create(null);\r\n this.tags = Object.create(null);\r\n this.options = normalize(opts);\r\n // eslint-disable-next-line deprecation/deprecation\r\n this.parser = new Parser(this);\r\n forOwn(tags, (conf, name) => this.registerTag(name, conf));\r\n forOwn(filters, (handler, name) => this.registerFilter(name, handler));\r\n }\r\n parse(html, filepath) {\r\n const parser = new Parser(this);\r\n return parser.parse(html, filepath);\r\n }\r\n _render(tpl, scope, renderOptions) {\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n render(tpl, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n renderSync(tpl, scope, renderOptions) {\r\n return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n renderToNodeStream(tpl, scope, renderOptions = {}) {\r\n const ctx = new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx);\r\n }\r\n _parseAndRender(html, scope, renderOptions) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, renderOptions);\r\n }\r\n parseAndRender(html, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n parseAndRenderSync(html, scope, renderOptions) {\r\n return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n _parsePartialFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile);\r\n }\r\n _parseLayoutFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile);\r\n }\r\n _parseFile(file, sync, lookupType, currentFile) {\r\n return new Parser(this).parseFile(file, sync, lookupType, currentFile);\r\n }\r\n parseFile(file, lookupType) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(new Parser(this).parseFile(file, false, lookupType));\r\n });\r\n }\r\n parseFileSync(file, lookupType) {\r\n return toValueSync(new Parser(this).parseFile(file, true, lookupType));\r\n }\r\n *_renderFile(file, ctx, renderFileOptions) {\r\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType));\r\n return yield this._render(templates, ctx, renderFileOptions);\r\n }\r\n renderFile(file, ctx, renderFileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false })));\r\n });\r\n }\r\n renderFileSync(file, ctx, renderFileOptions) {\r\n return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true })));\r\n }\r\n renderFileToNodeStream(file, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const templates = yield this.parseFile(file);\r\n return this.renderToNodeStream(templates, scope, renderOptions);\r\n });\r\n }\r\n _evalValue(str, scope) {\r\n const value = new Value(str, this);\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options);\r\n return value.value(ctx);\r\n }\r\n evalValue(str, scope) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._evalValue(str, scope));\r\n });\r\n }\r\n evalValueSync(str, scope) {\r\n return toValueSync(this._evalValue(str, scope));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters[name] = filter;\r\n }\r\n registerTag(name, tag) {\r\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n let firstCall = true;\r\n return function (filePath, ctx, callback) {\r\n if (firstCall) {\r\n firstCall = false;\r\n const dirs = normalizeDirectoryList(this.root);\r\n self.options.root.unshift(...dirs);\r\n self.options.layouts.unshift(...dirs);\r\n self.options.partials.unshift(...dirs);\r\n }\r\n self.renderFile(filePath, ctx).then(html => callback(null, html), callback);\r\n };\r\n }\r\n analyze(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(template, options);\r\n });\r\n }\r\n analyzeSync(template, options = {}) {\r\n return analyzeSync(template, options);\r\n }\r\n parseAndAnalyze(html, filename, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(this.parse(html, filename), options);\r\n });\r\n }\r\n parseAndAnalyzeSync(html, filename, options = {}) {\r\n return analyzeSync(this.parse(html, filename), options);\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n });\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n });\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n}\n\n/* istanbul ignore file */\r\nconst version = '[VI]{version}[/VI]';\n\nexport { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, LookupType, Output, ParseError, ParseStream, Parser, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, Variable, analyze, analyzeSync, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version };\n","// cspell:ignore liquidjs forloop tablerowloop\nimport { Liquid, Tokenizer, TokenKind } from 'liquidjs';\n\nconst engine = new Liquid();\n\ninterface GlobalRef {\n key: string;\n row: number;\n col: number;\n}\n\n// liquidjs static analysis is position-blind: a variable in `{% if x %}` and one\n// in `{{ x }}` look identical in `globals`. We keep each reference's location so\n// callers can tell a printed output from a control-flow-only reference.\nfunction collectGlobalRefs(code: string, lines: string[]): GlobalRef[] {\n const { globals } = engine.analyzeSync(engine.parse(code));\n const refs: GlobalRef[] = [];\n\n for (const occurrences of Object.values(globals)) {\n for (const variable of occurrences) {\n const root = String(variable.segments[0] ?? '');\n const line = lines[variable.location.row - 1] ?? '';\n const atLocation = line.slice(variable.location.col - 1);\n\n // liquidjs can mis-report a literal as a global — notably the first\n // element of an array literal in `{% assign x = [\"a\",\"b\"] %}`, whose\n // reported location points at the `[`, not a bare identifier. Keep a\n // global only when the source at its location actually IS that\n // identifier (real references always resolve to their own name).\n if (root && atLocation.startsWith(root)) {\n refs.push({ key: variable.toString(), row: variable.location.row, col: variable.location.col });\n }\n }\n }\n\n return refs;\n}\n\n// Absolute offset (into `code`) of a 1-based row/col, matching how both liquidjs\n// locations and Tokenizer token ranges index the same source string.\nfunction lineStartOffsets(code: string): number[] {\n const starts = [0];\n\n for (let i = 0; i < code.length; i++) {\n if (code[i] === '\\n') {\n starts.push(i + 1);\n }\n }\n\n return starts;\n}\n\n// Byte ranges of every `{{ }}` output token — a variable printed to the user has\n// at least one reference inside one of these.\nfunction outputTokenRanges(code: string): Array<[number, number]> {\n return new Tokenizer(code)\n .readTopLevelTokens(engine.options)\n .filter(token => token.kind === TokenKind.Output)\n .map(token => [token.begin, token.end]);\n}\n\n/**\n * External (global) variables referenced by `{{ }}` / `{% %}` in a Liquid\n * snippet, as full dotted paths (e.g. `e_purchase.amount`), de-duplicated.\n *\n * Uses liquidjs static analysis: the returned set is the `globals` — references\n * that are NOT in scope. This excludes, with no hand-rolled lists:\n * - `{% assign %}` / `{% capture %}` targets\n * - `{% for %}` / `{% tablerow %}` loop variables\n * - the loop-provided `forloop` / `tablerowloop` objects\n * - `{% increment %}` / `{% decrement %}` counters\n * - string / number literals and filter names\n *\n * Returns `[]` for empty input or syntactically invalid Liquid (e.g. while the\n * user is mid-typing), so callers never have to guard against a thrown parse.\n */\nexport function getLiquidVariables(code: string): string[] {\n if (!code || !code.trim()) {\n return [];\n }\n\n try {\n const lines = code.split('\\n');\n\n return [...new Set(collectGlobalRefs(code, lines).map(ref => ref.key))];\n } catch {\n return [];\n }\n}\n\n/**\n * The subset of {@link getLiquidVariables} that is actually PRINTED to the user\n * via a `{{ }}` output — as opposed to variables referenced only in control flow\n * (`{% if x %}`, `{% for p in items %}`), which never render a value.\n *\n * A variable counts as printed when any of its references falls inside an output\n * token. `{% if x %}{{ x }}{% endif %}` therefore reports `x` (it is printed on\n * one branch); `{% if x %}…{% endif %}` alone does not.\n *\n * Same empty/invalid-input contract as {@link getLiquidVariables}.\n */\nexport function getLiquidOutputVariables(code: string): string[] {\n if (!code || !code.trim()) {\n return [];\n }\n\n try {\n const lines = code.split('\\n');\n const starts = lineStartOffsets(code);\n const ranges = outputTokenRanges(code);\n const keys: string[] = [];\n\n for (const ref of collectGlobalRefs(code, lines)) {\n const offset = starts[ref.row - 1] + (ref.col - 1);\n\n if (ranges.some(([begin, end]) => offset >= begin && offset < end)) {\n keys.push(ref.key);\n }\n }\n\n return [...new Set(keys)];\n } catch {\n return [];\n }\n}\n","<script lang=\"ts\" setup>\nimport { defineProps, withDefaults, defineEmits, onMounted, nextTick, ref, onBeforeUnmount } from 'vue';\nimport { Button } from '@/index';\nimport styles from './Modal.module.scss';\n\nexport interface ModalProps {\n title: string;\n isOpen: boolean;\n size: 'small' | 'medium';\n cancelText: string;\n submitText: string;\n hasOverlay?: boolean;\n}\n\nconst props = withDefaults(defineProps<ModalProps>(), {\n hasOverlay: true,\n});\nconst isVisible = ref(false);\n\ninterface Emits {\n (e: 'close'): void;\n (e: 'submit'): void;\n}\n\nconst emit = defineEmits<Emits>();\n\nconst close = () => {\n emit('close');\n};\n\nconst submit = () => {\n emit('submit');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n emit('close');\n }\n};\n\nonMounted(async () => {\n await nextTick();\n isVisible.value = true;\n\n window.addEventListener('keydown', handleKeydown);\n});\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeydown);\n});\n</script>\n\n<template>\n <div\n v-if=\"hasOverlay\"\n :class=\"styles.modalOverlay\"\n @click=\"close\" />\n <transition name=\"modal-transition\">\n <div\n v-show=\"isOpen\"\n :class=\"[styles.modalWrapper, styles[props.size]]\">\n <div :class=\"[styles.modal, styles[props.size]]\">\n <button\n :class=\"styles.close\"\n @click=\"close\">\n &times;\n </button>\n <div :class=\"styles.header\">\n <p>{{ title }}</p>\n </div>\n <div :class=\"styles.section\">\n <slot name=\"section\" />\n </div>\n <div :class=\"styles.footer\">\n <Button\n color=\"secondary\"\n variant=\"text\"\n :label=\"props.cancelText\"\n @click=\"close\" />\n <Button\n color=\"primary\"\n variant=\"solid\"\n :label=\"props.submitText\"\n @click=\"submit\" />\n </div>\n </div>\n </div>\n </transition>\n</template>\n\n<style scoped lang=\"scss\">\n.modal-transition-enter-active,\n.modal-transition-leave-active {\n transition: all 0.3s ease;\n}\n\n.modal-transition-enter-from,\n.modal-transition-leave-to {\n opacity: 0;\n transform: scale(0.8) translate(-50%, -50%);\n}\n\n.modal-transition-enter-to,\n.modal-transition-leave-from {\n opacity: 1;\n transform: scale(1) translate(-50%, -50%);\n}\n</style>\n","<script setup lang=\"ts\">\nimport styles from './NumberInput.module.scss';\n\nexport interface Props {\n id: string;\n name: string;\n modelValue?: number;\n label?: string;\n placeholder?: string;\n maxLength?: number;\n error?: string;\n errorStatus?: boolean;\n counter?: boolean;\n min?: number;\n max?: number;\n size?: 'default' | 'small';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n maxLength: undefined,\n min: undefined,\n max: undefined,\n error: '',\n modelValue: undefined,\n size: 'default',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']];\n input: [event: Event];\n change: [event: Event];\n paste: [event: ClipboardEvent];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst applyMinMax = (value: string): string => {\n if (value === '') {\n return value;\n }\n\n const numericValue = Number(value);\n\n if (typeof props.min === 'number' && numericValue < props.min) {\n return props.min.toString();\n } else if (typeof props.max === 'number' && numericValue > props.max) {\n return props.max.toString();\n }\n\n return numericValue.toString();\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const sanitizedValue = applyMinMax(target.value);\n\n target.value = sanitizedValue;\n\n emit('input', event);\n emit('update:modelValue', Number(sanitizedValue));\n};\n\nconst handleBlur = (event: FocusEvent) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const oldValue = target.value;\n const sanitizedValue = applyMinMax(target.value === '' ? String(props.min || 0) : target.value);\n\n target.value = sanitizedValue;\n\n emit('blur', event);\n\n if (oldValue !== sanitizedValue) {\n emit('update:modelValue', Number(sanitizedValue));\n }\n};\n</script>\n\n<template>\n <div :class=\"[styles.wrapper, styles[`wrapper__size_${size}`]]\">\n <label\n v-if=\"label\"\n :class=\"styles.wrapper__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <input\n :id=\"id\"\n type=\"number\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error || errorStatus,\n },\n ]\"\n :max=\"max\"\n :maxlength=\"maxLength\"\n :min=\"min\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n @blur=\"handleBlur\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\">\n\n <div\n v-if=\"counter || error\"\n :class=\"styles.wrapper__bottom\">\n <div\n v-if=\"error\"\n :class=\"styles.wrapper__errorMessage\">\n {{ error }}\n </div>\n <div\n v-if=\"counter\"\n :class=\"styles.wrapper__counter\">\n {{ modelValue?.toString().length || 0 }}\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, ref, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport { Typography } from '@/components/Typography';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './OnPageMessage.module.scss';\n\ninterface OnPageMessageProps {\n variant?: 'default' | 'warning' | 'alert' | 'success';\n text: string;\n}\n\nconst props = withDefaults(defineProps<OnPageMessageProps>(), {\n variant: 'default',\n});\n\nconst IconName = computed<IconNames>(() => {\n switch (props.variant) {\n // DS spec (Figma 1559:444): Error uses the filled box, not the circle.\n case 'alert': return 'filled-error-box';\n case 'warning': return 'line-caution-triangle';\n case 'success': return 'line-check-natural';\n\n default: return 'filled-info-circle';\n }\n});\n\nconst textRef = ref<InstanceType<typeof Typography> | null>(null);\nconst isMultiline = ref(false);\nlet resizeObserver: ResizeObserver | null = null;\n\nfunction measure (): void {\n const el = textRef.value?.$el as HTMLElement | undefined;\n\n if (!el) {\n return;\n }\n\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 16;\n const next = el.getBoundingClientRect().height > lineHeight * 1.5;\n\n if (next !== isMultiline.value) {\n isMultiline.value = next;\n }\n}\n\nwatch(textRef, el => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n\n const node = (el as InstanceType<typeof Typography> | null)?.$el as HTMLElement | undefined;\n\n if (!node || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n resizeObserver = new ResizeObserver(() => measure());\n resizeObserver.observe(node);\n measure();\n});\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n});\n</script>\n\n<template>\n <div\n :class=\"[\n styles.container,\n styles[`container__${variant}`],\n isMultiline && styles.isMultiline,\n ]\">\n <Icon\n :name=\"IconName\"\n :size=\"24\" />\n <Typography\n ref=\"textRef\"\n variant=\"detail\"\n :class=\"styles.container__text\">\n {{ text }}\n </Typography>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue';\nimport { Icon, Tooltip } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './SegmentButton.module.scss';\n\nexport interface SegmentType {\n value: string;\n label?: string;\n disabled?: boolean;\n icon?: IconNames;\n mode?: 'default' | 'smart';\n tooltip?: string;\n}\n\nexport interface SegmentButtonProps {\n size?: 'default' | 'small';\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n segments: SegmentType[];\n iconOnly?: boolean;\n labelOnly?: boolean;\n modelValue?: string;\n}\n\ninterface SegmentButtonEmits {\n 'update:modelValue': [value: string];\n click: [value: SegmentType['value']];\n}\n\nconst props = withDefaults(defineProps<SegmentButtonProps>(), {\n disabled: false,\n size: 'default',\n orientation: 'horizontal',\n iconOnly: false,\n labelOnly: false,\n});\n\nconst emit = defineEmits<SegmentButtonEmits>();\nconst selected = ref<string>(props.modelValue || '');\n\nconst setSelect = (segment: SegmentType) => {\n if (props.disabled || segment.disabled) {\n return;\n }\n\n emit('update:modelValue', segment.value);\n emit('click', segment.value);\n};\n\nwatch(() => props.modelValue, newValue => {\n if (selected.value !== newValue) {\n selected.value = newValue || '';\n }\n});\n\nwatch(() => props.segments, newSegments => {\n if (!newSegments.some(segment => segment.value === selected.value)) {\n selected.value = '';\n emit('update:modelValue', '');\n }\n}, { deep: true });\n</script>\n\n<template>\n <div\n :class=\"[\n styles.wrapper,\n styles[`wrapper--${orientation}`],\n styles[`wrapper--${size}`],\n {\n [styles['wrapper--disabled']]: disabled,\n [styles['wrapper--icon-only']]: iconOnly,\n [styles['wrapper--label-only']]: labelOnly,\n },\n ]\">\n <template\n v-for=\"(segment, index) in segments\"\n :key=\"`${segment.value}-${index}`\">\n <Tooltip\n v-if=\"segment.tooltip\"\n :id=\"`segment-tooltip-${segment.value}-${index}`\"\n :text=\"segment.tooltip\">\n <button\n type=\"button\"\n :class=\"[\n styles.button,\n {\n [styles['button--selected']]: segment.value === selected,\n [styles['button--disabled']]: segment.disabled || disabled,\n [styles['button--first']]: index === 0,\n [styles['button--last']]: index === segments.length - 1,\n },\n ]\"\n :data-mode=\"segment.mode\"\n :disabled=\"segment.disabled || disabled\"\n @click=\"setSelect(segment)\">\n <Icon\n v-if=\"iconOnly && segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\"\n :size=\"24\" />\n <span\n v-if=\"labelOnly && segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n <template v-if=\"!iconOnly && !labelOnly\">\n <Icon\n v-if=\"segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\" />\n <span\n v-if=\"segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n </template>\n </button>\n </Tooltip>\n <button\n v-else\n type=\"button\"\n :class=\"[\n styles.button,\n {\n [styles['button--selected']]: segment.value === selected,\n [styles['button--disabled']]: segment.disabled || disabled,\n [styles['button--first']]: index === 0,\n [styles['button--last']]: index === segments.length - 1,\n },\n ]\"\n :data-mode=\"segment.mode\"\n :disabled=\"segment.disabled || disabled\"\n @click=\"setSelect(segment)\">\n <Icon\n v-if=\"iconOnly && segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\"\n :size=\"24\" />\n <span\n v-if=\"labelOnly && segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n <template v-if=\"!iconOnly && !labelOnly\">\n <Icon\n v-if=\"segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\" />\n <span\n v-if=\"segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n </template>\n </button>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue';\nimport styles from './TextInput.module.scss';\n\nexport interface Props {\n id: string;\n name: string;\n modelValue?: string;\n label?: string;\n placeholder?: string;\n maxLength?: number;\n maxHeight?: number;\n error?: string;\n multiline?: boolean;\n autoGrow?: boolean;\n counter?: boolean;\n mode?: 'primary' | 'smart';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n maxLength: undefined,\n maxHeight: undefined,\n error: '',\n multiline: false,\n autoGrow: false,\n modelValue: '',\n mode: 'primary',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']];\n input: [event: Event];\n change: [event: Event];\n paste: [event: ClipboardEvent];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\nconst autoGrow = () => {\n if (props.autoGrow && textareaRef.value) {\n textareaRef.value.style.height = '';\n\n const newHeight = Math.min(textareaRef.value.scrollHeight, props.maxHeight || textareaRef.value.scrollHeight);\n\n textareaRef.value.style.height = `${newHeight}px`;\n }\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n emit('input', event);\n emit('update:modelValue', target.value);\n\n autoGrow();\n};\n\nonMounted(() => {\n autoGrow();\n});\n</script>\n\n<template>\n <div :class=\"[styles.wrapper, styles[`wrapper--${props.mode}`]]\">\n <label\n v-if=\"label\"\n :class=\"styles.wrapper__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <template v-if=\"multiline\">\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error,\n },\n ]\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :style=\"maxHeight ? { maxHeight: `${maxHeight}px` } : undefined\"\n :value=\"modelValue\"\n @blur=\"emit('blur', $event)\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\" />\n </template>\n <template v-else>\n <input\n :id=\"id\"\n type=\"text\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error,\n },\n ]\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n @blur=\"emit('blur', $event)\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\">\n </template>\n\n <div :class=\"styles.wrapper__bottom\">\n <div\n v-if=\"error\"\n :class=\"styles.wrapper__errorMessage\">\n {{ error }}\n </div>\n <div\n v-if=\"counter\"\n :class=\"styles.wrapper__counter\">\n {{ modelValue?.toString().length || 0 }}\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport styles from './Toggle.module.scss';\n\ninterface ToggleProps {\n id: string;\n name: string;\n checked?: boolean;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<ToggleProps>(), {\n checked: false,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [checked: boolean];\n}>();\n\nconst onClick = () => {\n emit('click', !props.checked);\n};\n</script>\n\n<template>\n <fieldset\n :class=\"[\n styles.wrapper,\n {\n [styles.wrapper_checked]: checked,\n [styles.wrapper_disabled]: disabled,\n },\n ]\">\n <input\n :id=\"id\"\n type=\"checkbox\"\n :checked=\"checked\"\n :class=\"styles.wrapper__input\"\n :disabled=\"disabled\"\n :name=\"name\"\n @click=\"onClick\">\n <label\n :class=\"styles.wrapper__label\"\n :for=\"id\" />\n </fieldset>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\nexport type ToastVariant = 'info' | 'error' | 'warning';\n\ninterface ToastProps {\n modelValue: boolean;\n text: string;\n variant?: ToastVariant;\n duration?: number;\n icon?: IconNames;\n closeAriaLabel?: string;\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n variant: 'info',\n duration: 4000,\n icon: undefined,\n closeAriaLabel: 'Close notification',\n});\n\ntype ToastEmits = {\n (e: 'update:modelValue', value: boolean): void;\n (e: 'dismiss'): void;\n};\n\nconst emit = defineEmits<ToastEmits>();\n\nconst VARIANT_ICONS: Record<ToastVariant, IconNames> = {\n info: 'filled-info-circle',\n error: 'filled-error-box',\n warning: 'filled-caution-triangle',\n};\n\nconst iconName = computed<IconNames>(() => props.icon ?? VARIANT_ICONS[props.variant]);\nlet dismissTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction clearDismissTimer (): void {\n if (dismissTimer) {\n clearTimeout(dismissTimer);\n dismissTimer = null;\n }\n}\n\nfunction handleClose (): void {\n clearDismissTimer();\n emit('update:modelValue', false);\n emit('dismiss');\n}\n\nfunction scheduleDismiss (): void {\n clearDismissTimer();\n\n if (props.duration <= 0) {\n return;\n }\n\n dismissTimer = setTimeout(() => {\n handleClose();\n }, props.duration);\n}\n\nwatch(\n () => props.modelValue,\n next => {\n if (next) {\n scheduleDismiss();\n } else {\n clearDismissTimer();\n }\n },\n { immediate: true }\n);\n\nonBeforeUnmount(clearDismissTimer);\n</script>\n\n<template>\n <Transition name=\"ab-toast\">\n <div\n v-if=\"modelValue\"\n aria-live=\"polite\"\n class=\"ab-toast\"\n role=\"status\"\n :class=\"`ab-toast--${variant}`\">\n <Icon\n class=\"ab-toast__icon\"\n :name=\"iconName\"\n :size=\"24\" />\n <span class=\"ab-toast__text\">{{ text }}</span>\n <button\n class=\"ab-toast__close\"\n type=\"button\"\n :aria-label=\"closeAriaLabel\"\n @click=\"handleClose\">\n <Icon\n name=\"line-close-netural\"\n :size=\"24\" />\n </button>\n </div>\n </Transition>\n</template>\n\n<style lang=\"scss\" scoped>\n.ab-toast {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 16px 16px 16px 12px;\n background: $color_gray_0;\n border-top: 1px solid $color_gray_300;\n border-right: 1px solid $color_gray_300;\n border-bottom: 1px solid $color_gray_300;\n border-radius: 4px;\n box-shadow: 0 8px 32px rgba(44, 53, 70, 0.15);\n max-width: 320px;\n color: $color_gray_800;\n font-family: $fontFamily_Figtree;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n}\n\n.ab-toast--info {\n border-left: 4px solid $color_information_500;\n\n .ab-toast__icon {\n fill: $color_information_500;\n }\n}\n\n.ab-toast--error {\n border-left: 4px solid $color_danger_500;\n\n .ab-toast__icon {\n fill: $color_danger_500;\n }\n}\n\n.ab-toast--warning {\n border-left: 4px solid $color_warning_500;\n\n .ab-toast__icon {\n fill: $color_warning_500;\n }\n}\n\n.ab-toast__icon {\n flex: 0 0 auto;\n}\n\n.ab-toast__text {\n flex: 1 1 auto;\n word-break: break-word;\n}\n\n.ab-toast__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n background: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n color: $color_gray_600;\n\n &:hover {\n color: $color_gray_800;\n }\n}\n\n.ab-toast-enter-active,\n.ab-toast-leave-active {\n transition:\n opacity 0.2s ease,\n transform 0.2s ease;\n}\n\n.ab-toast-enter-from,\n.ab-toast-leave-to {\n opacity: 0;\n transform: translateY(8px);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport { Icon } from '@/index';\nimport styles from './InAgentLauncher.module.scss';\n\nexport interface InAgentLauncherProps {\n /** Newest agent line to surface. With text the launcher becomes a pill; without it, a badge. */\n message?: string;\n /** Breathing halo behind the badge — something is waiting to be read. */\n pulse?: boolean;\n label?: string;\n}\n\nconst props = withDefaults(defineProps<InAgentLauncherProps>(), {\n message: '',\n pulse: false,\n label: 'Open Design Agent',\n});\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\nconst isExpanded = computed(() => props.message.trim().length > 0);\nconst ariaLabel = computed(() => (isExpanded.value ? `${props.label}: ${props.message}` : props.label));\n</script>\n\n<template>\n <button\n type=\"button\"\n :aria-label=\"ariaLabel\"\n :class=\"[styles['agent-launcher'], { [styles['agent-launcher--expanded']]: isExpanded }]\"\n @click=\"emit('click')\">\n <span :class=\"styles['agent-launcher__badge-wrap']\">\n <template v-if=\"props.pulse\">\n <span\n aria-hidden=\"true\"\n :class=\"[styles['agent-launcher__halo'], styles['agent-launcher__halo--outer']]\" />\n <span\n aria-hidden=\"true\"\n :class=\"[styles['agent-launcher__halo'], styles['agent-launcher__halo--inner']]\" />\n </template>\n <span :class=\"styles['agent-launcher__badge']\">\n <Icon\n name=\"agent-launcher-badge\"\n :class=\"styles['agent-launcher__art']\"\n :size=\"48\" />\n <Icon\n name=\"agent-launcher-glyph\"\n :class=\"styles['agent-launcher__glyph']\"\n :size=\"28\" />\n </span>\n </span>\n <span\n v-if=\"isExpanded\"\n :class=\"styles['agent-launcher__message']\">\n {{ props.message }}\n </span>\n <Icon\n v-if=\"isExpanded\"\n name=\"line-full-screen\"\n :class=\"styles['agent-launcher__expand']\"\n :size=\"24\" />\n </button>\n</template>\n","/**\n * Whether the OS \"reduce motion\" setting is active. Live check (not cached at\n * module load) — the setting can change mid-session, so callers re-evaluate\n * each time an animation starts.\n */\nexport function prefersReducedMotion (): boolean {\n return typeof window !== 'undefined'\n && typeof window.matchMedia === 'function'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { prefersReducedMotion } from '@/utils/prefersReducedMotion';\nimport styles from './InAgentBackground.module.scss';\n\ninterface ParallaxBlob {\n el: HTMLElement;\n depth: number;\n cx: number;\n}\n\nexport interface InAgentBackgroundProps {\n /** Landing state — plays the aurora intro. Otherwise the aurora sits at rest. */\n animated?: boolean;\n /** Force the settled rest state: no intro, no drift, no parallax. */\n static?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentBackgroundProps>(), {\n animated: false,\n static: false,\n});\n\n/** No user activity for this long → freeze the aurora drift. */\nconst IDLE_TIMEOUT_MS = 3 * 60 * 1000;\nconst ACTIVITY_EVENTS = ['mousemove', 'keydown', 'pointerdown', 'wheel'] as const;\nconst rootRef = ref<HTMLElement | null>(null);\nconst reduceMotion = ref(prefersReducedMotion());\nconst isStatic = computed(() => props.static || reduceMotion.value);\nconst isHidden = ref(typeof document !== 'undefined' && document.hidden);\nconst isIdle = ref(false);\nconst isPaused = computed(() => isHidden.value || isIdle.value);\nlet blobs: ParallaxBlob[] = [];\nlet rafId: number | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet idleTimer: ReturnType<typeof setTimeout> | null = null;\nlet lastActivityMs = 0;\nlet parallaxOn = false;\n\nconst motionQuery = typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(prefers-reduced-motion: reduce)')\n : null;\n\nconst armIdleTimer = (): void => {\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n }\n\n idleTimer = setTimeout(() => {\n isIdle.value = true;\n }, IDLE_TIMEOUT_MS);\n};\n\n// mousemove fires continuously — re-arm at most once per second so activity\n// tracking stays effectively free.\nconst onActivity = (): void => {\n const now = Date.now();\n\n if (now - lastActivityMs < 1000) {\n return;\n }\n\n lastActivityMs = now;\n isIdle.value = false;\n armIdleTimer();\n};\n\nconst measureBlobs = (): void => {\n blobs.forEach(blob => {\n blob.cx = blob.el.offsetLeft + blob.el.offsetWidth / 2;\n });\n};\n\n// Depth-based parallax: blobs slide opposite the pointer, scaled by their\n// `--depth`, so the aurora reads as layered glass.\nconst onMouseMove = (event: MouseEvent): void => {\n if (rafId !== null) {\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const root = rootRef.value;\n\n if (!root) {\n return;\n }\n\n const rect = root.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n const ny = 0.5 - localY / rect.height;\n\n blobs.forEach(blob => {\n const nx = (blob.cx - localX) / rect.width;\n const tx = (nx * blob.depth).toFixed(1);\n const ty = (ny * blob.depth * 0.35).toFixed(1);\n\n blob.el.style.transform = `translate3d(${tx}px, ${ty}px, 0)`;\n });\n });\n};\n\nconst enableParallax = (): void => {\n if (parallaxOn || typeof window === 'undefined') {\n return;\n }\n\n parallaxOn = true;\n window.addEventListener('mousemove', onMouseMove, { passive: true });\n\n ACTIVITY_EVENTS.forEach(event => {\n window.addEventListener(event, onActivity, { passive: true });\n });\n\n armIdleTimer();\n};\n\nconst disableParallax = (): void => {\n if (!parallaxOn || typeof window === 'undefined') {\n return;\n }\n\n parallaxOn = false;\n window.removeEventListener('mousemove', onMouseMove);\n\n ACTIVITY_EVENTS.forEach(event => {\n window.removeEventListener(event, onActivity);\n });\n\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n\n blobs.forEach(blob => {\n blob.el.style.transform = '';\n });\n};\n\nconst onVisibilityChange = (): void => {\n isHidden.value = document.hidden;\n};\n\nconst onMotionChange = (): void => {\n reduceMotion.value = prefersReducedMotion();\n\n if (isStatic.value) {\n disableParallax();\n } else {\n enableParallax();\n }\n};\n\nwatch(isStatic, value => {\n if (value) {\n disableParallax();\n } else {\n enableParallax();\n }\n});\n\nonMounted(() => {\n const root = rootRef.value;\n\n if (root) {\n blobs = Array.from(root.querySelectorAll<HTMLElement>('[data-agent-blob]')).map(el => ({\n el,\n depth: parseFloat(getComputedStyle(el).getPropertyValue('--depth')) || 0,\n cx: 0,\n }));\n measureBlobs();\n }\n\n if (!isStatic.value) {\n enableParallax();\n }\n\n motionQuery?.addEventListener('change', onMotionChange);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n if (typeof ResizeObserver !== 'undefined' && root) {\n resizeObserver = new ResizeObserver(measureBlobs);\n resizeObserver.observe(root);\n }\n});\n\nonUnmounted(() => {\n disableParallax();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n motionQuery?.removeEventListener('change', onMotionChange);\n\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n resizeObserver?.disconnect();\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n aria-hidden=\"true\"\n :class=\"[\n styles['in-agent-background'],\n {\n [styles['in-agent-background--animated']]: props.animated,\n [styles['in-agent-background--static']]: isStatic,\n [styles['in-agent-background--paused']]: isPaused,\n },\n ]\">\n <div :class=\"styles['in-agent-background__aurora']\">\n <div :class=\"styles['in-agent-background__stage']\">\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--pink']]\" />\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--purple']]\" />\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--blue']]\" />\n </div>\n </div>\n <div :class=\"styles['in-agent-background__grain']\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport InAgentBackground from '../InAgentBackground/InAgentBackground.vue';\nimport { Icon } from '@/index';\nimport styles from './InAgentPopup.module.scss';\n\nexport interface InAgentPopupProps {\n title?: string;\n badgeText?: string;\n minimizeLabel?: string;\n newChatLabel?: string;\n academyLabel?: string;\n showNewChat?: boolean;\n showAcademy?: boolean;\n showBackground?: boolean;\n backgroundAnimated?: boolean;\n /** Freeze the aurora: no intro, no drift, no parallax. */\n backgroundStatic?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentPopupProps>(), {\n title: 'Design Agent',\n badgeText: undefined,\n minimizeLabel: 'Minimize',\n newChatLabel: 'Start New Chat',\n academyLabel: 'Visit Academy',\n showNewChat: true,\n showAcademy: true,\n showBackground: true,\n backgroundAnimated: false,\n backgroundStatic: false,\n});\n\nconst emit = defineEmits<{\n minimize: [];\n split: [];\n newChat: [];\n academy: [];\n}>();\n\nconst onMinimize = () => {\n emit('minimize');\n};\n\nconst onNewChat = () => {\n emit('newChat');\n};\n\nconst onAcademy = () => {\n emit('academy');\n};\n</script>\n\n<template>\n <div :class=\"styles['in-agent-popup']\">\n <header :class=\"styles['in-agent-popup__header']\">\n <div :class=\"styles['in-agent-popup__brand']\">\n <slot name=\"brand\">\n <Icon\n name=\"agent-brand\"\n :size=\"24\" />\n </slot>\n </div>\n <h2 :class=\"styles['in-agent-popup__title']\">\n {{ props.title }}\n </h2>\n <slot name=\"badge\">\n <span\n v-if=\"props.badgeText\"\n :class=\"styles['in-agent-popup__badge']\">\n {{ props.badgeText }}\n </span>\n </slot>\n <div :class=\"styles['in-agent-popup__actions']\">\n <slot name=\"header-actions\">\n <button\n v-if=\"props.showNewChat\"\n type=\"button\"\n :aria-label=\"newChatLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"newChatLabel\"\n @click=\"onNewChat\">\n <Icon\n name=\"line-ai-message-reply-plus\"\n :size=\"24\" />\n </button>\n <button\n v-if=\"props.showAcademy\"\n type=\"button\"\n :aria-label=\"academyLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"academyLabel\"\n @click=\"onAcademy\">\n <Icon\n name=\"agent-academy\"\n :size=\"24\" />\n </button>\n <span\n v-if=\"props.showNewChat || props.showAcademy\"\n :class=\"styles['in-agent-popup__separator']\" />\n <button\n type=\"button\"\n :aria-label=\"minimizeLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"minimizeLabel\"\n @click=\"onMinimize\">\n <Icon\n name=\"line-minus-netural\"\n :size=\"24\" />\n </button>\n </slot>\n </div>\n </header>\n\n <div :class=\"styles['in-agent-popup__surface']\">\n <InAgentBackground\n v-if=\"props.showBackground\"\n :animated=\"props.backgroundAnimated\"\n :static=\"props.backgroundStatic\" />\n\n <div :class=\"styles['in-agent-popup__body']\">\n <slot />\n </div>\n\n <footer\n v-if=\"$slots.footer\"\n :class=\"styles['in-agent-popup__footer']\">\n <slot name=\"footer\" />\n </footer>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { inject, nextTick, onMounted, ref, watch } from 'vue';\n\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport { prefersReducedMotion } from '@/utils/prefersReducedMotion';\nimport styles from './InAgentWelcome.module.scss';\n\nexport interface InAgentWelcomeCategory {\n value: string;\n label: string;\n icon: AllIconNames;\n}\n\nexport interface InAgentQuickAction {\n id: string;\n label: string;\n /** Text handed to the consumer - a sentence starter, not a complete prompt. */\n prompt: string;\n}\n\nexport interface InAgentWelcomeProps {\n greeting?: string;\n title?: string;\n categories?: InAgentWelcomeCategory[];\n selected?: string | null;\n quickActions?: InAgentQuickAction[];\n}\n\nconst props = withDefaults(defineProps<InAgentWelcomeProps>(), {\n greeting: '',\n title: '',\n categories: () => [],\n selected: null,\n quickActions: () => [],\n});\n\nconst emit = defineEmits<{\n select: [value: string];\n 'quick-action': [prompt: string];\n}>();\n\nconst REVEAL_GAP = 16;\n// Entrance stagger: the intro rises first, then each button/chip follows one step behind the last.\nconst RISE_BASE_DELAY = 0.18;\nconst RISE_STEP = 0.06;\n\nconst riseDelay = (index: number): Record<string, string> => ({\n '--rise-delay': `${RISE_BASE_DELAY + index * RISE_STEP}s`,\n});\nconst MOVE_DURATION = 260;\nconst MOVE_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)';\nconst scrollEl = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\nconst bottomInset = inject<Ref<number>>('inAgentBottomInset', ref(0));\nconst rootRef = ref<HTMLElement | null>(null);\nconst cardsRef = ref<HTMLElement | null>(null);\n\n// A category with more templates than fit lands partly behind the floating composer. Follow it\n// down by exactly the clipped amount - never up, so the heading keeps its place at the top.\nconst revealCards = (): void => {\n const el = scrollEl.value;\n const cards = cardsRef.value;\n\n if (!el || !cards) {\n return;\n }\n\n const cardsBottom = el.scrollTop + (cards.getBoundingClientRect().bottom - el.getBoundingClientRect().top);\n const visibleBottom = el.scrollTop + el.clientHeight - bottomInset.value;\n const clipped = cardsBottom + REVEAL_GAP - visibleBottom;\n\n if (clipped <= 1) {\n return;\n }\n\n el.scrollTo({\n top: Math.min(el.scrollTop + clipped, el.scrollHeight - el.clientHeight),\n behavior: 'smooth',\n });\n};\n\n// Where the block sits once a category is picked. Unselected it simply centres (auto margins);\n// selected, it centres as if the grid were a single row and pins that offset - so a category\n// with several rows keeps the greeting and chips exactly where a one-row category put them and\n// grows downwards instead of dragging the whole block up.\nconst applyAnchor = (): void => {\n const root = rootRef.value;\n const scroller = scrollEl.value;\n\n if (!root) {\n return;\n }\n\n if (!props.selected || !scroller) {\n root.style.marginTop = '';\n\n return;\n }\n\n const cards = cardsRef.value;\n const grid = cards?.firstElementChild ?? null;\n const firstCard = grid?.firstElementChild ?? null;\n const rowHeight = firstCard?.getBoundingClientRect().height ?? 0;\n const cardsHeight = cards?.getBoundingClientRect().height ?? 0;\n // What the block would measure with a single row of cards.\n const singleRowHeight = root.getBoundingClientRect().height - cardsHeight + rowHeight;\n // The composer floats over the bottom of the scroller, so it is not part of the usable band.\n const available = scroller.clientHeight - bottomInset.value;\n\n root.style.marginTop = `${Math.max(0, (available - singleRowHeight) / 2)}px`;\n};\n\n// A resized composer changes the usable band underneath the block.\nwatch(bottomInset, () => applyAnchor());\n\nonMounted(() => applyAnchor());\n\n// The block is centred, so a taller card set repositions the greeting and chips. Rather than\n// animating the card area's height - which would need `overflow: hidden` and clip a hovered\n// card's ring mid-flight - the block plays the move as a FLIP: it starts shifted by the distance\n// it moved and slides to rest, while the new cards fade in at their final size. Transforms\n// and opacity never clip.\nwatch(\n () => props.selected,\n async value => {\n const root = rootRef.value;\n const firstTop = root?.getBoundingClientRect().top ?? 0;\n\n await nextTick();\n\n if (!root) {\n return;\n }\n\n applyAnchor();\n\n if (prefersReducedMotion()) {\n revealCards();\n\n return;\n }\n\n const delta = firstTop - root.getBoundingClientRect().top;\n const animations: Animation[] = [];\n\n if (Math.abs(delta) > 1) {\n animations.push(root.animate(\n [{ transform: `translateY(${delta}px)` }, { transform: 'translateY(0)' }],\n { duration: MOVE_DURATION, easing: MOVE_EASING }\n ));\n }\n\n const cards = cardsRef.value;\n\n if (value && cards) {\n animations.push(cards.animate(\n [{ opacity: 0, transform: 'translateY(6px)' }, { opacity: 1, transform: 'translateY(0)' }],\n { duration: MOVE_DURATION, easing: MOVE_EASING }\n ));\n }\n\n // Scroll once the block has come to rest, so the reveal measures final positions.\n Promise.all(animations.map(animation => animation.finished))\n .then(revealCards)\n .catch(() => revealCards());\n }\n);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"styles['agent-welcome']\">\n <div :class=\"[styles['agent-welcome__intro'], styles['agent-welcome__rise--1']]\">\n <p\n v-if=\"props.greeting\"\n :class=\"styles['agent-welcome__greeting']\">\n {{ props.greeting }}\n </p>\n <p\n v-if=\"props.title\"\n :class=\"styles['agent-welcome__title']\">\n {{ props.title }}\n </p>\n </div>\n\n <div\n v-if=\"props.categories.length > 0\"\n :class=\"styles['agent-welcome__categories']\">\n <button\n v-for=\"(category, index) in props.categories\"\n :key=\"category.value\"\n type=\"button\"\n :aria-pressed=\"props.selected === category.value\"\n :class=\"[\n styles['agent-welcome__category'],\n styles['agent-welcome__rise-item'],\n { [styles['agent-welcome__category--selected']]: props.selected === category.value },\n ]\"\n :style=\"riseDelay(index)\"\n @click=\"emit('select', category.value)\">\n <Icon\n :class=\"styles['agent-welcome__category-icon']\"\n :name=\"category.icon\"\n :size=\"24\" />\n <span :class=\"styles['agent-welcome__category-label']\">{{ category.label }}</span>\n </button>\n </div>\n\n <div\n v-if=\"props.quickActions.length > 0\"\n :class=\"styles['agent-welcome__quick-actions']\">\n <button\n v-for=\"(action, index) in props.quickActions\"\n :key=\"action.id\"\n type=\"button\"\n :class=\"[styles['agent-welcome__quick-action'], styles['agent-welcome__rise-item']]\"\n :style=\"riseDelay(index)\"\n @click=\"emit('quick-action', action.prompt)\">\n {{ action.label }}\n </button>\n </div>\n\n <div\n v-if=\"$slots.cards\"\n ref=\"cardsRef\"\n :class=\"styles['agent-welcome__cards']\">\n <slot name=\"cards\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@/index';\nimport styles from './InBlueprintCard.module.scss';\n\nexport interface InBlueprintCardProps {\n title?: string;\n subtitle?: string;\n imageUrl?: string;\n badgeText?: string;\n}\n\nconst props = withDefaults(defineProps<InBlueprintCardProps>(), {\n title: 'Design preview',\n subtitle: undefined,\n imageUrl: undefined,\n badgeText: undefined,\n});\n\nconst emit = defineEmits<{\n open: [];\n}>();\n\nconst onOpen = () => {\n emit('open');\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n emit('open');\n }\n};\n</script>\n\n<template>\n <div\n role=\"button\"\n tabindex=\"0\"\n :class=\"styles['in-blueprint-card']\"\n @click=\"onOpen\"\n @keydown=\"onKeydown\">\n <div :class=\"styles['in-blueprint-card__thumb']\">\n <img\n v-if=\"props.imageUrl\"\n :alt=\"props.title\"\n :class=\"styles['in-blueprint-card__image']\"\n :src=\"props.imageUrl\">\n <slot\n v-else\n name=\"thumb\">\n <div :class=\"styles['in-blueprint-card__placeholder']\">\n <Icon\n name=\"line-figma\"\n :size=\"24\" />\n </div>\n </slot>\n <span\n v-if=\"props.badgeText\"\n :class=\"styles['in-blueprint-card__badge']\">\n {{ props.badgeText }}\n </span>\n </div>\n <div :class=\"styles['in-blueprint-card__footer']\">\n <div :class=\"styles['in-blueprint-card__text']\">\n <span :class=\"styles['in-blueprint-card__title']\">\n {{ props.title }}\n </span>\n <span\n v-if=\"props.subtitle\"\n :class=\"styles['in-blueprint-card__subtitle']\">\n {{ props.subtitle }}\n </span>\n </div>\n <span :class=\"styles['in-blueprint-card__open']\">\n <Icon\n name=\"line-external-link\"\n :size=\"16\" />\n </span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InAgentFiles.module.scss';\n\nexport interface InAgentFile {\n id: string;\n name: string;\n /** Secondary line - the source or format, e.g. \"Figma\". */\n type: string;\n thumbnailUrl?: string;\n /** Shown on a neutral tile when the file has no thumbnail. */\n icon?: AllIconNames;\n /** A brand theme shows its palette instead of a thumbnail. */\n swatch?: string[];\n}\n\nexport interface InAgentFilesProps {\n files?: InAgentFile[];\n removable?: boolean;\n /** Message variant: cards wrap and align right instead of scrolling in one row. */\n wrap?: boolean;\n removeLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InAgentFilesProps>(), {\n files: () => [],\n removable: true,\n wrap: false,\n removeLabel: 'Remove',\n});\n\n// Four bands read as a palette at 40px; more just become slivers.\nconst SWATCH_LIMIT = 4;\n\nconst emit = defineEmits<{\n remove: [id: string];\n open: [id: string];\n}>();\n</script>\n\n<template>\n <div\n v-if=\"props.files.length > 0\"\n :class=\"[styles['agent-files'], { [styles['agent-files--wrap']]: props.wrap }]\">\n <div\n v-for=\"file in props.files\"\n :key=\"file.id\"\n :class=\"styles['agent-files__card']\"\n @click=\"emit('open', file.id)\">\n <div :class=\"styles['agent-files__body']\">\n <span\n v-if=\"file.swatch?.length\"\n :class=\"[styles['agent-files__thumb'], styles['agent-files__thumb--swatch']]\">\n <span\n v-for=\"color in file.swatch.slice(0, SWATCH_LIMIT)\"\n :key=\"color\"\n :class=\"styles['agent-files__swatch-band']\"\n :style=\"{ background: color }\" />\n </span>\n <img\n v-else-if=\"file.thumbnailUrl\"\n :alt=\"file.name\"\n :class=\"styles['agent-files__thumb']\"\n :src=\"file.thumbnailUrl\">\n <span\n v-else\n :class=\"[styles['agent-files__thumb'], styles['agent-files__thumb--icon']]\">\n <Icon\n v-if=\"file.icon\"\n :name=\"file.icon\"\n :size=\"24\" />\n </span>\n\n <span :class=\"styles['agent-files__labels']\">\n <span :class=\"styles['agent-files__name']\">{{ file.name }}</span>\n <span :class=\"styles['agent-files__type']\">{{ file.type }}</span>\n </span>\n\n <button\n v-if=\"props.removable\"\n type=\"button\"\n :aria-label=\"props.removeLabel\"\n :class=\"styles['agent-files__remove']\"\n @click.stop=\"emit('remove', file.id)\">\n <Icon\n name=\"chip-close-6\"\n :size=\"6\" />\n </button>\n </div>\n </div>\n </div>\n</template>\n","import { onBeforeUnmount, onMounted, watch, type Ref } from 'vue';\n\nconst prefersReducedMotion = (): boolean => typeof window !== 'undefined'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\ninterface GeneratingRingOptions {\n containerRef: Ref<HTMLElement | null>;\n ringRef: Ref<SVGSVGElement | null>;\n active: Ref<boolean>;\n}\n\ntype Rgba = [number, number, number, number];\n\n// Comet colour profile along the perimeter, keyed by arc-length t ∈ [0,1]:\n// transparent until 0.21, red fading in, red→violet opaque core, violet\n// fading back out by 0.79 — the tapered generating-state stroke from Figma.\nconst COMET_STOPS: { p: number; c: Rgba }[] = [\n { p: 0.21, c: [250, 58, 58, 0] },\n { p: 0.37, c: [250, 58, 58, 1] },\n { p: 0.63, c: [118, 48, 212, 1] },\n { p: 0.79, c: [118, 48, 212, 0] },\n];\n\nconst SEGMENTS = 200;\n// Sub-segments per corner arc. Corners are drawn as true SVG arc commands, so\n// this only controls colour resolution across the (tiny) corner, not shape.\nconst CORNER_SEGMENTS = 4;\nconst PERIOD_MS = 2600;\nconst STROKE_WIDTH = 2;\n// Outer corner radius = container radius (5px) + 2px outset − 1px stroke inset.\nconst RING_RADIUS = 6;\nconst GLOW_STD_DEVIATION = 1.5;\n\nfunction cometColor (t: number): Rgba {\n const [first] = COMET_STOPS;\n const last = COMET_STOPS[COMET_STOPS.length - 1];\n\n if (t <= first.p || t >= last.p) {\n return [0, 0, 0, 0];\n }\n\n for (let i = 0; i < COMET_STOPS.length - 1; i += 1) {\n const a = COMET_STOPS[i];\n const b = COMET_STOPS[i + 1];\n\n if (t >= a.p && t <= b.p) {\n const f = (t - a.p) / (b.p - a.p);\n\n return [\n Math.round(a.c[0] + f * (b.c[0] - a.c[0])),\n Math.round(a.c[1] + f * (b.c[1] - a.c[1])),\n Math.round(a.c[2] + f * (b.c[2] - a.c[2])),\n a.c[3] + f * (b.c[3] - a.c[3]),\n ];\n }\n }\n\n return [0, 0, 0, 0];\n}\n\nfunction buildGlowDefs (svgNs: string, filterId: string): SVGDefsElement {\n const defs = document.createElementNS(svgNs, 'defs') as SVGDefsElement;\n const filter = document.createElementNS(svgNs, 'filter');\n\n filter.setAttribute('id', filterId);\n filter.setAttribute('x', '-50%');\n filter.setAttribute('y', '-50%');\n filter.setAttribute('width', '200%');\n filter.setAttribute('height', '200%');\n\n const blur = document.createElementNS(svgNs, 'feGaussianBlur');\n\n blur.setAttribute('in', 'SourceGraphic');\n blur.setAttribute('stdDeviation', String(GLOW_STD_DEVIATION));\n blur.setAttribute('result', 'blur');\n\n const merge = document.createElementNS(svgNs, 'feMerge');\n const glowNode = document.createElementNS(svgNs, 'feMergeNode');\n const sourceNode = document.createElementNS(svgNs, 'feMergeNode');\n\n glowNode.setAttribute('in', 'blur');\n sourceNode.setAttribute('in', 'SourceGraphic');\n merge.append(glowNode, sourceNode);\n filter.append(blur, merge);\n defs.append(filter);\n\n return defs;\n}\n\n/**\n * Animated \"comet\" ring traced around the composer while the agent generates.\n * Ported from cortex-fe `useGeneratingRing` so the Design Agent composer\n * matches the cortex chatbox behaviour.\n */\nexport function useGeneratingRing (options: GeneratingRingOptions): void {\n const { containerRef, ringRef, active } = options;\n // Unique per mount so two concurrent rings never collide on the same SVG\n // filter id in one document.\n const glowFilterId = `cortex-gen-ring-glow-${Math.random().toString(36).slice(2, 8)}`;\n let segmentMids: number[] = [];\n let lineEls: SVGPathElement[] = [];\n let rafId: number | null = null;\n let startTs: number | null = null;\n let observer: ResizeObserver | null = null;\n\n function buildGeometry (): void {\n const container = containerRef.value;\n const ring = ringRef.value;\n\n if (!container || !ring) {\n return;\n }\n\n const rect = container.getBoundingClientRect();\n const w = rect.width + STROKE_WIDTH * 2;\n const h = rect.height + STROKE_WIDTH * 2;\n\n if (!w || !h) {\n return;\n }\n\n ring.setAttribute('viewBox', `0 0 ${w} ${h}`);\n ring.setAttribute('width', String(w));\n ring.setAttribute('height', String(h));\n\n const inset = 1;\n const r = Math.max(RING_RADIUS, 1);\n const rw = w - inset * 2;\n const rh = h - inset * 2;\n const straight = rw - 2 * r;\n const side = rh - 2 * r;\n const arc = (Math.PI / 2) * r;\n const total = 2 * straight + 2 * side + 4 * arc;\n\n // Walk the rounded-rect perimeter clockwise from the top edge,\n // returning the point at arc-length distance `d`.\n function pointAt (d: number): { x: number; y: number } {\n let rem = d;\n\n if (rem <= straight) {\n return { x: r + rem, y: 0 };\n }\n\n rem -= straight;\n\n if (rem <= arc) {\n const th = -Math.PI / 2 + rem / r;\n\n return { x: rw - r + r * Math.cos(th), y: r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= side) {\n return { x: rw, y: r + rem };\n }\n\n rem -= side;\n\n if (rem <= arc) {\n const th = rem / r;\n\n return { x: rw - r + r * Math.cos(th), y: rh - r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= straight) {\n return { x: rw - r - rem, y: rh };\n }\n\n rem -= straight;\n\n if (rem <= arc) {\n const th = Math.PI / 2 + rem / r;\n\n return { x: r + r * Math.cos(th), y: rh - r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= side) {\n return { x: 0, y: rh - r - rem };\n }\n\n rem -= side;\n\n const th = Math.PI + rem / r;\n\n return { x: r + r * Math.cos(th), y: r + r * Math.sin(th) };\n }\n\n const svgNs = 'http://www.w3.org/2000/svg';\n const mids: number[] = [];\n const lines: SVGPathElement[] = [];\n\n // Segment boundaries snap to region edges so a segment never straddles\n // a straight/arc boundary; corner segments render as true `A` arc\n // commands instead of chords — that keeps corners perfectly round.\n const regions: { len: number; isArc: boolean }[] = [\n { len: straight, isArc: false },\n { len: arc, isArc: true },\n { len: side, isArc: false },\n { len: arc, isArc: true },\n { len: straight, isArc: false },\n { len: arc, isArc: true },\n { len: side, isArc: false },\n { len: arc, isArc: true },\n ];\n const targetLen = total / SEGMENTS;\n let regionStart = 0;\n\n for (const region of regions) {\n const count = region.isArc\n ? CORNER_SEGMENTS\n : Math.max(1, Math.round(region.len / targetLen));\n\n for (let i = 0; i < count; i += 1) {\n const d0 = regionStart + (region.len * i) / count;\n const d1 = regionStart + (region.len * (i + 1)) / count;\n const p0 = pointAt(d0);\n const p1 = pointAt(d1);\n const from = `M ${(p0.x + inset).toFixed(2)} ${(p0.y + inset).toFixed(2)}`;\n const to = `${(p1.x + inset).toFixed(2)} ${(p1.y + inset).toFixed(2)}`;\n const path = document.createElementNS(svgNs, 'path');\n\n path.setAttribute('d', region.isArc ? `${from} A ${r} ${r} 0 0 1 ${to}` : `${from} L ${to}`);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', 'transparent');\n path.setAttribute('stroke-width', String(STROKE_WIDTH));\n path.setAttribute('stroke-linecap', 'butt');\n\n lines.push(path);\n mids.push((d0 + d1) / 2 / total);\n }\n\n regionStart += region.len;\n }\n\n const group = document.createElementNS(svgNs, 'g');\n\n group.setAttribute('filter', `url(#${glowFilterId})`);\n group.append(...lines);\n\n ring.replaceChildren(buildGlowDefs(svgNs, glowFilterId), group);\n lineEls = lines;\n segmentMids = mids;\n }\n\n function paint (phase: number): void {\n for (let i = 0; i < segmentMids.length; i += 1) {\n const t = (((segmentMids[i] - phase) % 1) + 1) % 1;\n const [red, green, blue, alpha] = cometColor(t);\n\n lineEls[i].setAttribute('stroke', `rgba(${red},${green},${blue},${alpha})`);\n }\n }\n\n function frame (ts: number): void {\n if (startTs === null) {\n startTs = ts;\n }\n\n paint(((ts - startTs) / PERIOD_MS) % 1);\n rafId = requestAnimationFrame(frame);\n }\n\n function start (): void {\n if (typeof requestAnimationFrame === 'undefined') {\n return;\n }\n\n buildGeometry();\n startTs = null;\n\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n // NOTE: reduced motion — one static comet frame keeps the generating state visible without the sweep.\n if (prefersReducedMotion()) {\n paint(0);\n } else {\n rafId = requestAnimationFrame(frame);\n }\n\n if (typeof ResizeObserver !== 'undefined' && containerRef.value && !observer) {\n observer = new ResizeObserver(() => {\n if (active.value) {\n buildGeometry();\n\n if (prefersReducedMotion()) {\n paint(0);\n }\n }\n });\n observer.observe(containerRef.value);\n }\n }\n\n function stop (): void {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n\n observer?.disconnect();\n observer = null;\n }\n\n watch(active, on => {\n if (on) {\n start();\n } else {\n stop();\n }\n });\n\n onMounted(() => {\n if (active.value) {\n start();\n }\n });\n\n onBeforeUnmount(stop);\n}\n","<script lang=\"ts\" setup>\nimport type { InAgentFile } from '../InAgentFiles/InAgentFiles.vue';\nimport { computed, nextTick, ref, watch } from 'vue';\n\nimport InAgentFiles from '../InAgentFiles/InAgentFiles.vue';\nimport { Icon } from '@/index';\nimport styles from './InAgentInput.module.scss';\nimport { useGeneratingRing } from './useGeneratingRing';\n\nexport interface InAgentInputProps {\n modelValue?: string;\n placeholder?: string;\n loading?: boolean;\n disabled?: boolean;\n maxLength?: number;\n /** Attachments carried by the next prompt - rendered above the field. */\n files?: InAgentFile[];\n}\n\nconst props = withDefaults(defineProps<InAgentInputProps>(), {\n modelValue: '',\n placeholder: 'Describe your idea to Design Agent',\n loading: false,\n disabled: false,\n maxLength: 2000,\n files: () => [],\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n send: [value: string];\n stop: [];\n attach: [];\n 'remove-file': [id: string];\n}>();\n\nconst MAX_TEXTAREA_HEIGHT = 120;\nconst CHAR_NOTICE_OFFSET = 200;\nconst ATTACH_LABEL = 'Add context';\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\n// Lets a consumer hand the caret over after seeding the field (quick-action chips, prompt\n// templates) without reaching into the DOM itself.\ndefineExpose({\n focus: (): void => {\n textareaRef.value?.focus();\n },\n});\n\nconst containerRef = ref<HTMLElement | null>(null);\nconst genRingRef = ref<SVGSVGElement | null>(null);\nconst message = ref(props.modelValue);\nconst isFocused = ref(false);\n\nuseGeneratingRing({ containerRef, ringRef: genRingRef, active: computed(() => props.loading) });\n\nconst charCount = computed(() => message.value.length);\nconst isOverLimit = computed(() => props.maxLength !== undefined && charCount.value > props.maxLength);\nconst showCharNotice = computed(\n () => props.maxLength !== undefined && charCount.value >= props.maxLength - CHAR_NOTICE_OFFSET\n);\nconst noticeText = computed(() => (isOverLimit.value\n ? `Enter a prompt up to ${props.maxLength} characters to continue.`\n : `You can enter a prompt up to ${props.maxLength} characters.`));\n\nconst canSend = computed(\n () => message.value.trim().length > 0 && !isOverLimit.value && !props.loading && !props.disabled\n);\n\nconst autoResize = (): void => {\n const textarea = textareaRef.value;\n\n if (!textarea) {\n return;\n }\n\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, MAX_TEXTAREA_HEIGHT)}px`;\n textarea.style.overflowY = textarea.scrollHeight > MAX_TEXTAREA_HEIGHT ? 'auto' : 'hidden';\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (newValue !== message.value) {\n message.value = newValue;\n void nextTick(autoResize);\n }\n }\n);\n\nwatch(message, newValue => {\n emit('update:modelValue', newValue);\n});\n\nconst handleInput = (): void => {\n autoResize();\n};\n\nconst handleSend = (): void => {\n if (!canSend.value) {\n return;\n }\n\n emit('send', message.value.trim());\n message.value = '';\n void nextTick(autoResize);\n};\n\nconst handleButtonClick = (): void => {\n if (props.loading) {\n emit('stop');\n } else {\n handleSend();\n }\n};\n\nconst handleAttach = (): void => {\n emit('attach');\n};\n</script>\n\n<template>\n <div :class=\"styles['chat-input']\">\n <div\n v-if=\"showCharNotice\"\n :class=\"[\n styles['chat-input__notice'],\n isOverLimit ? styles['chat-input__notice--warning'] : styles['chat-input__notice--info'],\n ]\">\n <span :class=\"styles['chat-input__notice-body']\">\n <Icon\n :class=\"styles['chat-input__notice-icon']\"\n :name=\"isOverLimit ? 'filled-caution-triangle-colored' : 'filled-info-circle'\"\n :size=\"16\" />\n <span :class=\"styles['chat-input__notice-text']\">{{ noticeText }}</span>\n </span>\n <span :class=\"styles['chat-input__notice-count']\">{{ charCount }}/{{ maxLength }}</span>\n </div>\n <div\n ref=\"containerRef\"\n :class=\"[\n styles['chat-input__container'],\n {\n [styles['chat-input__container--focused']]: isFocused,\n [styles['chat-input__container--generating']]: loading,\n },\n ]\">\n <svg\n v-show=\"loading\"\n ref=\"genRingRef\"\n aria-hidden=\"true\"\n :class=\"styles['chat-input__gen-ring']\" />\n <InAgentFiles\n v-if=\"props.files.length > 0\"\n :class=\"styles['chat-input__files']\"\n :files=\"props.files\"\n @remove=\"emit('remove-file', $event)\" />\n <div :class=\"styles['chat-input__text-area']\">\n <textarea\n ref=\"textareaRef\"\n rows=\"1\"\n :class=\"styles['chat-input__textarea']\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n v-model=\"message\"\n @blur=\"isFocused = false\"\n @focus=\"isFocused = true\"\n @input=\"handleInput\"\n @keydown.enter.exact.prevent=\"handleSend\"\n @keydown.enter.shift.stop />\n </div>\n <div :class=\"styles['chat-input__toolbar']\">\n <div :class=\"styles['chat-input__toolbar-left']\">\n <button\n type=\"button\"\n :aria-label=\"ATTACH_LABEL\"\n :class=\"styles['chat-input__icon-btn']\"\n :disabled=\"disabled\"\n @click=\"handleAttach\">\n <Icon\n name=\"line-plus-netural\"\n :size=\"24\" />\n </button>\n </div>\n <div :class=\"styles['chat-input__actions']\">\n <button\n type=\"button\"\n :aria-label=\"loading ? 'Stop' : 'Send'\"\n :class=\"styles['chat-input__send-btn']\"\n :disabled=\"!canSend && !loading\"\n @click=\"handleButtonClick\">\n <Icon\n :name=\"loading ? 'line-ai-stop-solid' : 'line-architect-segments-sent'\"\n :size=\"24\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, ref, watch } from 'vue';\n\nimport styles from './InChatEditForm.module.scss';\n\nexport interface InChatEditFormProps {\n /** The message being edited; seeds the draft each time the form opens. */\n content?: string;\n active?: boolean;\n cancelLabel?: string;\n updateLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InChatEditFormProps>(), {\n content: '',\n active: false,\n cancelLabel: 'Cancel',\n updateLabel: 'Update',\n});\n\nconst emit = defineEmits<{\n cancel: [];\n update: [text: string];\n}>();\n\nconst draft = ref(props.content);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst trimmed = computed(() => draft.value.trim());\nconst isDirty = computed(() => trimmed.value !== '' && trimmed.value !== props.content);\n\n// Opening reseeds from the message and takes the caret; the form stays mounted either way so\n// the cross-fade with the bubble has something to animate.\nwatch(\n () => props.active,\n isActive => {\n if (!isActive) {\n return;\n }\n\n draft.value = props.content;\n\n void nextTick(() => {\n inputRef.value?.focus();\n });\n },\n { immediate: true }\n);\n\nconst onUpdate = (): void => {\n if (!isDirty.value) {\n return;\n }\n\n emit('update', trimmed.value);\n};\n</script>\n\n<template>\n <div :class=\"[styles['chat-edit-form'], { [styles['chat-edit-form--active']]: props.active }]\">\n <div :class=\"styles['chat-edit-form__body']\">\n <div :class=\"styles['chat-edit-form__border']\">\n <input\n ref=\"inputRef\"\n type=\"text\"\n :class=\"styles['chat-edit-form__input']\"\n :tabindex=\"props.active ? 0 : -1\"\n v-model=\"draft\"\n @keydown.enter.prevent=\"onUpdate\"\n @keydown.esc=\"emit('cancel')\">\n </div>\n <div :class=\"styles['chat-edit-form__actions']\">\n <button\n type=\"button\"\n :class=\"[styles['chat-edit-form__button'], styles['chat-edit-form__button--cancel']]\"\n :tabindex=\"props.active ? 0 : -1\"\n @click=\"emit('cancel')\">\n {{ props.cancelLabel }}\n </button>\n <button\n type=\"button\"\n :class=\"[styles['chat-edit-form__button'], styles['chat-edit-form__button--update']]\"\n :disabled=\"!isDirty\"\n :tabindex=\"props.active ? 0 : -1\"\n @click=\"onUpdate\">\n {{ props.updateLabel }}\n </button>\n </div>\n </div>\n </div>\n</template>\n","import type { Ref } from 'vue';\nimport { inject, ref } from 'vue';\n\nconst BUBBLE_CLEARANCE_PX = 56;\n\n/** Exported for unit tests — the flip decision without any DOM wiring. */\nexport function pickTooltipPosition (rowTop: number, scrollerTop: number): string {\n return rowTop - scrollerTop < BUBBLE_CLEARANCE_PX ? 'bottom center' : 'top center';\n}\n\ninterface MessageTooltipPosition {\n tooltipPosition: Ref<string>;\n onActionsEnter: (event: MouseEvent) => void;\n}\n\nexport function useMessageTooltipPosition (): MessageTooltipPosition {\n const scrollRef = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\n const tooltipPosition = ref('top center');\n\n const onActionsEnter = (event: MouseEvent): void => {\n const scroller = scrollRef?.value;\n const row = event.currentTarget as HTMLElement | null;\n\n if (!scroller || !row) {\n return;\n }\n\n tooltipPosition.value = pickTooltipPosition(\n row.getBoundingClientRect().top,\n scroller.getBoundingClientRect().top\n );\n };\n\n return { tooltipPosition, onActionsEnter };\n}\n","<script lang=\"ts\" setup>\nimport type { InAgentFile } from '../InAgentFiles/InAgentFiles.vue';\nimport type { Placement } from '@floating-ui/vue';\nimport { computed, getCurrentInstance } from 'vue';\n\nimport InAgentFiles from '../InAgentFiles/InAgentFiles.vue';\nimport InChatEditForm from '../InChatEditForm/InChatEditForm.vue';\nimport { useMessageTooltipPosition } from '@/composables/useMessageTooltipPosition';\nimport { Icon, Tooltip } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InChatBubble.module.scss';\n\nexport interface InChatBubbleProps {\n content?: string;\n timestamp?: string | number | Date;\n authorLabel?: string;\n showTimestamp?: boolean;\n showCopy?: boolean;\n editable?: boolean;\n /** Controlled by the conversation: only one message may be in edit mode at a time. */\n editing?: boolean;\n /**\n * Editing is momentarily unavailable (a turn is in flight). The action stays in place and\n * greys out rather than unmounting - removing it resizes the action row, and the bubble\n * shares that row's width, so the whole message would jump.\n */\n editDisabled?: boolean;\n copied?: boolean;\n copyLabel?: string;\n editLabel?: string;\n cancelLabel?: string;\n updateLabel?: string;\n /** Attachments this message was sent with - rendered above the bubble. */\n files?: InAgentFile[];\n}\n\nconst props = withDefaults(defineProps<InChatBubbleProps>(), {\n content: '',\n timestamp: () => Date.now(),\n authorLabel: 'You',\n showTimestamp: true,\n showCopy: false,\n editable: false,\n editing: false,\n editDisabled: false,\n copied: false,\n copyLabel: 'Copy',\n editLabel: 'Edit',\n cancelLabel: 'Cancel',\n updateLabel: 'Update',\n files: () => [],\n});\n\nconst emit = defineEmits<{\n copy: [];\n edit: [];\n 'cancel-edit': [];\n update: [text: string];\n}>();\n\nconst formattedTime = computed(() => {\n const date = new Date(props.timestamp);\n\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hourCycle: 'h23',\n });\n});\n\nconst copyIcon = computed<AllIconNames>(() => (props.copied ? 'line-check-natural' : 'line-copy'));\nconst { tooltipPosition, onActionsEnter } = useMessageTooltipPosition();\nconst tooltipPlacement = computed<Placement>(() => (\n tooltipPosition.value.startsWith('bottom') ? 'bottom' : 'top'\n));\nconst uid = getCurrentInstance()?.uid ?? 0;\n</script>\n\n<template>\n <div :class=\"styles['in-chat-bubble']\">\n <InAgentFiles\n v-if=\"props.files.length > 0\"\n wrap\n :class=\"styles['in-chat-bubble__files']\"\n :files=\"props.files\"\n :removable=\"false\" />\n <InChatEditForm\n v-if=\"editable\"\n :active=\"editing\"\n :cancel-label=\"cancelLabel\"\n :content=\"content\"\n :update-label=\"updateLabel\"\n @cancel=\"emit('cancel-edit')\"\n @update=\"emit('update', $event)\" />\n <div\n :class=\"[styles['in-chat-bubble__view'], { [styles['in-chat-bubble__view--hidden']]: editing }]\">\n <div\n :class=\"styles['in-chat-bubble__row']\"\n @mouseenter=\"onActionsEnter\">\n <div :class=\"styles['in-chat-bubble__actions']\">\n <Tooltip\n v-if=\"showCopy\"\n :id=\"`in-chat-bubble-copy-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"copyLabel\">\n <button\n type=\"button\"\n :aria-label=\"copyLabel\"\n :class=\"styles['in-chat-bubble__action']\"\n @click=\"emit('copy')\">\n <Icon\n :name=\"copyIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"editable\"\n :id=\"`in-chat-bubble-edit-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"editLabel\">\n <button\n type=\"button\"\n :aria-label=\"editLabel\"\n :class=\"styles['in-chat-bubble__action']\"\n :disabled=\"editDisabled\"\n @click=\"emit('edit')\">\n <Icon\n name=\"line-edit\"\n :size=\"24\" />\n </button>\n </Tooltip>\n </div>\n <div :class=\"styles['in-chat-bubble__bubble']\">\n <slot>\n <span :class=\"styles['in-chat-bubble__text']\">{{ content }}</span>\n </slot>\n </div>\n </div>\n <span\n v-if=\"showTimestamp\"\n :class=\"styles['in-chat-bubble__timestamp']\">\n {{ authorLabel }} · {{ formattedTime }}\n </span>\n </div>\n </div>\n</template>\n","import { ref } from 'vue';\nimport type DOMPurify from 'dompurify';\nimport type { marked as Marked, Tokens } from 'marked';\n\ntype MarkdownDeps = { marked: typeof Marked; purify: typeof DOMPurify };\n\nfunction escapeHtml (value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction buildRenderer (marked: typeof Marked) {\n const renderer = new marked.Renderer();\n\n renderer.link = function renderLink (token: Tokens.Link): string {\n const titleAttr = token.title ? ` title=\"${token.title}\"` : '';\n\n return `<a href=\"${token.href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${token.text}</a>`;\n };\n\n renderer.code = function renderCode (token: Tokens.Code): string {\n const [lang] = (token.lang ?? '').trim().split(/\\s+/);\n\n return '<div class=\"md-code\">'\n + '<div class=\"md-code__header\">'\n + `<span class=\"md-code__lang\">${escapeHtml(lang) || 'code'}</span>`\n + '<button type=\"button\" class=\"md-code__copy\">Copy</button>'\n + '</div>'\n + `<pre><code>${escapeHtml(token.text)}</code></pre>`\n + '</div>';\n };\n\n return renderer;\n}\n\nlet deps: MarkdownDeps | null = null;\nlet loading: Promise<void> | null = null;\n\n// Bumping a ref (rather than resolving a promise the caller awaits) is what keeps formatMarkdown\n// synchronous: a computed that calls it re-runs by itself once the chunk lands.\nconst depsLoaded = ref(false);\n\nfunction ensureDeps (): void {\n if (deps !== null || loading !== null) {\n return;\n }\n\n loading = Promise.all([import('marked'), import('dompurify')])\n .then(([markedModule, purifyModule]) => {\n const { marked } = markedModule;\n\n marked.setOptions({\n renderer: buildRenderer(marked),\n breaks: true,\n gfm: true,\n });\n\n deps = { marked, purify: purifyModule.default };\n depsLoaded.value = true;\n })\n .catch(error => {\n loading = null;\n console.warn('Markdown renderer failed to load:', error);\n });\n}\n\n/**\n * Delegated click handler for the copy button rendered inside v-html content.\n * Attach on any container that renders formatMarkdown() output.\n */\nexport function handleCodeCopyClick (event: MouseEvent): void {\n const button = (event.target as HTMLElement).closest?.('.md-code__copy');\n\n if (!(button instanceof HTMLButtonElement)) {\n return;\n }\n\n const code = button.closest('.md-code')?.querySelector('code')?.textContent ?? '';\n\n navigator.clipboard.writeText(code).then(() => {\n button.textContent = 'Copied!';\n window.setTimeout(() => {\n button.textContent = 'Copy';\n }, 1500);\n }).catch(error => console.warn('Copy failed:', error));\n}\n\nconst INLINE_CODE_LINE = /^(\\s*)`([^`]+)`\\s*$/;\n\nfunction collectInlineCodeRun (lines: string[], start: number): { run: string[]; codeCount: number; end: number } {\n const run: string[] = [];\n let codeCount = 0;\n let j = start;\n\n while (j < lines.length) {\n const match = lines[j].match(INLINE_CODE_LINE);\n\n if (match) {\n run.push(match[1] + match[2]);\n codeCount += 1;\n j += 1;\n } else if (lines[j].trim() === '') {\n let k = j;\n\n while (k < lines.length && lines[k].trim() === '') {\n k += 1;\n }\n\n if (k >= lines.length || !INLINE_CODE_LINE.test(lines[k])) {\n break;\n }\n\n while (j < k) {\n run.push('');\n j += 1;\n }\n } else {\n break;\n }\n }\n\n return { run, codeCount, end: j };\n}\n\nfunction mergeInlineCodeRuns (content: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const { run, codeCount, end } = INLINE_CODE_LINE.test(lines[i])\n ? collectInlineCodeRun(lines, i)\n : { run: [], codeCount: 0, end: i };\n\n if (codeCount >= 2) {\n const indents = run\n .filter(line => line.trim() !== '')\n .map(line => line.match(/^\\s*/)![0].length);\n const minIndent = Math.min(...indents);\n\n out.push('```', ...run.map(line => line.slice(minIndent)), '```');\n i = end;\n } else {\n out.push(lines[i]);\n i += 1;\n }\n }\n\n return out.join('\\n');\n}\n\nexport function useMarkdown (): { formatMarkdown (content: string): string } {\n const formatMarkdown = (content: string): string => {\n if (!content) {\n return '';\n }\n\n ensureDeps();\n void depsLoaded.value;\n\n // marked and dompurify are dynamically imported so consumers that never render markdown\n // do not pay for them; until that chunk resolves, show the text escaped rather than raw.\n if (deps === null) {\n return escapeHtml(content);\n }\n\n const html = deps.marked.parse(mergeInlineCodeRuns(content)) as string;\n\n const wrapped = html\n .replace(/<table>/g, '<div class=\"md-table\"><table>')\n .replace(/<\\/table>/g, '</table></div>');\n\n return deps.purify.sanitize(wrapped, { ADD_ATTR: ['target', 'rel'] });\n };\n\n return { formatMarkdown };\n}\n","<script lang=\"ts\" setup>\nimport type { Slots } from 'vue';\nimport { computed, useSlots } from 'vue';\nimport { useMarkdown, handleCodeCopyClick } from '@/composables/useMarkdown';\nimport { Icon } from '@/index';\nimport styles from './InAgentMessage.module.scss';\n\nexport interface InAgentMessageProps {\n text?: string;\n showAvatar?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentMessageProps>(), {\n text: '',\n showAvatar: false,\n});\n\nconst slots: Slots = useSlots();\nconst { formatMarkdown } = useMarkdown();\nconst hasDefaultSlot = computed<boolean>(() => Boolean(slots.default));\nconst renderedHtml = computed<string>(() => formatMarkdown(props.text ?? ''));\n</script>\n\n<template>\n <div :class=\"styles['in-agent-message']\">\n <div\n v-if=\"showAvatar\"\n :class=\"styles['in-agent-message__avatar']\">\n <Icon\n name=\"line-smart-ai\"\n :size=\"24\" />\n </div>\n <div :class=\"styles['in-agent-message__body']\">\n <slot v-if=\"hasDefaultSlot\" />\n <div\n v-else-if=\"text\"\n :class=\"styles['in-agent-message__md']\"\n v-html=\"renderedHtml\"\n @click=\"handleCodeCopyClick\" />\n <span\n v-else\n :class=\"styles['in-agent-message__text']\">{{ text }}</span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, watch } from 'vue';\n\nimport { Icon } from '@/index';\nimport styles from './InChatLoading.module.scss';\n\nexport interface InChatLoadingProps {\n text?: string;\n cycling?: boolean;\n}\n\nconst props = withDefaults(defineProps<InChatLoadingProps>(), {\n text: '',\n cycling: true,\n});\n\nconst PHASE_INTERVAL = 2500;\nconst phases = ['Analyzing…', 'Processing…', 'Searching…', 'Synthesizing…'];\nconst phaseIndex = ref(0);\nlet intervalId: ReturnType<typeof setInterval> | null = null;\n\nconst displayText = computed(() => {\n if (props.text) {\n return props.text;\n }\n\n return phases[phaseIndex.value];\n});\n\nconst stopCycling = (): void => {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n};\n\nconst startCycling = (): void => {\n if (intervalId) {\n return;\n }\n\n intervalId = setInterval(() => {\n phaseIndex.value = (phaseIndex.value + 1) % phases.length;\n }, PHASE_INTERVAL);\n};\n\nwatch(\n () => props.cycling && !props.text,\n active => {\n if (active) {\n startCycling();\n } else {\n stopCycling();\n }\n },\n { immediate: true }\n);\n\nonUnmounted(stopCycling);\n</script>\n\n<template>\n <div :class=\"styles['in-chat-loading']\">\n <Icon\n name=\"agent-analyzing\"\n :class=\"styles['in-chat-loading__icon']\"\n :size=\"24\" />\n <span :class=\"styles['in-chat-loading__text']\">{{ displayText }}</span>\n </div>\n</template>\n","<script lang=\"ts\" setup>\n// cspell:ignore retryable\nimport type { Placement } from '@floating-ui/vue';\nimport { computed, getCurrentInstance, ref, watch } from 'vue';\n\nimport { useMessageTooltipPosition } from '@/composables/useMessageTooltipPosition';\nimport { Icon, Tooltip } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InChatMessageActions.module.scss';\n\nexport interface InChatMessageActionsProps {\n feedback?: 'like' | 'dislike' | null;\n copied?: boolean;\n copyLabel?: string;\n likeLabel?: string;\n dislikeLabel?: string;\n retryable?: boolean;\n retryLabel?: string;\n /** A failed turn offers only a retry - there is nothing to copy or rate. */\n showCopy?: boolean;\n showFeedback?: boolean;\n}\n\nconst props = withDefaults(defineProps<InChatMessageActionsProps>(), {\n feedback: null,\n copied: false,\n copyLabel: 'Copy',\n likeLabel: 'Like',\n dislikeLabel: 'Dislike',\n retryable: false,\n retryLabel: 'Retry',\n showCopy: true,\n showFeedback: true,\n});\n\nconst emit = defineEmits<{\n copy: [];\n like: [];\n dislike: [];\n retry: [];\n}>();\n\nconst COPIED_TICK_DURATION = 1500;\nconst showTick = ref(false);\nlet tickTimeout: ReturnType<typeof setTimeout> | null = null;\n\nconst startTick = (): void => {\n showTick.value = true;\n\n if (tickTimeout) {\n clearTimeout(tickTimeout);\n }\n\n tickTimeout = setTimeout(() => {\n showTick.value = false;\n tickTimeout = null;\n }, COPIED_TICK_DURATION);\n};\n\nwatch(\n () => props.copied,\n isCopied => {\n if (isCopied) {\n startTick();\n }\n },\n { immediate: true }\n);\n\nconst copyIcon = computed<AllIconNames>(() => (showTick.value ? 'line-check-natural' : 'line-copy'));\nconst likeIcon = computed<AllIconNames>(() => {\n if (props.feedback === 'like') {\n return 'feedback-helpful-selected';\n }\n\n return 'line-ai-like';\n});\nconst dislikeIcon = computed<AllIconNames>(() => {\n if (props.feedback === 'dislike') {\n return 'feedback-not-helpful-selected';\n }\n\n return 'line-ai-dislike';\n});\n\nconst onCopy = (): void => {\n startTick();\n emit('copy');\n};\n\nconst { tooltipPosition, onActionsEnter } = useMessageTooltipPosition();\nconst tooltipPlacement = computed<Placement>(() => (\n tooltipPosition.value.startsWith('bottom') ? 'bottom' : 'top'\n));\nconst uid = getCurrentInstance()?.uid ?? 0;\n</script>\n\n<template>\n <div\n :class=\"styles['in-chat-message-actions']\"\n @mouseenter=\"onActionsEnter\">\n <Tooltip\n v-if=\"retryable\"\n :id=\"`in-chat-message-actions-retry-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"retryLabel\">\n <button\n type=\"button\"\n :aria-label=\"retryLabel\"\n :class=\"styles['in-chat-message-actions__button']\"\n @click=\"emit('retry')\">\n <Icon\n name=\"line-reset\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showCopy\"\n :id=\"`in-chat-message-actions-copy-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"copyLabel\">\n <button\n type=\"button\"\n :aria-label=\"copyLabel\"\n :class=\"styles['in-chat-message-actions__button']\"\n @click=\"onCopy\">\n <Icon\n :name=\"copyIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showFeedback\"\n :id=\"`in-chat-message-actions-like-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"likeLabel\">\n <button\n type=\"button\"\n :aria-label=\"likeLabel\"\n :class=\"[\n styles['in-chat-message-actions__button'],\n { [styles['in-chat-message-actions__button--active']]: feedback === 'like' },\n ]\"\n @click=\"emit('like')\">\n <Icon\n :name=\"likeIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showFeedback\"\n :id=\"`in-chat-message-actions-dislike-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"dislikeLabel\">\n <button\n type=\"button\"\n :aria-label=\"dislikeLabel\"\n :class=\"[\n styles['in-chat-message-actions__button'],\n { [styles['in-chat-message-actions__button--active']]: feedback === 'dislike' },\n ]\"\n @click=\"emit('dislike')\">\n <Icon\n :name=\"dislikeIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, provide, onMounted, onUnmounted, nextTick, watch } from 'vue';\nimport InScrollToBottomButton from '@/components/InScrollToBottomButton/InScrollToBottomButton.vue';\nimport styles from './InAgentConversation.module.scss';\n\nconst SCROLL_THRESHOLD = 50;\nconst rootRef = ref<HTMLElement | null>(null);\nconst scrollRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLElement | null>(null);\nconst composerHeight = ref(0);\nconst userHasScrolledUp = ref(false);\nlet composerResizeObserver: ResizeObserver | null = null;\nlet scrollResizeObserver: ResizeObserver | null = null;\n\n// The keyboard boundary for slotted widgets: a question form owns arrow keys for the whole\n// panel, so it can tell a stray keypress from one that belongs to the conversation.\nprovide('inAgentConversationRoot', rootRef);\nprovide('inAgentScrollContainer', scrollRef);\nprovide('inAgentBottomInset', composerHeight);\n\nconst updateComposerHeight = (): void => {\n composerHeight.value = inputRef.value?.offsetHeight ?? 0;\n};\n\nconst onScroll = (): void => {\n const el = scrollRef.value;\n\n if (!el) {\n return;\n }\n\n // Measure against the last real message, not raw scrollHeight: the message list carries a\n // bottom spacer (pinned-scroll) and the scroller reserves paddingBottom for the floating\n // composer. Both inflate scrollHeight past the last message, so the naive\n // `scrollTop + clientHeight < scrollHeight` reads \"scrolled up\" even when that message sits\n // fully in view just above the composer - stranding the button over nothing.\n const messages = el.querySelectorAll<HTMLElement>('[data-msg-id]');\n const lastMessage = messages[messages.length - 1];\n\n if (!lastMessage) {\n userHasScrolledUp.value = false;\n\n return;\n }\n\n // The composer floats over the scroller's bottom, so the usable band ends composerHeight\n // above the container's bottom edge.\n const bandBottom = el.getBoundingClientRect().bottom - composerHeight.value;\n\n userHasScrolledUp.value = lastMessage.getBoundingClientRect().bottom - bandBottom > SCROLL_THRESHOLD;\n};\n\n// A question form takes the composer's place and is far taller than the input it replaces, so the\n// band a message can be read in moves the moment it mounts. Nothing else recomputes the flag at\n// that point: the form lives outside the scroller, so the observers below never see it.\nwatch(composerHeight, () => onScroll());\n\n// Resizing the panel or the window changes the scroller's height and its content's height\n// without firing `scroll`, so this flag would keep the value it had at the old size - stranding\n// the scroll-to-bottom button over a conversation that is already fully scrolled, where pressing\n// it has nothing left to travel to.\nconst observeScrollBox = (): void => {\n const el = scrollRef.value;\n\n if (typeof ResizeObserver === 'undefined' || !el) {\n return;\n }\n\n scrollResizeObserver?.disconnect();\n scrollResizeObserver = new ResizeObserver(() => onScroll());\n scrollResizeObserver.observe(el);\n\n // The content box too: a reflow at the same viewport height (a wizard opening, a message\n // rewrapping) changes scrollHeight, which decides the flag just as much as the viewport does.\n const content = el.firstElementChild;\n\n if (content) {\n scrollResizeObserver.observe(content);\n }\n};\n\nconst scrollBottom = (): void => {\n const el = scrollRef.value;\n\n if (!el) {\n return;\n }\n\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\n};\n\nonMounted(() => {\n nextTick(() => {\n updateComposerHeight();\n\n if (typeof ResizeObserver !== 'undefined' && inputRef.value) {\n composerResizeObserver = new ResizeObserver(updateComposerHeight);\n composerResizeObserver.observe(inputRef.value);\n }\n\n scrollRef.value?.addEventListener('scroll', onScroll, { passive: true });\n observeScrollBox();\n });\n});\n\nonUnmounted(() => {\n composerResizeObserver?.disconnect();\n composerResizeObserver = null;\n scrollResizeObserver?.disconnect();\n scrollResizeObserver = null;\n scrollRef.value?.removeEventListener('scroll', onScroll);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"styles['in-agent-conversation']\">\n <div\n ref=\"scrollRef\"\n :class=\"styles.scroll\"\n :style=\"{ paddingBottom: `${composerHeight}px` }\">\n <slot />\n </div>\n <div :class=\"styles.composer\">\n <div\n ref=\"inputRef\"\n :class=\"styles.input\">\n <InScrollToBottomButton\n :unread-count=\"0\"\n :visible=\"userHasScrolledUp\"\n @click=\"scrollBottom\" />\n <slot name=\"composer\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { ref, watch, inject, onMounted, onUnmounted, nextTick } from 'vue';\nimport styles from './InAgentMessageList.module.scss';\n\nexport interface InAgentMessageListItem {\n id: string;\n role: 'user' | 'agent';\n}\n\nexport interface InAgentMessageListProps {\n messages: InAgentMessageListItem[];\n autoScroll?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentMessageListProps>(), {\n autoScroll: false,\n});\n\nconst emit = defineEmits<{\n scroll: [payload: { isAtBottom: boolean; scrollTop: number }];\n}>();\n\nconst SCROLL_THRESHOLD = 50;\nconst scrollEl = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\n// The composer floats over the bottom of the scroller, so the band a message can be read in stops\n// short of the container's edge by this much.\nconst bottomInset = inject<Ref<number>>('inAgentBottomInset', ref(0));\nconst listRef = ref<HTMLElement | null>(null);\nconst userHasScrolledUp = ref(false);\nconst getScrollElement = (): HTMLElement | null => scrollEl.value;\n\n// \"At the bottom\" means the newest message is in view, not that scrollTop reached the end of the\n// range: the scroller reserves paddingBottom for the floating composer, and counting that empty\n// band as unread would report a reader at the visual bottom as scrolled away.\nconst measureAtBottom = (el: HTMLElement): boolean => {\n const last = listRef.value?.lastElementChild;\n\n if (!last) {\n return true;\n }\n\n const bandBottom = el.getBoundingClientRect().bottom - bottomInset.value;\n\n return last.getBoundingClientRect().bottom - bandBottom <= SCROLL_THRESHOLD;\n};\n\nconst handleScroll = (): boolean => {\n const el = getScrollElement();\n\n if (!el) {\n return true;\n }\n\n const isAtBottom = measureAtBottom(el);\n\n userHasScrolledUp.value = !isAtBottom;\n emit('scroll', { isAtBottom, scrollTop: el.scrollTop });\n\n return isAtBottom;\n};\n\n// Rest the conversation against the composer: the newest message's bottom meets the top of the\n// floating input, with the list's own bottom padding as the gap.\nconst scrollToBottom = (force = false, behavior: ScrollBehavior = 'smooth'): void => {\n if (userHasScrolledUp.value && !force) {\n return;\n }\n\n nextTick(() => {\n const el = getScrollElement();\n\n if (!el) {\n return;\n }\n\n const top = el.scrollHeight - el.clientHeight;\n\n if (behavior === 'auto') {\n el.scrollTop = top;\n } else {\n el.scrollTo({ top, behavior });\n }\n\n userHasScrolledUp.value = false;\n });\n};\n\nlet boundScrollEl: HTMLElement | null = null;\nlet sizeObserver: ResizeObserver | null = null;\nlet resizeFrame: number | null = null;\n\n// A resize changes the scroller's height and the content's height without ever firing `scroll`,\n// so the at-bottom flag would keep the value it held at the old size.\nconst observeSizeChanges = (scroller: HTMLElement): void => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n sizeObserver?.disconnect();\n sizeObserver = new ResizeObserver(() => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n }\n\n // Coalesced: a drag-resize fires this continuously.\n resizeFrame = requestAnimationFrame(() => {\n resizeFrame = null;\n\n // A reader at the bottom stays there as the box changes around them.\n if (!userHasScrolledUp.value) {\n scrollToBottom(true, 'auto');\n\n return;\n }\n\n handleScroll();\n });\n });\n sizeObserver.observe(scroller);\n\n if (listRef.value) {\n sizeObserver.observe(listRef.value);\n }\n};\n\nconst bindScrollListener = (): void => {\n const el = getScrollElement();\n\n if (el === boundScrollEl) {\n return;\n }\n\n if (boundScrollEl) {\n boundScrollEl.removeEventListener('scroll', handleScroll);\n }\n\n if (el) {\n el.addEventListener('scroll', handleScroll, { passive: true });\n boundScrollEl = el;\n observeSizeChanges(el);\n }\n};\n\n// Keyed on the ids, not the count: a turn ends by SWAPPING the loading row for the real reply,\n// which leaves the length untouched.\nwatch(\n () => props.messages.map(message => message.id).join('|'),\n (next, previous) => {\n const seen = new Set(previous ? previous.split('|') : []);\n const added = props.messages.filter(message => !seen.has(message.id));\n\n if (added.length === 0 || !props.autoScroll) {\n return;\n }\n\n // Sending always takes the reader to their own message; an arriving reply only follows if\n // they were already at the bottom, so reading back through the history is never yanked.\n scrollToBottom(added.some(message => message.role === 'user'));\n }\n);\n\n// A question form takes the composer's place and is far taller than the input it replaces, so it\n// can swallow the newest message; follow it back into view for a reader who was at the bottom.\nwatch(bottomInset, () => {\n if (userHasScrolledUp.value) {\n handleScroll();\n\n return;\n }\n\n nextTick(() => scrollToBottom(true));\n});\n\nwatch(scrollEl, () => {\n nextTick(() => bindScrollListener());\n});\n\nonMounted(() => {\n nextTick(() => {\n bindScrollListener();\n\n if (props.autoScroll) {\n scrollToBottom(true, 'auto');\n }\n });\n});\n\nonUnmounted(() => {\n if (boundScrollEl) {\n boundScrollEl.removeEventListener('scroll', handleScroll);\n boundScrollEl = null;\n }\n\n sizeObserver?.disconnect();\n sizeObserver = null;\n\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n});\n\ndefineExpose({ scrollToBottom });\n</script>\n\n<template>\n <div :class=\"styles['in-agent-message-list']\">\n <div\n ref=\"listRef\"\n :class=\"styles.list\">\n <div\n v-for=\"message in messages\"\n :key=\"message.id\"\n :data-msg-id=\"message.id\"\n :data-msg-role=\"message.role\">\n <slot :message=\"message\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Button } from '@/index';\nimport styles from './InWizardFooter.module.scss';\n\nexport interface InWizardFooterProps {\n currentStep: number;\n totalSteps: number;\n isRequired?: boolean;\n isLastStep?: boolean;\n canGoBack?: boolean;\n canContinue?: boolean;\n canSubmit?: boolean;\n backLabel?: string;\n nextLabel?: string;\n skipLabel?: string;\n submitLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InWizardFooterProps>(), {\n isRequired: true,\n isLastStep: false,\n canGoBack: false,\n canContinue: false,\n canSubmit: false,\n backLabel: 'Back',\n nextLabel: 'Next',\n skipLabel: 'Skip',\n submitLabel: 'Submit',\n});\n\nconst emit = defineEmits<{\n back: [];\n next: [];\n skip: [];\n submit: [];\n}>();\n</script>\n\n<template>\n <div :class=\"styles['wizard-footer']\">\n <div :class=\"styles['wizard-footer__left']\">\n <Button\n v-if=\"props.canGoBack\"\n color=\"secondary\"\n left-icon-name=\"line-arrow-left\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.backLabel\"\n @click=\"emit('back')\" />\n </div>\n <span\n v-if=\"props.totalSteps > 1\"\n :class=\"styles['wizard-footer__pagination']\">\n {{ props.currentStep + 1 }}/{{ props.totalSteps }}\n </span>\n <div :class=\"styles['wizard-footer__right']\">\n <Button\n v-if=\"props.isLastStep && props.canSubmit\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.submitLabel\"\n @click=\"emit('submit')\" />\n <Button\n v-else-if=\"props.isLastStep && props.isRequired\"\n data-wizard-footer-primary\n disabled\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.submitLabel\" />\n <Button\n v-else-if=\"props.isLastStep\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.skipLabel\"\n @click=\"emit('skip')\" />\n <Button\n v-else-if=\"props.canContinue\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-arrow-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.nextLabel\"\n @click=\"emit('next')\" />\n <Button\n v-else-if=\"props.isRequired\"\n data-wizard-footer-primary\n disabled\n color=\"secondary\"\n right-icon-name=\"line-arrow-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.nextLabel\" />\n <Button\n v-else\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-chevron-double-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.skipLabel\"\n @click=\"emit('skip')\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Button, Tooltip } from '@/index';\nimport styles from './InWizardHeader.module.scss';\n\nexport interface InWizardHeaderProps {\n title: string;\n infoTooltip?: string;\n showClose?: boolean;\n closeLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InWizardHeaderProps>(), {\n infoTooltip: '',\n showClose: true,\n closeLabel: 'Close',\n});\n\nconst emit = defineEmits<{\n close: [];\n}>();\n\nconst infoLabel = 'Info';\n</script>\n\n<template>\n <div :class=\"styles['wizard-header']\">\n <div :class=\"styles['wizard-header__content']\">\n <span :class=\"styles['wizard-header__title']\">{{ title }}</span>\n <div :class=\"styles['wizard-header__actions']\">\n <Tooltip\n v-if=\"props.infoTooltip\"\n id=\"wizard-info-tooltip\"\n placement=\"top\"\n :show-delay=\"0\"\n :text=\"props.infoTooltip\">\n <Button\n color=\"secondary\"\n left-icon-name=\"agent-info\"\n size=\"small\"\n variant=\"ghost\"\n :aria-label=\"infoLabel\"\n :icon-size=\"24\" />\n </Tooltip>\n <span\n v-if=\"props.infoTooltip && props.showClose\"\n :class=\"styles['wizard-header__divider']\" />\n <Button\n v-if=\"props.showClose\"\n color=\"secondary\"\n left-icon-name=\"agent-close\"\n size=\"small\"\n variant=\"ghost\"\n :aria-label=\"props.closeLabel\"\n :icon-size=\"24\"\n @click=\"emit('close')\" />\n </div>\n </div>\n <div :class=\"styles['wizard-header__divider-line']\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { ref, computed, watch, getCurrentInstance, inject, nextTick, onMounted, onBeforeUnmount } from 'vue';\nimport InWizardFooter from '../InWizardFooter/InWizardFooter.vue';\nimport InWizardHeader from '../InWizardHeader/InWizardHeader.vue';\nimport type { PlanSelectOption, InCardSelectValue } from '@/index';\nimport { InSingleSelect, InMultiSelect, InCardSelect } from '@/index';\nimport styles from './InAskUserWizard.module.scss';\n\nexport interface AgentQuestion {\n id: string;\n question: string;\n options: PlanSelectOption[];\n multiSelect?: boolean;\n allowCustom?: boolean;\n variant?: 'list' | 'card';\n /** Questions are skippable one by one unless explicitly marked required. */\n required?: boolean;\n}\n\nexport interface AgentAnswer {\n questionId: string;\n question: string;\n selectedLabels: string[];\n customText?: string;\n}\n\nexport interface InAskUserWizardProps {\n steps: AgentQuestion[];\n submitLabel?: string;\n nextLabel?: string;\n backLabel?: string;\n skipLabel?: string;\n customPlaceholder?: string;\n /** Keyboard help shown behind the header's info icon. Pass '' to hide the icon entirely. */\n infoTooltip?: string;\n closeLabel?: string;\n}\n\nconst NAVIGATION_TOOLTIP = '↑↓ to navigate options.<br>'\n + '←→ to navigate questions.<br>↵ to select and continue.';\n\nconst props = withDefaults(defineProps<InAskUserWizardProps>(), {\n submitLabel: 'Submit',\n nextLabel: 'Next',\n backLabel: 'Back',\n skipLabel: 'Skip',\n customPlaceholder: 'Enter your answer…',\n infoTooltip: NAVIGATION_TOOLTIP,\n closeLabel: 'Close',\n});\n\nconst emit = defineEmits<{\n submit: [answers: AgentAnswer[]];\n close: [];\n}>();\n\ninterface Draft {\n selected: string[];\n custom: string;\n}\n\nconst CUSTOM_KEY = '__ask_user_custom__';\nconst NAV_KEYS = ['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\nconst fallbackStep: AgentQuestion = { id: '', question: '', options: [] };\nconst wizardRoot = ref<HTMLElement | null>(null);\nconst listId = `ask-wizard-${getCurrentInstance()?.uid ?? 0}`;\nconst conversationRoot = inject<Ref<HTMLElement | null>>('inAgentConversationRoot', ref(null));\nconst stepIndex = ref(0);\nconst highlightedIndex = ref(-1);\n// The highlight ring belongs to whoever is driving. It renders only while the keyboard is,\n// and any mouse movement hands the affordance straight back to :hover.\nconst keyboardActive = ref(false);\n// True once ArrowDown has walked past the last row onto the footer's primary button.\nconst footerFocused = ref(false);\nconst drafts = ref<Record<string, Draft>>({});\n\nconst currentStep = computed<AgentQuestion>(\n () => props.steps[stepIndex.value] ?? fallbackStep\n);\n\nconst isLastStep = computed(() => stepIndex.value >= props.steps.length - 1);\n\nconst currentDraft = computed<Draft>(\n () => drafts.value[currentStep.value.id] ?? { selected: [], custom: '' }\n);\n\nconst currentAllowCustom = computed(\n () => Boolean(currentStep.value.allowCustom) && currentStep.value.variant !== 'card'\n);\n\nconst currentStepHasAnswer = computed(() => {\n const draft = currentDraft.value;\n\n return draft.selected.length > 0 || draft.custom.trim().length > 0;\n});\n\nconst currentSelectedSingle = computed<string | null>(\n () => currentDraft.value.selected[0] ?? null\n);\n\nconst currentStepRequired = computed(() => currentStep.value.required === true);\n\n// A required question holds the wizard until it is answered; every other question can be\n// left behind on its own (Skip), and lands in the submitted answers with no selection.\nconst canLeaveCurrentStep = computed(\n () => !currentStepRequired.value || currentStepHasAnswer.value\n);\n\nconst navValues = computed<string[]>(() => {\n const values = currentStep.value.options.map(option => option.value);\n\n if (currentAllowCustom.value) {\n values.push(CUSTOM_KEY);\n }\n\n return values;\n});\n\nconst highlightedValue = computed<string | null>(\n () => navValues.value[highlightedIndex.value] ?? null\n);\n\nconst isHighlightVisible = computed(() => keyboardActive.value && !footerFocused.value);\n\nconst customHighlighted = computed(\n () => isHighlightVisible.value && highlightedValue.value === CUSTOM_KEY\n);\n\nconst highlightedForSelect = computed<string | null>(() => {\n if (!isHighlightVisible.value || highlightedValue.value === CUSTOM_KEY) {\n return null;\n }\n\n return highlightedValue.value;\n});\n\nconst cardModelValue = computed<InCardSelectValue>(() => (currentStep.value.multiSelect\n ? currentDraft.value.selected\n : currentDraft.value.selected[0] ?? null));\n\nfunction setDraft (id: string, draft: Draft): void {\n drafts.value = { ...drafts.value, [id]: { ...draft } };\n}\n\nfunction selectValue (value: string): void {\n setDraft(currentStep.value.id, { selected: [value], custom: '' });\n}\n\nfunction toggleValue (value: string): void {\n const draft = currentDraft.value;\n const next = new Set(draft.selected);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n setDraft(currentStep.value.id, { selected: [...next], custom: draft.custom });\n}\n\nfunction onCustomInput (value: string): void {\n const draft = currentDraft.value;\n const selected = currentStep.value.multiSelect ? draft.selected : [];\n\n setDraft(currentStep.value.id, { selected, custom: value });\n}\n\nfunction onOptionFocus (value: string): void {\n const index = navValues.value.indexOf(value);\n\n if (index !== -1) {\n highlightedIndex.value = index;\n }\n}\n\nfunction onCustomFocus (): void {\n const customIndex = navValues.value.indexOf(CUSTOM_KEY);\n\n if (customIndex !== -1) {\n highlightedIndex.value = customIndex;\n }\n\n if (currentStep.value.multiSelect) {\n return;\n }\n\n const draft = currentDraft.value;\n\n if (draft.selected.length > 0) {\n setDraft(currentStep.value.id, { selected: [], custom: draft.custom });\n }\n}\n\nfunction optionRows (): HTMLElement[] {\n if (!wizardRoot.value) {\n return [];\n }\n\n return Array.from(wizardRoot.value.querySelectorAll<HTMLElement>('[role=\"option\"]'));\n}\n\nfunction focusCustomInput (): void {\n const input = wizardRoot.value?.querySelector<HTMLInputElement>(\n 'input:not([type=\"checkbox\"])'\n );\n\n input?.focus();\n}\n\nfunction focusOptionList (): void {\n const list = wizardRoot.value?.querySelector<HTMLElement>('[role=\"listbox\"]');\n\n (list ?? wizardRoot.value)?.focus();\n}\n\nfunction focusFooterPrimary (): void {\n footerFocused.value = true;\n\n nextTick(() => {\n wizardRoot.value?.querySelector<HTMLElement>('[data-wizard-footer-primary]')?.focus();\n });\n}\n\n// Virtual focus: rows are never focused, only highlighted, so the card keeps the caret and\n// arrow keys can't be swallowed by a row's own scroll-into-focus handling.\nfunction scrollHighlightIntoView (): void {\n nextTick(() => {\n optionRows()[highlightedIndex.value]?.scrollIntoView({ block: 'nearest' });\n });\n}\n\nfunction moveHighlight (delta: number): void {\n const count = navValues.value.length;\n\n if (count === 0) {\n return;\n }\n\n if (highlightedIndex.value === -1) {\n highlightedIndex.value = delta > 0 ? 0 : count - 1;\n } else {\n highlightedIndex.value = (highlightedIndex.value + delta + count) % count;\n }\n\n scrollHighlightIntoView();\n}\n\nfunction deactivateKeyboard (): void {\n keyboardActive.value = false;\n footerFocused.value = false;\n}\n\nfunction syncHighlightToSelection (): void {\n const draft = currentDraft.value;\n\n if (draft.selected.length > 0) {\n highlightedIndex.value = navValues.value.indexOf(draft.selected[0]);\n\n return;\n }\n\n const noOptions = currentStep.value.options.length === 0;\n\n if (currentAllowCustom.value && (draft.custom.trim().length > 0 || noOptions)) {\n highlightedIndex.value = navValues.value.indexOf(CUSTOM_KEY);\n\n return;\n }\n\n highlightedIndex.value = -1;\n}\n\nfunction goBack (): void {\n if (stepIndex.value > 0) {\n stepIndex.value--;\n }\n}\n\nfunction goNext (): void {\n if (!isLastStep.value && canLeaveCurrentStep.value) {\n stepIndex.value++;\n }\n}\n\nfunction finalize (): void {\n const answers: AgentAnswer[] = props.steps.map(step => {\n const draft = drafts.value[step.id] ?? { selected: [], custom: '' };\n const labelByValue = new Map(step.options.map(option => [option.value, option.label]));\n const selectedLabels = draft.selected.map(value => labelByValue.get(value) ?? value);\n const customText = draft.custom.trim();\n\n return {\n questionId: step.id,\n question: step.question,\n selectedLabels,\n customText: customText.length > 0 ? customText : undefined,\n };\n });\n\n const allEmpty = answers.every(\n answer => answer.selectedLabels.length === 0 && answer.customText === undefined\n );\n\n if (allEmpty) {\n emit('close');\n\n return;\n }\n\n emit('submit', answers);\n}\n\nfunction onWizardSubmit (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n goNext();\n}\n\nfunction onSkip (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n stepIndex.value++;\n}\n\nfunction isTextEntryTarget (target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return target.tagName === 'INPUT'\n || target.tagName === 'TEXTAREA'\n || target.isContentEditable;\n}\n\n// Space picks without leaving the question - the only way to gather several answers in a\n// multi-select by keyboard, since Enter commits.\nfunction pickHighlighted (): void {\n const highlighted = highlightedValue.value;\n\n if (highlighted === null || highlighted === CUSTOM_KEY) {\n return;\n }\n\n if (currentStep.value.multiSelect) {\n toggleValue(highlighted);\n\n return;\n }\n\n selectValue(highlighted);\n}\n\nfunction commitStep (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n goNext();\n}\n\n// Enter always means \"this question is done\": it takes the highlighted option (adding it in a\n// multi-select rather than toggling, so a commit never un-picks) and moves on.\nfunction handleEnter (event: KeyboardEvent): void {\n const highlighted = highlightedValue.value;\n\n if (highlighted === CUSTOM_KEY && !isTextEntryTarget(event.target)) {\n event.preventDefault();\n focusCustomInput();\n\n return;\n }\n\n event.preventDefault();\n\n if (highlighted !== null && highlighted !== CUSTOM_KEY) {\n const alreadySelected = currentDraft.value.selected.includes(highlighted);\n\n if (!alreadySelected) {\n if (currentStep.value.multiSelect) {\n toggleValue(highlighted);\n } else {\n selectValue(highlighted);\n }\n }\n }\n\n if (!canLeaveCurrentStep.value) {\n return;\n }\n\n commitStep();\n}\n\n// The form owns the keys for the whole conversation panel, not just its own card: answering\n// stays keyboard-driven after a click lands on a message action. Keys are ignored when they\n// belong to someone else - typing in another field, or anything outside the panel entirely.\nfunction ownsKeyEvent (event: KeyboardEvent): boolean {\n const target = event.target instanceof HTMLElement ? event.target : null;\n const inWizard = Boolean(target && wizardRoot.value?.contains(target));\n\n if (!inWizard && isTextEntryTarget(target)) {\n return false;\n }\n\n const boundary = conversationRoot.value ?? wizardRoot.value;\n\n return !target || !boundary || boundary.contains(target);\n}\n\nfunction leaveCustomInput (): void {\n const target = wizardRoot.value?.querySelector<HTMLInputElement>('input:not([type=\"checkbox\"])');\n\n target?.blur();\n keyboardActive.value = true;\n highlightedIndex.value = Math.max(0, navValues.value.indexOf(CUSTOM_KEY) - 1);\n focusOptionList();\n}\n\nfunction onKeydown (event: KeyboardEvent): void {\n if (!ownsKeyEvent(event)) {\n return;\n }\n\n const inTextField = isTextEntryTarget(event.target);\n\n // While the footer button holds real focus, Enter/Space belong to it; ArrowUp walks back.\n if (footerFocused.value) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n footerFocused.value = false;\n keyboardActive.value = true;\n highlightedIndex.value = navValues.value.length - 1;\n focusOptionList();\n }\n\n return;\n }\n\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLTextAreaElement) {\n return;\n }\n\n handleEnter(event);\n\n return;\n }\n\n if (event.key === 'Escape' && inTextField) {\n event.preventDefault();\n leaveCustomInput();\n\n return;\n }\n\n if (event.key === 'ArrowUp' && inTextField) {\n event.preventDefault();\n leaveCustomInput();\n\n return;\n }\n\n if (inTextField) {\n return;\n }\n\n if (event.key === ' ') {\n event.preventDefault();\n pickHighlighted();\n\n return;\n }\n\n if (!NAV_KEYS.includes(event.key)) {\n return;\n }\n\n // The first arrow press only reveals the highlight - navigation starts at the top row\n // rather than jumping straight past it.\n if (!keyboardActive.value) {\n event.preventDefault();\n keyboardActive.value = true;\n highlightedIndex.value = 0;\n scrollHighlightIntoView();\n\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n\n // Past the last row the footer takes over, so Skip stays reachable without answering.\n if (highlightedIndex.value >= navValues.value.length - 1) {\n focusFooterPrimary();\n } else {\n moveHighlight(1);\n }\n\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveHighlight(-1);\n\n break;\n case 'ArrowLeft':\n event.preventDefault();\n goBack();\n\n break;\n case 'ArrowRight':\n event.preventDefault();\n goNext();\n\n break;\n\n default:\n break;\n }\n}\n\n// Reset only when the actual set of questions changes — keyed on the step ids, NOT the\n// array reference. Consumers commonly bind `:steps` to a fresh array each render (e.g.\n// `:steps=\"mapQuestions(...)\"`); watching the reference would reset the step index on\n// every parent re-render, making Next/Back appear broken.\nconst stepsKey = computed(() => props.steps.map(step => step.id).join('|'));\n\nwatch(\n stepsKey,\n () => {\n const next: Record<string, Draft> = {};\n\n props.steps.forEach(step => {\n next[step.id] = { selected: [], custom: '' };\n });\n\n drafts.value = next;\n stepIndex.value = 0;\n syncHighlightToSelection();\n },\n { immediate: true }\n);\n\nwatch(stepIndex, () => {\n footerFocused.value = false;\n syncHighlightToSelection();\n\n if (currentStep.value.options.length === 0 && currentAllowCustom.value) {\n nextTick(focusCustomInput);\n\n return;\n }\n\n // The previous step's list is gone; hand the caret to the new one so Enter keeps working.\n nextTick(focusOptionList);\n});\n\nwatch(highlightedIndex, scrollHighlightIntoView);\n\nonMounted(() => {\n document.addEventListener('keydown', onKeydown);\n // The option list is the single tab stop for the roving highlight; take it on mount so the\n // first arrow press already belongs to the form.\n nextTick(focusOptionList);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('keydown', onKeydown);\n});\n</script>\n\n<template>\n <div\n ref=\"wizardRoot\"\n tabindex=\"-1\"\n :class=\"styles['ask-wizard']\"\n @mousemove=\"deactivateKeyboard\">\n <InWizardHeader\n :close-label=\"props.closeLabel\"\n :info-tooltip=\"props.infoTooltip\"\n :title=\"currentStep.question\"\n @close=\"emit('close')\" />\n <div :class=\"styles['ask-wizard__body']\">\n <InCardSelect\n v-if=\"currentStep.variant === 'card'\"\n :key=\"currentStep.id\"\n :model-value=\"cardModelValue\"\n :multiple=\"Boolean(currentStep.multiSelect)\"\n :options=\"currentStep.options\"\n @select=\"selectValue\"\n @toggle=\"toggleValue\" />\n <InMultiSelect\n v-else-if=\"currentStep.multiSelect\"\n :key=\"currentStep.id\"\n :allow-custom=\"Boolean(currentStep.allowCustom)\"\n :custom-highlighted=\"customHighlighted\"\n :custom-placeholder=\"props.customPlaceholder\"\n :custom-value=\"currentDraft.custom\"\n :highlighted-value=\"highlightedForSelect\"\n :input-id=\"listId\"\n :model-value=\"currentDraft.selected\"\n :options=\"currentStep.options\"\n @custom-focus=\"onCustomFocus\"\n @custom-input=\"onCustomInput\"\n @option-focus=\"onOptionFocus\"\n @toggle=\"toggleValue\" />\n <InSingleSelect\n v-else\n :key=\"currentStep.id\"\n :allow-custom=\"Boolean(currentStep.allowCustom)\"\n :custom-highlighted=\"customHighlighted\"\n :custom-placeholder=\"props.customPlaceholder\"\n :custom-value=\"currentDraft.custom\"\n :highlighted-value=\"highlightedForSelect\"\n :input-id=\"listId\"\n :model-value=\"currentSelectedSingle\"\n :options=\"currentStep.options\"\n @custom-focus=\"onCustomFocus\"\n @custom-input=\"onCustomInput\"\n @option-focus=\"onOptionFocus\"\n @select=\"selectValue\" />\n </div>\n <InWizardFooter\n :back-label=\"props.backLabel\"\n :can-continue=\"currentStepHasAnswer\"\n :can-go-back=\"stepIndex > 0\"\n :can-submit=\"currentStepHasAnswer\"\n :current-step=\"stepIndex\"\n :is-last-step=\"isLastStep\"\n :is-required=\"currentStepRequired\"\n :next-label=\"props.nextLabel\"\n :skip-label=\"props.skipLabel\"\n :submit-label=\"props.submitLabel\"\n :total-steps=\"steps.length\"\n @back=\"goBack\"\n @next=\"goNext\"\n @skip=\"onSkip\"\n @submit=\"onWizardSubmit\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed, watch } from 'vue';\nimport { InBasicTextInput } from '@/index';\nimport styles from './InSingleSelect.module.scss';\n\nexport interface PlanSelectOption {\n value: string;\n label: string;\n description?: string;\n imageUrl?: string;\n}\n\nexport interface InSingleSelectProps {\n options: PlanSelectOption[];\n modelValue?: string | null;\n allowCustom?: boolean;\n customValue?: string;\n customPlaceholder?: string;\n inputId?: string;\n highlightedValue?: string | null;\n customHighlighted?: boolean;\n}\n\nconst props = withDefaults(defineProps<InSingleSelectProps>(), {\n modelValue: null,\n allowCustom: false,\n customValue: '',\n customPlaceholder: 'Enter your answer…',\n inputId: 'in-single-select-custom',\n highlightedValue: null,\n customHighlighted: false,\n});\n\n// Roving focus: the listbox keeps the caret and points at the highlighted row, so the rows\n// themselves never need to be tab stops.\nconst activeDescendantId = computed<string | undefined>(() => {\n if (props.customHighlighted) {\n return props.inputId;\n }\n\n if (!props.highlightedValue) {\n return undefined;\n }\n\n return `${props.inputId}-option-${props.highlightedValue}`;\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | null];\n select: [value: string];\n 'update:customValue': [value: string];\n 'custom-input': [value: string];\n 'option-focus': [value: string];\n 'custom-focus': [];\n}>();\n\nconst selected = ref<string | null>(props.modelValue);\nconst customText = ref<string>(props.customValue);\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = value;\n }\n);\n\nwatch(\n () => props.customValue,\n value => {\n customText.value = value;\n }\n);\n\nconst customSelected = computed(\n () => selected.value === null && customText.value.trim().length > 0\n);\n\nfunction selectOption (value: string): void {\n selected.value = value;\n emit('update:modelValue', value);\n emit('select', value);\n}\n\nfunction onCustomInput (value: string | number): void {\n const text = String(value);\n\n customText.value = text;\n selected.value = null;\n emit('update:modelValue', null);\n emit('update:customValue', text);\n emit('custom-input', text);\n}\n</script>\n\n<template>\n <div :class=\"styles['single-select']\">\n <div\n role=\"listbox\"\n tabindex=\"0\"\n :aria-activedescendant=\"activeDescendantId\"\n :class=\"styles['single-select__options']\">\n <div\n v-for=\"option in options\"\n :id=\"`${inputId}-option-${option.value}`\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"selected === option.value\"\n :class=\"[\n styles['single-select__item'],\n {\n [styles['single-select__item--selected']]: selected === option.value,\n [styles['single-select__item--focused']]: option.value === highlightedValue,\n },\n ]\"\n @click=\"selectOption(option.value)\"\n @focusin=\"emit('option-focus', option.value)\">\n <span :class=\"styles['single-select__label']\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :class=\"styles['single-select__description']\">\n {{ option.description }}\n </span>\n </div>\n <div\n v-if=\"allowCustom\"\n :class=\"[\n styles['single-select__custom'],\n {\n [styles['single-select__custom--selected']]: customSelected,\n [styles['single-select__custom--focused']]: customHighlighted,\n },\n ]\"\n @focusin=\"emit('custom-focus')\">\n <!-- The value is a plain answer, and every consumer renders it as text (the Q&A\n bubble interpolates, the transcript is JSON), so Vue escapes it at render\n time. Escaping on `input` instead rewrites the field as you type - an\n apostrophe becomes `&#039;` in the box and in the answer that is sent. -->\n <InBasicTextInput\n :id=\"inputId\"\n theme=\"grey\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"customText\"\n :name=\"inputId\"\n :placeholder-text=\"customPlaceholder\"\n :prevent-xss=\"false\"\n @input=\"onCustomInput\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PlanSelectOption } from '../InSingleSelect/InSingleSelect.vue';\nimport { ref, computed, watch } from 'vue';\nimport { Icon, InBasicTextInput } from '@/index';\nimport styles from './InMultiSelect.module.scss';\n\nexport type { PlanSelectOption };\n\nexport interface InMultiSelectProps {\n options: PlanSelectOption[];\n modelValue?: string[];\n allowCustom?: boolean;\n customValue?: string;\n customPlaceholder?: string;\n inputId?: string;\n highlightedValue?: string | null;\n customHighlighted?: boolean;\n}\n\nconst props = withDefaults(defineProps<InMultiSelectProps>(), {\n modelValue: () => [],\n allowCustom: false,\n customValue: '',\n customPlaceholder: 'Enter your answer…',\n inputId: 'in-multi-select-custom',\n highlightedValue: null,\n customHighlighted: false,\n});\n\n// Roving focus: the listbox keeps the caret and points at the highlighted row, so the rows\n// themselves never need to be tab stops.\nconst activeDescendantId = computed<string | undefined>(() => {\n if (props.customHighlighted) {\n return props.inputId;\n }\n\n if (!props.highlightedValue) {\n return undefined;\n }\n\n return `${props.inputId}-option-${props.highlightedValue}`;\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n toggle: [value: string];\n 'update:customValue': [value: string];\n 'custom-input': [value: string];\n 'option-focus': [value: string];\n 'custom-focus': [];\n}>();\n\nconst selected = ref<string[]>([...props.modelValue]);\nconst customText = ref<string>(props.customValue);\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = [...value];\n }\n);\n\nwatch(\n () => props.customValue,\n value => {\n customText.value = value;\n }\n);\n\nconst customSelected = computed(() => customText.value.trim().length > 0);\n\nfunction isSelected (value: string): boolean {\n return selected.value.includes(value);\n}\n\nfunction toggleOption (value: string): void {\n const next = new Set(selected.value);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n selected.value = [...next];\n emit('update:modelValue', selected.value);\n emit('toggle', value);\n}\n\n// Keys are owned by the wizard card, which drives a roving highlight; rows are not tab stops\n// and carry no key handlers of their own.\nconst customRow = ref<HTMLElement | null>(null);\n\n// The whole row is the target — the box, the padding, the gap — not just the input's 24px line.\nfunction focusCustomInput (): void {\n customRow.value?.querySelector('input')?.focus();\n}\n\nfunction onCustomInput (value: string | number): void {\n const text = String(value);\n\n customText.value = text;\n emit('update:customValue', text);\n emit('custom-input', text);\n}\n</script>\n\n<template>\n <div :class=\"styles['multi-select']\">\n <div\n aria-multiselectable=\"true\"\n role=\"listbox\"\n tabindex=\"0\"\n :aria-activedescendant=\"activeDescendantId\"\n :class=\"styles['multi-select__options']\">\n <div\n v-for=\"option in options\"\n :id=\"`${inputId}-option-${option.value}`\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"isSelected(option.value)\"\n :class=\"[\n styles['multi-select__item'],\n {\n [styles['multi-select__item--selected']]: isSelected(option.value),\n [styles['multi-select__item--focused']]: option.value === highlightedValue,\n },\n ]\"\n @click=\"toggleOption(option.value)\"\n @focusin=\"emit('option-focus', option.value)\">\n <span\n :class=\"[\n styles['multi-select__box'],\n { [styles['multi-select__box--checked']]: isSelected(option.value) },\n ]\">\n <Icon\n v-if=\"isSelected(option.value)\"\n color=\"#ffffff\"\n name=\"line-check-natural\"\n :size=\"16\" />\n </span>\n <span :class=\"styles['multi-select__label']\">{{ option.label }}</span>\n </div>\n <div\n v-if=\"allowCustom\"\n ref=\"customRow\"\n :class=\"[\n styles['multi-select__custom'],\n {\n [styles['multi-select__custom--selected']]: customSelected,\n [styles['multi-select__custom--focused']]: customHighlighted,\n },\n ]\"\n @click=\"focusCustomInput\"\n @focusin=\"emit('custom-focus')\">\n <span\n :class=\"[\n styles['multi-select__box'],\n { [styles['multi-select__box--checked']]: customSelected },\n ]\">\n <Icon\n v-if=\"customSelected\"\n color=\"#ffffff\"\n name=\"line-check-natural\"\n :size=\"16\" />\n </span>\n <!-- The value is a plain answer, and every consumer renders it as text (the Q&A\n bubble interpolates, the transcript is JSON), so Vue escapes it at render\n time. Escaping on `input` instead rewrites the field as you type - an\n apostrophe becomes `&#039;` in the box and in the answer that is sent. -->\n <InBasicTextInput\n :id=\"inputId\"\n theme=\"grey\"\n :class=\"styles['multi-select__custom-input']\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"customText\"\n :name=\"inputId\"\n :placeholder-text=\"customPlaceholder\"\n :prevent-xss=\"false\"\n @input=\"onCustomInput\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PlanSelectOption } from '../InSingleSelect/InSingleSelect.vue';\nimport { ref, computed, watch } from 'vue';\nimport styles from './InCardSelect.module.scss';\n\nexport type { PlanSelectOption };\n\nexport type InCardSelectValue = string | string[] | null;\n\nexport interface InCardSelectProps {\n options: PlanSelectOption[];\n modelValue?: InCardSelectValue;\n multiple?: boolean;\n columns?: number;\n}\n\nconst props = withDefaults(defineProps<InCardSelectProps>(), {\n modelValue: null,\n multiple: false,\n columns: 2,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: InCardSelectValue];\n select: [value: string];\n toggle: [value: string];\n}>();\n\nfunction normalize (value: InCardSelectValue): string[] {\n if (value === null || value === undefined) {\n return [];\n }\n\n return Array.isArray(value) ? [...value] : [value];\n}\n\nconst selected = ref<string[]>(normalize(props.modelValue));\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = normalize(value);\n }\n);\n\nconst gridStyle = computed(() => ({\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n}));\n\nfunction isSelected (value: string): boolean {\n return selected.value.includes(value);\n}\n\nfunction onCardClick (value: string): void {\n if (props.multiple) {\n const next = new Set(selected.value);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n selected.value = [...next];\n emit('update:modelValue', selected.value);\n emit('toggle', value);\n\n return;\n }\n\n selected.value = [value];\n emit('update:modelValue', value);\n emit('select', value);\n}\n\nfunction placeholderInitial (option: PlanSelectOption): string {\n return (option.label || option.value).charAt(0).toUpperCase();\n}\n</script>\n\n<template>\n <div\n role=\"listbox\"\n :class=\"styles['card-select']\"\n :style=\"gridStyle\">\n <div\n v-for=\"option in options\"\n :key=\"option.value\"\n role=\"option\"\n tabindex=\"0\"\n :aria-selected=\"isSelected(option.value)\"\n :class=\"[\n styles['card-select__card'],\n { [styles['card-select__card--selected']]: isSelected(option.value) },\n ]\"\n @click=\"onCardClick(option.value)\"\n @keydown.enter.prevent=\"onCardClick(option.value)\"\n @keydown.space.prevent=\"onCardClick(option.value)\">\n <div :class=\"styles['card-select__thumb']\">\n <img\n v-if=\"option.imageUrl\"\n :alt=\"option.label\"\n :class=\"styles['card-select__image']\"\n :src=\"option.imageUrl\">\n <slot\n v-else\n name=\"thumb\"\n :option=\"option\">\n <span :class=\"styles['card-select__placeholder']\">\n {{ placeholderInitial(option) }}\n </span>\n </slot>\n </div>\n <span :class=\"styles['card-select__label']\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :class=\"styles['card-select__description']\">\n {{ option.description }}\n </span>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","onClick","event","leftIcon","computed","buttonClasses","classes","styles","customIconObjects","parseColorWithAlpha","color","hex8Match","hex","a","rgbaMatch","values","v","opacity","iconSize","isCustomIcon","customIconData","parsedColor","finalColor","finalOpacity","min","max","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","x","y","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","i","name","fn","nextX","nextY","data","reset","detectOverflow","state","options","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","b","_overflowsData$filter2","currentSideAxis","acc","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","arrow$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","target","toValue","source","unref","args","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","ref","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","open","position","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","isTooltipConfigInitialized","initializeTooltipConfig","status","preventXSS","VISIBILITY_DELAY","ARROW_SIZE","ARROW_EDGE_PADDING","OPPOSITE_SIDE_BY_SIDE","showTimeout","hideTimeout","isMounted","tooltipRef","triggerRef","floatingArrowRef","tooltipVisible","secureText","showTooltip","showDelay","scheduleHideTooltip","delay","onMouseEnter","onMouseLeave","onResize","onBeforeMount","onMounted","nextTick","onBeforeUnmount","tooltipShouldShow","tooltipStyles","staticPosition","arrowPlacementOverride","styleArrow","_a","_b","FORMAT_ORDER","FORMAT_SEPARATOR","SEGMENT_LENGTH","pad","buildDate","year","month","day","date","formatIn","format","byKey","key","parseIn","text","segs","index","startOfDay","inputText","minDate","maxDate","isInRange","time","minTime","maxTime","draftDate","canApply","seedInputFromModel","initialView","base","view","next","monthLabel","weekdayLabels","formatter","labels","dayIndex","days","leading","selectedTime","cells","goToPreviousMonth","goToNextMonth","selectDay","cell","maskDate","raw","order","sep","lengths","totalDigits","sum","typedParts","digits","segments","cursor","endsWithSep","out","onDateInput","onApply","onCancel","chipClasses","handleClick","handleRemove","checked","handleChange","newValue","previewClasses","inputValue","labelTextSecure","statesDefault","statesValidation","helperContainerStatus","isNumberType","deniedSymbols","denied","minValueNum","preventKeyPress","fixValue","safeData","createCommasAndDotsRegex","regexPattern","createNonNumberRegex","allowedChars","replaceNonNumbers","inputElement","selectionStart","regex","indexes","item","replaceExtraCommasAndDots","cursorPosition","characters","keyup","keypress","focus","blur","click","input","inputEvent","change","paste","clipboardData","currentLength","selectedLength","availableSpace","truncatedClipboardData","replaceAll","nonNumberRegex","cleanedValue","matches","match","leftIconClick","rightIconClick","textInput","componentRoot","focusToInput","hasTransparency","opacityMatch","hue","saturation","brightness","hexInput","savedColors","isUpdatingFromProp","colorPickerRef","hueSliderRef","opacitySliderRef","presetColorRows","colors","rows","colorsPerRow","firstRowSize","hueColor","h","r","g","currentColor","s","c","m","currentColorWithOpacity","rgb","updateHexInput","newColor","setNoColor","setColorFromHex","opacityHex","handleColorPickerMouseDown","e","updatePosition","handleMouseMove","handleMouseUp","handleHueSliderMouseDown","updateHue","handleOpacitySliderMouseDown","updateOpacity","handleHexInput","maxLength","hexString","handleHexPaste","pastedText","cleanHex","validateHexInput","expectedLength","hex6Result","hex8Result","rgbMatch","delta","hexWithoutHash","setOpacity","getCurrentColorWithOpacityHex","saveCurrentColor","colorWithOpacity","selectSavedColor","clickOutside","binding","excludeElements","useCapture","isFuzzyMatch","choiceValue","searchTerm","searchIndex","char","fuzzySearch","choices","normalizedSearchTerm","choice","aValue","bValue","vClickOutside","dropdownRef","menuRef","isOpen","selectedItem","searchQuery","errorMessage","menuPosition","filteredItems","reactive","allItems","calculateMenuPosition","viewportHeight","bottom","shouldOpenUp","toggleMenu","resetSettings","closeMenu","selectItem","addItem","query","error","newItem","onSearch","results","onFocusSearch","menuStyle","defaultItem","selectedValue","newItems","clickOutsideTarget","boxClass","isDark","borderColorClass","sizeClass","textColorClass","listRef","activeItemId","childSearchQuery","parentSearchQuery","itemEls","FALLBACK_SEARCH_INPUT_ID","parentSearchInputId","childSearchInputId","normalizedEntries","entry","flatItems","isGlobalSearchMode","hasActiveParentSearch","menuSizeStyle","style","listSizeStyle","activeItem","activeSubList","activeItemEl","showChildPanel","menuAnchorRef","menuFloatingStyles","isLeftPlacement","listPlacement","listFallback","listMiddleware","listFloatingStyles","childListItems","flatSections","collectFromItem","matched","section","flatSectionsEmpty","registerItemEl","id","handleItemHover","wasActive","handleItemClick","handleListItemClick","parentId","listItem","handleChildListItemClick","handleParentSearchUpdate","handleChildSearchUpdate","isInsideAnyLayer","anchor","handleDocumentPointerDown","handleWindowKeyDown","useUid","prefix","clearIconName","autoUid","fieldId","fieldName","inputRef","hasValue","rightIcon","onUpdate","onKeydown","onRightIconClick","native","__expose","variantClass","uid","showError","showPlaceholder","displayText","DEFAULT_GAP","SHIFT_PADDING","popoverRef","contentRef","anchorRef","resolveAnchor","triggerRoot","sizeStyle","toggle","close","handleToggle","selectTab","tab","newTabs","textareaStyle","textareaRef","computedValue","handleKeyup","handleKeypress","handleInput","handleCut","handlePaste","handleBlur","ACTIVE_ICON_NAME","DISABLE_ICON_NAME","iconName","onChange","handleLabelClick","handleInputChange","handleInputKeydown","debounce","wait","timer","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","_defineProperty","obj","_toPropertyKey","arg","_toPrimitive","hint","prim","res","dedent","createDedent","newOptions","strings","escapeSpecialCharacters","lines","mindent","l","indent","iframeContent","generateIframeContent","vsBaseUrl","vsPath","dd","registered","liquidMonarch","registerLanguage","monaco","registerCompletion","getVariables","model","lineText","word","range","variable","registerLiquid","findScrollableParent","isAtScrollEdge","deltaY","scrollTop","scrollHeight","visibleHeight","normalizeWheelDeltaY","deltaMode","resolveChainedScrollDelta","TOOLTIP_GAP","shouldReanchorTooltip","hoveredLine","anchoredLine","resolveTooltipTop","lineTop","lineHeight","tooltipHeight","below","validator","useValidators","params","editor","markersListener","removeWheelForwarding","iframe","blob","src","validators","validateCode","createEditorInstance","frame","contentDocument","contentWindow","container","forwardWheelAtEdge","scrollable","runValidation","errorStyle","gutterThemeCss","errorDecorations","markerModel","errorMarkers","marker","errorTooltip","tooltipLine","hideErrorTooltip","line","lineMarkers","grouped","separator","message","linePosition","containerRect","glyphLeft","placeholderEl","fontInfo","updatePlaceholder","onUnmounted","valid","Token","kind","begin","file","row","col","Drop","context","toString$1","toLowerCase","hasOwnProperty","isString","isFunction","isPromise","val","isIterator","stringify","isNil","isArray","toEnumerable","isIterable","isObject","toArray","toNumber","isNumber","toLiquid","isUndefined","isArrayLike","forOwn","iteratee","k","last","arr","type","stop","step","padStart","str","ch","padEnd","add","n","identify","changeCase","ellipsis","N","orderedCompare","caseInsensitiveCompare","argumentsToValue","argumentsToNumber","strictUniq","array","seen","TRAIT","LiquidError","err","token","mkContext","mkMessage","TokenizationError","ParseError","RenderError","tpl","LiquidErrors","errors","UndefinedVariableError","InternalUndefinedVariableError","variableName","AssertionError","lineNumber","rowIndicator","num","colIndicator","msg","TYPES","WORD","BLANK","QUOTE","INLINE_BLANK","NUMBER","SIGN","PUNCTUATION","isWord","code","assert","predicate","assertEmpty","NullDrop","EmptyDrop","BlankDrop","ForloopDrop","collection","SimpleEmitter","StreamedEmitter","KeepingTypeEmitter","BlockDrop","superBlockRender","emitter","isComparable","nil","literalValues","trieCache","createTrie","cached","trie","__assign","t","p","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","rejected","toLiquidAsync","asyncFn","syncFn","syncImpl","sync","toPromise","done","toValueSync","rFormat","daysInMonth","isLeapYear","getDayOfYear","getWeekOfYear","startDay","now","then","ordinal","century","padWidths","padSpaceChars","getTimezoneOffset","opts","nOffset","formatCodes","strftime","formatStr","memoryLimit","output","remaining","flagStr","modifier","conversion","convert","flags","flag","ret","padChar","padWidth","getDateTimeFormat","OneMinute","TIMEZONE_PATTERN","monthNames","monthNamesShort","dayNames","dayNamesShort","LiquidDate","init","locale","timezone","diff","dateString","sign","hours","minutes","timezoneName","localDateString","utcDateString","localDate","Limiter","resource","limit","count","DelimitedToken","contentBegin","contentEnd","trimLeft","trimRight","tl","tr","TagToken","trimTagLeft","trimTagRight","tagDelimiterLeft","tagDelimiterRight","valueBegin","valueEnd","TokenKind","Tokenizer","OutputToken","trimOutputLeft","trimOutputRight","outputDelimiterLeft","outputDelimiterRight","valueRange","HTMLToken","NumberToken","IdentifierToken","LiteralToken","operatorPrecedences","operatorTypes","OperatorToken","PropertyAccessToken","FilterToken","HashToken","rHex","rOct","escapeChar","hexVal","parseStringLiteral","j","QuotedToken","RangeToken","lhs","rhs","LiquidTagToken","FilteredValueToken","initial","filters","getPerformance","Render","templates","ctx","Expression","tokens","toPostfix","lenient","operands","isOperatorToken","evalToken","isPropertyAccessToken","evalPropertyAccessToken","isRangeToken","evalRangeToken","prop","evalQuotedToken","low","high","ops","isTruthy","isFalsy","defaultOperators","equals","arrayEquals","arrayIncludes","Node$1","prev","LRU","Node","domResolve","path","head","resolved","filepath","ext","origin","readFile","url","xhr","readFileSync","exists","existsSync","dirname","fs","defaultFilter","defaultValue","json","space","inspect","_key","to_integer","misc","escapeMap","unescapeMap","escape","xml_escape","unescape","escape_once","newline_to_br","strip_html","blocks","lt","opener","closer","htmlFilters","MapFS","mapping","content","dir","segment","defaultOptions","normalize","normalizeDirectoryList","getOutputEscapeFunction","nameOrFunction","whiteSpaceCtrl","inRaw","isDelimitedToken","isTagToken","greedy","isHTMLToken","mask","operators","operator","operand","info","filter","stopStrings","delimiter","respectQuoted","leftPos","pos","pred","jekyllStyle","hashes","hash","isBegin","decimalFound","digitFound","literal","escaped","htmlStopStrings","htmlStopStringSet","pattern","ParseStream","parseToken","cb","template","TemplateImpl","Tag","remainTokens","liquid","Hash","tokenizer","createTagClass","isKeyValuePair","Filter","argv","Value","impl","Output","outputEscape","HTML","Variable","location","segmentsString","_visit","VariableMap","defaultStaticAnalysisOptions","_analyze","partials","variables","globals","locals","rootScope","DummyScope","updateVariables","scope","aliased","visit","extractVariables","ident","partial","child","partialScopeNames","partialScope","alias","argument","analyze","analyzeSync","from","to","isValueToken","extractValueTokenVariables","extractFilteredValueVariables","extractPropertyAccessVariable","isQuotedToken","isNumberToken","isWordToken","RE_PROPERTY","bracketedRoot","buf","LookupType","Loader","_c","_d","prefixes","referencedFile","_referencedFile","currentFile","dirs","allowed","extname","roots","Parser","TagClass","isOutputToken","tpls","task","taskOrTpl","getKind","createScope","Context","env","renderOptions","renderLimit","_e","keyValues","paths","strictVariables","candidate","readJSProperty","readSize","readFirst","readLast","ownPropertyOnly","BlockMode","abs","at_least","at_most","ceil","divided_by","dividend","divisor","integerArithmetic","minus","plus","modulo","times","amp","scaled","mathFilters","url_decode","url_encode","cgi_escape","uri_escape","rSlugifyDefault","rSlugifyReplacers","slugify","mode","cased","replacer","removeAccents","urlFilters","join","complexity","last$1","first","reverse","sortBy","property","comparator","tuple","sort","sort_natural","map","compact","concat","push","unshift","clone","pop","slice","expectedMatcher","expected","include","matcher","_","filter_exp","itemName","exp","filtered","keyTemplate","where","where_exp","reject_exp","group_by","items","group_by_exp","search","search_exp","has","has_exp","find_index","find_index_exp","find","find_exp","uniq","sample","shuffled","arrayFilters","timezoneOffset","parseDate","date_to_xmlschema","date_to_rfc822","date_to_string","stringify_date","date_to_long_string","month_type","ml","defaultTimezoneOffset","dateFilters","rCJKWord","rNonCJKWord","append","prepend","lstrip","chars","set","downcase","upcase","remove","remove_first","remove_last","rstrip","split","strip","strip_newlines","capitalize","replace","replacement","parts","outputSize","replace_first","arg1","arg2","replace_last","truncate","o","truncatewords","words","normalize_whitespace","number_of_words","array_to_sentence_string","connector","stringFilters","base64Encode","base64Decode","base64_encode","base64_decode","base64Filters","bufferToHex","buffer","bytes","sha256","digest","hmacSha256","encoder","cryptoKey","signature","sha256$1","hmac_sha256","keyStr","cryptoFilters","AssignTag","MODIFIERS","ForTag","parser","inStr","stream","tag","continueKey","reversed","CaptureTag","tagToken","CaseTag","elseCount","branchHit","branch","valueToken","CommentTag","RenderTag","parseFilePath","keyword","beforeAs","asStr","renderFilePath","childCtx","names","optimize","IncludeTag","withVar","renderer","saved","DecrementTag","CycleTag","group","fingerprint","groups","idx","IfTag","IncrementTag","LayoutTag","parent","BlockTag","blockRender","self","renderChild","renderCurrent","superBlock","stack","RawTag","TablerowloopDrop","cols","TablerowTag","collectionToken","tablerowloop","UnlessTag","test","children","BreakTag","_emitter","ContinueTag","EchoTag","LiquidTag","InlineCommentTag","tags","Liquid","conf","handler","lookupType","renderFileOptions","plugin","firstCall","filePath","callback","filename","analysis","engine","collectGlobalRefs","refs","occurrences","atLocation","lineStartOffsets","starts","outputTokenRanges","getLiquidVariables","getLiquidOutputVariables","ranges","isVisible","submit","handleKeydown","applyMinMax","numericValue","sanitizedValue","oldValue","IconName","textRef","isMultiline","measure","selected","setSelect","newSegments","autoGrow","newHeight","VARIANT_ICONS","dismissTimer","clearDismissTimer","handleClose","scheduleDismiss","isExpanded","ariaLabel","prefersReducedMotion","IDLE_TIMEOUT_MS","ACTIVITY_EVENTS","rootRef","reduceMotion","isStatic","isHidden","isIdle","isPaused","blobs","rafId","idleTimer","lastActivityMs","parallaxOn","motionQuery","armIdleTimer","onActivity","measureBlobs","onMouseMove","localX","ny","tx","ty","enableParallax","disableParallax","onVisibilityChange","onMotionChange","onMinimize","onNewChat","onAcademy","REVEAL_GAP","RISE_BASE_DELAY","RISE_STEP","MOVE_DURATION","MOVE_EASING","riseDelay","scrollEl","inject","bottomInset","cardsRef","revealCards","cards","cardsBottom","visibleBottom","clipped","applyAnchor","scroller","grid","firstCard","rowHeight","cardsHeight","singleRowHeight","available","firstTop","animations","animation","onOpen","SWATCH_LIMIT","COMET_STOPS","SEGMENTS","CORNER_SEGMENTS","PERIOD_MS","STROKE_WIDTH","RING_RADIUS","GLOW_STD_DEVIATION","cometColor","f","buildGlowDefs","svgNs","filterId","defs","merge","glowNode","sourceNode","useGeneratingRing","containerRef","ringRef","active","glowFilterId","segmentMids","lineEls","startTs","observer","buildGeometry","ring","w","inset","rw","rh","straight","arc","total","pointAt","rem","th","mids","regions","targetLen","regionStart","region","d0","d1","p0","p1","paint","phase","red","green","blue","alpha","ts","on","MAX_TEXTAREA_HEIGHT","CHAR_NOTICE_OFFSET","ATTACH_LABEL","genRingRef","isFocused","charCount","isOverLimit","showCharNotice","noticeText","canSend","autoResize","textarea","handleSend","handleButtonClick","handleAttach","draft","trimmed","isDirty","isActive","BUBBLE_CLEARANCE_PX","pickTooltipPosition","rowTop","scrollerTop","useMessageTooltipPosition","scrollRef","tooltipPosition","formattedTime","copyIcon","onActionsEnter","tooltipPlacement","getCurrentInstance","escapeHtml","buildRenderer","marked","titleAttr","lang","deps","loading","depsLoaded","ensureDeps","markedModule","purifyModule","handleCodeCopyClick","button","INLINE_CODE_LINE","collectInlineCodeRun","run","codeCount","mergeInlineCodeRuns","indents","minIndent","useMarkdown","wrapped","slots","useSlots","formatMarkdown","hasDefaultSlot","renderedHtml","PHASE_INTERVAL","phases","phaseIndex","intervalId","stopCycling","startCycling","COPIED_TICK_DURATION","showTick","tickTimeout","startTick","isCopied","likeIcon","dislikeIcon","onCopy","SCROLL_THRESHOLD","composerHeight","userHasScrolledUp","composerResizeObserver","scrollResizeObserver","provide","updateComposerHeight","onScroll","messages","lastMessage","bandBottom","observeScrollBox","scrollBottom","getScrollElement","measureAtBottom","handleScroll","isAtBottom","scrollToBottom","force","behavior","boundScrollEl","sizeObserver","resizeFrame","observeSizeChanges","bindScrollListener","previous","added","infoLabel","NAVIGATION_TOOLTIP","CUSTOM_KEY","NAV_KEYS","fallbackStep","wizardRoot","listId","conversationRoot","stepIndex","highlightedIndex","keyboardActive","footerFocused","drafts","currentStep","isLastStep","currentDraft","currentAllowCustom","currentStepHasAnswer","currentSelectedSingle","currentStepRequired","canLeaveCurrentStep","navValues","option","highlightedValue","isHighlightVisible","customHighlighted","highlightedForSelect","cardModelValue","setDraft","selectValue","toggleValue","onCustomInput","onOptionFocus","onCustomFocus","customIndex","optionRows","focusCustomInput","focusOptionList","focusFooterPrimary","scrollHighlightIntoView","moveHighlight","deactivateKeyboard","syncHighlightToSelection","noOptions","goBack","goNext","finalize","answers","labelByValue","selectedLabels","customText","answer","onWizardSubmit","onSkip","isTextEntryTarget","pickHighlighted","highlighted","commitStep","handleEnter","ownsKeyEvent","leaveCustomInput","inTextField","stepsKey","activeDescendantId","customSelected","selectOption","isSelected","toggleOption","customRow","gridStyle","onCardClick","placeholderInitial"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8,37,45]}
1
+ {"version":3,"file":"index-DfIh4OFp.js","sources":["../src/components/Button/Button.vue","../src/components/Icon/customIcons.ts","../src/components/Icon/iconColorUtils.ts","../src/components/Icon/Icon.vue","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/components/Tooltip/wasTooltipShown.ts","../src/utils/preventXSS.ts","../src/components/Tooltip/Tooltip.vue","../src/components/Calendar/Calendar.vue","../src/components/Chip/Chip.vue","../src/components/Checkbox/Checkbox.vue","../src/components/ColorPreview/ColorPreview.vue","../src/components/InBasicTextInput/InBasicTextInput.vue","../src/components/ColorPicker/ColorSwatch.vue","../src/components/ColorPicker/ColorPicker.vue","../src/directives/clickOutside.ts","../src/utils/search.ts","../src/components/Dropdown/DropdownMenu.vue","../src/components/InBox/InBox.vue","../src/components/InInfoBox/InInfoBox.vue","../src/components/CascadingMenu/CascadingMenu.vue","../src/utils/uid.ts","../src/components/SearchInput/SearchInput.vue","../src/components/Typography/Typography.vue","../src/components/SelectField/SelectField.vue","../src/components/Popover/Popover.vue","../src/components/InDropdownMenu/InDropdownMenu.vue","../src/components/InTabs/InTabs.vue","../src/components/InTextArea/InTextArea.vue","../src/components/InRadioButton/InRadioButton.vue","../src/components/InToggle/InToggle.vue","../src/components/InputButton/InputButton.vue","../src/utils/debounce.ts","../node_modules/dedent/dist/dedent.mjs","../src/components/MonacoEditor/iframeContent.html?raw","../src/components/MonacoEditor/generateIframeContent.ts","../src/components/MonacoEditor/liquid/registerLiquid.ts","../src/components/MonacoEditor/scrollChaining.ts","../src/components/MonacoEditor/tooltipPosition.ts","../src/components/MonacoEditor/validators/useValidators.ts","../src/components/MonacoEditor/MonacoEditor.vue","../node_modules/liquidjs/dist/liquid.browser.mjs","../src/components/MonacoEditor/liquid/analyzeVariables.ts","../src/components/Modal/Modal.vue","../src/components/NumberInput/NumberInput.vue","../src/components/OnPageMessage/OnPageMessage.vue","../src/components/SegmentButton/SegmentButton.vue","../src/components/TextInput/TextInput.vue","../src/components/Toggle/Toggle.vue","../src/components/Toast/Toast.vue","../src/components/InAgentLauncher/InAgentLauncher.vue","../src/utils/prefersReducedMotion.ts","../src/components/InAgentBackground/InAgentBackground.vue","../src/components/InAgentPopup/InAgentPopup.vue","../src/components/InAgentWelcome/InAgentWelcome.vue","../src/components/InBlueprintCard/InBlueprintCard.vue","../src/components/InAgentFiles/InAgentFiles.vue","../src/components/InAgentInput/useGeneratingRing.ts","../src/components/InAgentInput/InAgentInput.vue","../src/components/InChatEditForm/InChatEditForm.vue","../src/composables/useMessageTooltipPosition.ts","../src/components/InChatBubble/InChatBubble.vue","../src/composables/useMarkdown.ts","../src/components/InAgentMessage/InAgentMessage.vue","../src/components/InChatLoading/InChatLoading.vue","../src/components/InChatMessageActions/InChatMessageActions.vue","../src/components/InAgentConversation/InAgentConversation.vue","../src/components/InAgentMessageList/InAgentMessageList.vue","../src/components/InWizardFooter/InWizardFooter.vue","../src/components/InWizardHeader/InWizardHeader.vue","../src/components/InAskUserWizard/InAskUserWizard.vue","../src/components/InSingleSelect/InSingleSelect.vue","../src/components/InMultiSelect/InMultiSelect.vue","../src/components/InCardSelect/InCardSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './Button.module.scss';\n\ninterface ButtonProps {\n variant: 'solid' | 'ghost' | 'text' | 'outline';\n color:\n | 'primary'\n | 'subtle-primary'\n | 'secondary'\n | 'neutral'\n | 'danger'\n | 'warning'\n | 'smart'\n | 'toolbar-primary'\n | 'toolbar-smart'\n | 'inverse';\n size?: 'default' | 'small';\n leftIconName?: AllIconNames;\n rightIconName?: AllIconNames;\n iconSize?: 16 | 24;\n iconColor?: string;\n // Per-icon override. When omitted, the right icon uses `iconColor`. Lets\n // consumers paint the left icon dynamically (e.g. a picker swatch) while\n // keeping the right chevron on a fixed canonical color.\n rightIconColor?: string;\n loadingStatus?: boolean;\n successStatus?: boolean;\n label?: string;\n disabled?: boolean;\n fill?: boolean;\n selected?: boolean;\n customClass?: string;\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n loadingStatus: false,\n successStatus: false,\n disabled: false,\n fill: false,\n iconSize: 16,\n size: 'default',\n selected: false,\n});\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst onClick = (event: MouseEvent) => {\n if (props.disabled) {\n return;\n }\n\n emit('click', event);\n};\n\nconst leftIcon = computed<AllIconNames | undefined>(() => {\n if (props.loadingStatus) {\n return 'loading-circle';\n } else if (props.successStatus) {\n return 'line-check-natural';\n }\n\n return props.leftIconName;\n});\n\nconst buttonClasses = computed(() => {\n const classes = [\n styles.button,\n styles[`button__${props.variant}`],\n styles[`button__${props.variant}-${props.color}`],\n styles[`button__size_${props.size}`],\n ];\n\n if (props.fill) {\n classes.push(styles.fill);\n }\n\n if (props.selected) {\n classes.push(styles['button--selected']);\n }\n\n if (props.customClass) {\n classes.push(props.customClass);\n }\n\n return classes;\n});\n</script>\n\n<template>\n <button\n :class=\"buttonClasses\"\n :disabled=\"props.disabled\"\n @click=\"onClick\">\n <Icon\n v-if=\"leftIcon\"\n :color=\"iconColor\"\n :name=\"leftIcon\"\n :size=\"iconSize\" />\n <span\n v-if=\"label\"\n :class=\"styles.button__label\">\n {{ label }}\n </span>\n <Icon\n v-if=\"rightIconName\"\n :color=\"rightIconColor ?? iconColor\"\n :name=\"rightIconName\"\n :size=\"iconSize\" />\n </button>\n</template>\n","export interface CustomIcon {\n viewBox: string;\n content: string;\n}\n\nexport const customIconObjects = {\n 'mixed-text-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\" fill=\"url(#pattern0_5043_65214)\"/>\n <path class=\"preserve-fill\" d=\"M11.9997 2C12.3784 2 12.7248 2.21401 12.8942 2.55273L18.8942 14.5527C19.1412 15.0467 18.9409 15.6475 18.447 15.8945C17.953 16.1414 17.3521 15.9412 17.1052 15.4473L15.3815 12H8.61785L6.89422 15.4473C6.6472 15.9412 6.04637 16.1415 5.55242 15.8945C5.05863 15.6475 4.85828 15.0466 5.10516 14.5527L11.1052 2.55273L11.1764 2.43164C11.3613 2.16374 11.6683 2.00009 11.9997 2ZM9.61785 10H14.3815L11.9997 5.23633L9.61785 10Z\" fill=\"#495366\"/>\n <defs>\n <pattern id=\"pattern0_5043_65214\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5043_65214\" transform=\"matrix(0.05 0 0 0.25 0 -0.25)\"/>\n </pattern>\n <image id=\"image0_5043_65214\" width=\"20\" height=\"6\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADOSURBVHgBrZFLagJBFEXP608K8zGdBGeBBJJpCIS4kEBmWVPWEAi4CRciTh04EBE/TdMqbZVX2qkg4oUzeXXrVnGfBSPQAt5FW3yIN/EMw9TozGL+eg364yd4/Nb8B/wr/A/gt8vFKOcr/aTdemGdGxGxLj+IpmiIlFoVhJDg/CVZfIclGUQyBJ35vTdz3Jjj+jbC3Qdc0yvwkIyTFHFmHRl4/HeTXVdMxFwUYk3dk54yq1hawXTjCdWVuis19HV+KdNkRRFKFrl86n63lC1PDzizA2gvbQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'mixed-fill-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" fill=\"url(#pattern0_5681_20639)\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5681_20639\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5681_20639\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5681_20639\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATmSURBVHgBTZYJct02EEQHC8mvb9mVVDlJVXKC3CD3v0oqXrQvfyMJYPIalFyWi4a4oKenpzGj8M/f7q25BQ+WrdkQol3Hap/5/Xd3+602++yr/dJm+2Rn25dX2/uNjfWb7dp/NpZ/Wb9YbneW/ADOah6KmYHJ/7kUN/0E7laPPHZbWrCZ11pXr7bwrPGv1pUvL9Z8AehkoR0sA5rbyaLuIcALsAQdzGOD9E8/4JvirS1a4cPCvbJrBFGAwGVeLLYLOGdLBjABFdRC7YzZ2oO8s84o0+Xx/rz1j1CpZ6R8AjfR3/e8BYFZdO/f61kTeAymEFGbkVjfAEB27ExcPTBX4sMQiyWYJ2kI+/z2e0/7PVWeeGexkRCGWDh7Q/KNYUaiMsAqRtXERjamVG3ifuSDtC7AqPhkUSMG4C5kgHUNAAxIOPBsgD2xskA37VNWMPa2D9FqaBs34oz8NsAq1Qo4gF1zveI7mSBSNgJ5HKnNaJ5ZCZgVfAClExbbnr7l9Vc2DUhCmlsx0VG2pdrhKEKRIICWZlpQH9YZM2DquCPQFWaYLGdw0DEImCA2aS1I9EcxH0kpbrUo5FqwcT2xosIC6Joo5MyGmrv+iAhrmA+DlZQsJ4IOCYnIc3CrO7JntYkaLH8WG6ZoMyCx8YCDtQB2PuLqK7Pjzm1/aLa7kOUKEQLIKSXpQmOAFZco1B3dd60H8Wnp2eT1L+sSKb2I7oHDlU/U4dRsvHZW2BxI61SsFU4pNbF4oU4na5mDlY4YgzUv3X2SJXLBlABREnm30w8Trki1Z98FtsiUzoCfITDP1uqMKw+46dE+pAcC3VmMDwC/sPnAbg4fQWLQ2djOS14/A8CNnNRa7xcWrij1guRLtXqh8Ng1rDMKvNjO7+yj3VKKrxC6IcA9wK+9baSydDOQaneeKGf/VLqHk3oNmc28CBRHPaMiSShba5gA+OQPOO0GN31lx3e23/LuAUvT5AD3ebG4oAJxfN3WbOhcW1XTAVQ2JLMdoNgpIMlIY1vswKtH7HjDy6/9ivE7+t4T4Bnm9KIZMtQtnCnwMfbOoH6aw6TCcQHoY0VjpKqOUgsv1VOPfPwC4K2N8Rt+p00TaLQ7SvfCNZsvMBfwsF2mdoNp/EyR83SGPEBDe+uSsGgrhWRTPHfdh/RI+yBA+mL7qAC3trNnmyi41TP10iGEb1KbkI3V7GK3bp7GV+qCWE1958I128CaccQOO472xPrIdW/7/N124YaLgGSV5BoVFhd6TL2jtt5toT9w+LB73ud7ILGghkY4I8vJBieIEyQekeWVxvdkU3jagsQnguIYKhPb1qbVnhLdwBkGft17tDWM0jikeT/c44wTLwWI8ZsAFyQ64RxOeXoBHJmQJBMsI5sKn/Ge2kvIMoROM+eGU9xS6P53MsgTAXYcmEK6hQCaTmIteUYYjqmwIkM4bNML8Gg6sTID7MPaD6fT4iPtvVG/qLlAf3I1RyZsvqJoM4UMUeYlbQZ2RrIoz+qEBI1D3snUKl6Q67ZJJrdo6Gi6uSbclPswW6vaxUThqcE17Gd/tlPUQF9/jEHNXo/qTaUfezXyPpl9m7VNPuzzjecCEh0oN023lLcDRXfNHwG+wLL6q21jZxuBYkmjYPj3vyf6Wni+eawpH5zE1AsbqaJCt20yqqWHRK9vH+x//WrzK98GywMAAAAASUVORK5CYII=\"/>\n </defs>`\n },\n 'mixed-border-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" fill=\"url(#pattern0_5699_20986)\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_20986\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_20986\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_20986\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATmSURBVHgBTZYJct02EEQHC8mvb9mVVDlJVXKC3CD3v0oqXrQvfyMJYPIalFyWi4a4oKenpzGj8M/f7q25BQ+WrdkQol3Hap/5/Xd3+602++yr/dJm+2Rn25dX2/uNjfWb7dp/NpZ/Wb9YbneW/ADOah6KmYHJ/7kUN/0E7laPPHZbWrCZ11pXr7bwrPGv1pUvL9Z8AehkoR0sA5rbyaLuIcALsAQdzGOD9E8/4JvirS1a4cPCvbJrBFGAwGVeLLYLOGdLBjABFdRC7YzZ2oO8s84o0+Xx/rz1j1CpZ6R8AjfR3/e8BYFZdO/f61kTeAymEFGbkVjfAEB27ExcPTBX4sMQiyWYJ2kI+/z2e0/7PVWeeGexkRCGWDh7Q/KNYUaiMsAqRtXERjamVG3ifuSDtC7AqPhkUSMG4C5kgHUNAAxIOPBsgD2xskA37VNWMPa2D9FqaBs34oz8NsAq1Qo4gF1zveI7mSBSNgJ5HKnNaJ5ZCZgVfAClExbbnr7l9Vc2DUhCmlsx0VG2pdrhKEKRIICWZlpQH9YZM2DquCPQFWaYLGdw0DEImCA2aS1I9EcxH0kpbrUo5FqwcT2xosIC6Joo5MyGmrv+iAhrmA+DlZQsJ4IOCYnIc3CrO7JntYkaLH8WG6ZoMyCx8YCDtQB2PuLqK7Pjzm1/aLa7kOUKEQLIKSXpQmOAFZco1B3dd60H8Wnp2eT1L+sSKb2I7oHDlU/U4dRsvHZW2BxI61SsFU4pNbF4oU4na5mDlY4YgzUv3X2SJXLBlABREnm30w8Trki1Z98FtsiUzoCfITDP1uqMKw+46dE+pAcC3VmMDwC/sPnAbg4fQWLQ2djOS14/A8CNnNRa7xcWrij1guRLtXqh8Ng1rDMKvNjO7+yj3VKKrxC6IcA9wK+9baSydDOQaneeKGf/VLqHk3oNmc28CBRHPaMiSShba5gA+OQPOO0GN31lx3e23/LuAUvT5AD3ebG4oAJxfN3WbOhcW1XTAVQ2JLMdoNgpIMlIY1vswKtH7HjDy6/9ivE7+t4T4Bnm9KIZMtQtnCnwMfbOoH6aw6TCcQHoY0VjpKqOUgsv1VOPfPwC4K2N8Rt+p00TaLQ7SvfCNZsvMBfwsF2mdoNp/EyR83SGPEBDe+uSsGgrhWRTPHfdh/RI+yBA+mL7qAC3trNnmyi41TP10iGEb1KbkI3V7GK3bp7GV+qCWE1958I128CaccQOO472xPrIdW/7/N124YaLgGSV5BoVFhd6TL2jtt5toT9w+LB73ud7ILGghkY4I8vJBieIEyQekeWVxvdkU3jagsQnguIYKhPb1qbVnhLdwBkGft17tDWM0jikeT/c44wTLwWI8ZsAFyQ64RxOeXoBHJmQJBMsI5sKn/Ge2kvIMoROM+eGU9xS6P53MsgTAXYcmEK6hQCaTmIteUYYjqmwIkM4bNML8Gg6sTID7MPaD6fT4iPtvVG/qLlAf3I1RyZsvqJoM4UMUeYlbQZ2RrIoz+qEBI1D3snUKl6Q67ZJJrdo6Gi6uSbclPswW6vaxUThqcE17Gd/tlPUQF9/jEHNXo/qTaUfezXyPpl9m7VNPuzzjecCEh0oN023lLcDRXfNHwG+wLL6q21jZxuBYkmjYPj3vyf6Wni+eawpH5zE1AsbqaJCt20yqqWHRK9vH+x//WrzK98GywMAAAAASUVORK5CYII=\"/>\n </defs>`\n },\n 'transparent-text-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\" fill=\"url(#pattern0_5699_16553)\"/>\n <path class=\"transparent-fill\" d=\"M20 18H4C2.9 18 2 18.9 2 20C2 21.1 2.9 22 4 22H20C21.1 22 22 21.1 22 20C22 18.9 21.1 18 20 18Z\"/>\n <path class=\"preserve-fill\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.9999 2C12.3787 2 12.725 2.21401 12.8945 2.55273L18.8945 14.5527C19.1414 15.0467 18.9412 15.6475 18.4472 15.8945C17.9532 16.1414 17.3523 15.9412 17.1054 15.4473L15.3818 12H8.61809L6.89446 15.4473C6.64743 15.9412 6.0466 16.1415 5.55266 15.8945C5.05887 15.6475 4.85852 15.0466 5.10539 14.5527L11.1054 2.55273L11.1767 2.43164C11.3616 2.16374 11.6686 2.00009 11.9999 2ZM9.61809 10H14.3818L11.9999 5.23633L9.61809 10Z\" fill=\"#495366\"/>\n <defs>\n <pattern id=\"pattern0_5699_16553\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_16553\" transform=\"scale(0.05 0.25)\"/>\n </pattern>\n <image id=\"image0_5699_16553\" width=\"20\" height=\"4\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAuSURBVHgBrY45EQAwDMPcXrCYPx6TyTMEQaxFp00vGzSSRiCJS3+YCdfZtv2wAIDSIZT/uGh0AAAAAElFTkSuQmCC\"/>\n </defs>`\n },\n 'transparent-fill-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" fill=\"url(#pattern0_5699_13077)\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19Z\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_13077\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_13077\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_13077\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAElSURBVHgB7ZWxioRAEER7jlHQwEAFDUz8/38yUVADDQwUVLjbGq6b9mDXY0HYwIJhe33i2GXZmu+H6Fdd19E0Ta72PI/KsmRETdPQPM+uDsOQiqIQVlUV7fvu6iiKKM9zYV90sS7fwLRtKxbBFiwWWwLBFta2bW79h1n2HIJ38JBPxDNh4ThfCBsPwyAsTVOy1roa19PscoustgTi9vCrGVKiW9dsXVdSYTwwc8f0TKaua7EoCAK3WOM4So3WOSmwQ6fvFbM66zqKeKCaxXF8iKlm8FzHVLPrY6rfQr47CK1qhv/PGGKKBaFzze6Ynso82hOLkiSRmMLLvu/lxCzLZAQsy3IYaK+Y1fMF0nPkGfs7kn3fl5hiA80+54Pz7sfojumpfgBl1ghs9EsbCQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'transparent-border-color-icon': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" fill=\"url(#pattern0_5699_9951)\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\"/>\n <path class=\"transparent-fill\" d=\"M19 2.5C20.3807 2.5 21.5 3.61929 21.5 5V19C21.5 20.3807 20.3807 21.5 19 21.5H5C3.61929 21.5 2.5 20.3807 2.5 19V5C2.5 3.61929 3.61929 2.5 5 2.5H19ZM8.11133 7.5C7.77382 7.5 7.5 7.77382 7.5 8.11133V15.8887C7.5 16.2262 7.77382 16.5 8.11133 16.5H15.8887C16.2262 16.5 16.5 16.2262 16.5 15.8887V8.11133C16.5 7.77382 16.2262 7.5 15.8887 7.5H8.11133Z\" stroke=\"#E1E1E1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <defs>\n <pattern id=\"pattern0_5699_9951\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_5699_9951\" transform=\"scale(0.0416667)\"/>\n </pattern>\n <image id=\"image0_5699_9951\" width=\"24\" height=\"24\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAElSURBVHgB7ZWxioRAEER7jlHQwEAFDUz8/38yUVADDQwUVLjbGq6b9mDXY0HYwIJhe33i2GXZmu+H6Fdd19E0Ta72PI/KsmRETdPQPM+uDsOQiqIQVlUV7fvu6iiKKM9zYV90sS7fwLRtKxbBFiwWWwLBFta2bW79h1n2HIJ38JBPxDNh4ThfCBsPwyAsTVOy1roa19PscoustgTi9vCrGVKiW9dsXVdSYTwwc8f0TKaua7EoCAK3WOM4So3WOSmwQ6fvFbM66zqKeKCaxXF8iKlm8FzHVLPrY6rfQr47CK1qhv/PGGKKBaFzze6Ynso82hOLkiSRmMLLvu/lxCzLZAQsy3IYaK+Y1fMF0nPkGfs7kn3fl5hiA80+54Pz7sfojumpfgBl1ghs9EsbCQAAAABJRU5ErkJggg==\"/>\n </defs>`\n },\n 'agent-academy': {\n viewBox: '0 0 24 24',\n content: `\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19 5.5C18.5044 5.30993 17.817 5.13516 17 5.05349V10.7911C17 10.9874 16.7468 11.0662 16.6354 10.9047L16.1646 10.2224C16.0851 10.1071 15.9149 10.1071 15.8354 10.2224L15.3646 10.9047C15.2532 11.0662 15 10.9874 15 10.7911V5.05647C14.3633 5.12082 13.6909 5.24941 13 5.46389V18.382C15.0945 17.7373 17.1532 17.938 18.6313 18.3789C18.7044 18.4007 18.8209 18.3913 18.9212 18.33C18.9658 18.3028 18.9876 18.2766 18.9957 18.2639C19.0008 18.2558 19 18.2542 19 18.2542L19 5.5ZM12.7529 20.6582C14.6013 19.7973 16.4998 19.9506 17.9144 20.3726C18.6289 20.5857 19.376 20.4463 19.9423 20.1007C20.5155 19.7509 21 19.123 21 18.3076V5.50125C21 4.79537 20.6068 4.04178 19.8083 3.71869C18.2206 3.07632 15.2836 2.52075 12.0001 3.64824C8.71652 2.52067 5.77936 3.0764 4.19169 3.71882C3.39319 4.04192 3 4.7955 3 5.50138V18.3076C3 19.123 3.48452 19.7509 4.0577 20.1007C4.62404 20.4463 5.37109 20.5857 6.08562 20.3726C7.50025 19.9506 9.3987 19.7973 11.2471 20.6582C11.4046 20.8381 11.6254 20.9611 11.8749 20.9922C11.8792 20.9948 11.8834 20.9974 11.8877 21L11.8915 20.9942C11.9271 20.998 11.9633 21 12 21C12.0367 21 12.0729 20.998 12.1085 20.9942L12.1123 21C12.1166 20.9974 12.1208 20.9948 12.1251 20.9922C12.3746 20.9611 12.5954 20.8381 12.7529 20.6582ZM11 18.382V5.46382C8.46891 4.67807 6.18578 5.04522 5 5.5L4.99997 18.2541C4.99997 18.2541 4.99919 18.2557 5.00431 18.2638C5.01237 18.2765 5.03417 18.3027 5.07875 18.3299C5.17909 18.3911 5.29561 18.4006 5.36867 18.3788C6.84682 17.9379 8.90552 17.7372 11 18.382Z\" fill=\"currentColor\"/>`\n },\n 'agent-brand': {\n viewBox: '0 0 24 24',\n content: `\n <path class=\"preserve-fill\" d=\"M13.5 2.5C14.0523 2.5 14.5 2.94772 14.5 3.5C14.5 4.05228 14.0523 4.5 13.5 4.5H11.5V12.5H19.5V10.4062C19.5 9.85397 19.9477 9.40625 20.5 9.40625C21.0523 9.40625 21.5 9.85397 21.5 10.4062V18.5C21.5 20.1569 20.1569 21.5 18.5 21.5H5.5C3.84315 21.5 2.5 20.1569 2.5 18.5V5.5C2.5 3.84315 3.84315 2.5 5.5 2.5H13.5ZM5.5 4.5C4.94772 4.5 4.5 4.94772 4.5 5.5V18.5C4.5 19.0523 4.94772 19.5 5.5 19.5H9.5V4.5H5.5ZM11.5 19.5H18.5C19.0523 19.5 19.5 19.0523 19.5 18.5V14.5H11.5V19.5ZM18.0947 2.81055C18.2061 2.39674 18.7939 2.39674 18.9053 2.81055L19.3271 4.37695C19.366 4.52129 19.4787 4.63399 19.623 4.67285L21.1895 5.09473C21.6033 5.20614 21.6033 5.79386 21.1895 5.90527L19.623 6.32715C19.4787 6.36601 19.366 6.47872 19.3271 6.62305L18.9053 8.18945C18.7939 8.60326 18.2061 8.60326 18.0947 8.18945L17.6729 6.62305C17.634 6.47871 17.5213 6.36601 17.377 6.32715L15.8105 5.90527C15.3967 5.79386 15.3967 5.20614 15.8105 5.09473L17.377 4.67285C17.5213 4.63399 17.634 4.52128 17.6729 4.37695L18.0947 2.81055Z\" fill=\"#5F24AF\"/>`\n },\n 'agent-analyzing': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M7.76327 12.2312C7.96953 12.2312 8.15439 12.3582 8.22909 12.5505L11.0123 19.7126C11.2658 20.3654 10.7839 21.0691 10.0836 21.0691C9.6684 21.0689 9.29662 20.8114 9.15097 20.4226L8.76425 19.3903H5.27499L4.88827 20.4226C4.74261 20.8114 4.37087 21.069 3.95566 21.0691C3.25531 21.0691 2.77348 20.3654 3.02695 19.7126L5.81015 12.5505C5.88484 12.3583 6.06974 12.2312 6.27597 12.2312H7.76327ZM13.6861 12.2312C14.2474 12.2312 14.7027 12.6865 14.7027 13.2478V20.0525C14.7027 20.6137 14.2474 21.069 13.6861 21.0691C13.1248 21.0691 12.6695 20.6138 12.6695 20.0525V13.2478C12.6695 12.6865 13.1248 12.2312 13.6861 12.2312ZM5.94589 17.5974H8.09335L7.01913 14.7263L5.94589 17.5974ZM17.6266 13.2497C17.7407 12.8257 18.3425 12.8257 18.4566 13.2497L18.6607 14.0085C18.7006 14.1564 18.8165 14.2724 18.9644 14.3122L19.7242 14.5163C20.1477 14.6307 20.1477 15.232 19.7242 15.3464L18.9644 15.5505C18.8165 15.5903 18.7006 15.7063 18.6607 15.8542L18.4566 16.613C18.3425 17.037 17.7407 17.037 17.6266 16.613L17.4225 15.8542C17.3826 15.7063 17.2666 15.5903 17.1187 15.5505L16.36 15.3464C15.9359 15.2322 15.9359 14.6305 16.36 14.5163L17.1187 14.3122C17.2666 14.2724 17.3826 14.1564 17.4225 14.0085L17.6266 13.2497ZM16.5016 3.34542C16.6501 2.79371 17.4331 2.79371 17.5816 3.34542L18.1441 5.43429C18.1959 5.62667 18.3463 5.77697 18.5387 5.82882L20.6275 6.39132C21.1792 6.53986 21.1792 7.32285 20.6275 7.4714L18.5387 8.0339C18.3463 8.08573 18.1959 8.23603 18.1441 8.42843L17.5816 10.5173C17.4331 11.069 16.6501 11.069 16.5016 10.5173L15.9391 8.42843C15.8872 8.23602 15.7369 8.0857 15.5445 8.0339L13.4557 7.4714C12.904 7.32285 12.904 6.53986 13.4557 6.39132L15.5445 5.82882C15.737 5.77701 15.8872 5.62672 15.9391 5.43429L16.5016 3.34542ZM8.62655 4.24972C8.74073 3.82567 9.34246 3.82567 9.45663 4.24972L9.66073 5.00851C9.70056 5.15641 9.81654 5.27239 9.96445 5.31222L10.7242 5.51632C11.1477 5.63073 11.1477 6.23196 10.7242 6.3464L9.96445 6.5505C9.81654 6.59032 9.70056 6.70631 9.66073 6.85421L9.45663 7.613C9.34246 8.03704 8.74073 8.03704 8.62655 7.613L8.42245 6.85421C8.38263 6.70631 8.26664 6.59032 8.11874 6.5505L7.35995 6.3464C6.93591 6.23222 6.93591 5.63049 7.35995 5.51632L8.11874 5.31222C8.26664 5.27239 8.38263 5.15641 8.42245 5.00851L8.62655 4.24972Z\" fill=\"url(#paint0_linear_4912_11532)\"/>\n <defs>\n <linearGradient id=\"paint0_linear_4912_11532\" x1=\"11.9999\" y1=\"2.93164\" x2=\"11.9999\" y2=\"21.0691\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FA3A3A\"/>\n <stop offset=\"1\" stop-color=\"#7630D4\"/>\n </linearGradient>\n </defs>`\n },\n 'agent-close': {\n viewBox: '0 0 24 24',\n content: `\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.2961 5.29222C17.6861 4.90275 18.3185 4.90244 18.7082 5.29222C19.098 5.68201 19.0977 6.31435 18.7082 6.70433L13.4123 12.0002L18.7082 17.2961C19.0977 17.6861 19.098 18.3185 18.7082 18.7082C18.3185 19.098 17.6861 19.0977 17.2961 18.7082L12.0002 13.4123L6.70433 18.7082C6.31435 19.0977 5.68201 19.098 5.29222 18.7082C4.90244 18.3185 4.90275 17.6861 5.29222 17.2961L10.5881 12.0002L5.29222 6.70433C4.90275 6.31435 4.90244 5.68201 5.29222 5.29222C5.68201 4.90244 6.31435 4.90275 6.70433 5.29222L12.0002 10.5881L17.2961 5.29222Z\" fill=\"currentColor\"/>`\n },\n 'agent-info': {\n viewBox: '0 0 24 24',\n content: `\n <path d=\"M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3ZM12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5ZM12 11C12.5523 11 13 11.4477 13 12V16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16V12C11 11.4477 11.4477 11 12 11ZM12 7C12.5523 7 13 7.44772 13 8C13 8.55228 12.5523 9 12 9C11.4477 9 11 8.55228 11 8C11 7.44772 11.4477 7 12 7Z\" fill=\"currentColor\"/>`\n },\n 'agent-launcher-badge': {\n viewBox: '12 8 48 48',\n content: `\n <rect x=\"12\" y=\"8\" width=\"48\" height=\"48\" fill=\"#D3B6FD\"/> <g id=\"Vector 5\" opacity=\"0.8\" filter=\"url(#filter1_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M85.3861 48.5961C96.7211 67.7724 118.282 60.7462 127.645 54.836L152.479 23.1593L24.297 -90.0577C12.8025 -75.318 -10.1532 -44.63 -10.0206 -39.7955C-9.85477 -33.7524 -8.45126 -24.2254 1.79004 -1.25409C9.98308 17.1229 35.5667 23.1947 47.3344 23.9334C55.2954 24.1642 74.051 29.4198 85.3861 48.5961Z\" fill=\"#CB2867\"/> </g> <g id=\"Vector 6\" opacity=\"0.8\" filter=\"url(#filter2_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M21.8449 13.124C21.2183 -9.14301 -1.0473 -13.4408 -12.1018 -12.8063L-49.172 2.87526L8.11935 164.016C25.3154 156.689 60.264 140.963 62.4899 136.669C65.2723 131.302 68.6597 122.288 70.8283 97.2309C72.5631 77.1852 53.1231 59.4799 43.1863 53.133C36.3336 49.0746 22.4715 35.3911 21.8449 13.124Z\" fill=\"#4B1291\"/> </g> <g id=\"Vector 7\" opacity=\"0.8\" filter=\"url(#filter3_f_agent_launcher)\"> <path class=\"preserve-fill\" d=\"M-35.1505 103.559C-56.7539 108.991 -56.1297 131.659 -53.1171 142.314L-29.7824 175.11L115.135 84.2935C104.259 69.0912 81.34 38.3758 76.6663 37.1322C70.8243 35.5776 61.2903 34.2221 36.3579 37.5293C16.412 40.1751 3.33497 62.987 -0.710289 74.0622C-3.18896 81.631 -13.5471 98.1266 -35.1505 103.559Z\" fill=\"#38036D\"/> <defs> <filter id=\"filter1_f_agent_launcher\" x=\"-40.021\" y=\"-120.058\" width=\"222.5\" height=\"211.183\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> <filter id=\"filter2_f_agent_launcher\" x=\"-79.1719\" y=\"-42.8645\" width=\"180.109\" height=\"236.88\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> <filter id=\"filter3_f_agent_launcher\" x=\"-84.6519\" y=\"5.49047\" width=\"229.787\" height=\"199.62\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"> <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/> <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/> <feGaussianBlur stdDeviation=\"15\" result=\"effect1_foregroundBlur_agent_launcher\"/> </filter> </defs>`\n },\n 'agent-launcher-glyph': {\n viewBox: '0 0 28 28',\n content: `\n <path d=\"M20.5161 15.538C20.6493 15.0433 21.3506 15.0433 21.4838 15.538L21.7221 16.4238C21.7686 16.5963 21.9041 16.7308 22.0766 16.7773L22.9623 17.0156C23.4569 17.1489 23.4568 17.851 22.9623 17.9843L22.0766 18.2226C21.9041 18.269 21.7686 18.4037 21.7221 18.5761L21.4838 19.4619C21.3506 19.9566 20.6493 19.9566 20.5161 19.4619L20.2768 18.5761C20.2302 18.4038 20.0957 18.269 19.9233 18.2226L19.0375 17.9843C18.5428 17.8511 18.5428 17.1488 19.0375 17.0156L19.9233 16.7773C20.0957 16.7309 20.2303 16.5962 20.2768 16.4238L20.5161 15.538ZM19.2036 3.98237C19.3771 3.33926 20.2899 3.33916 20.4633 3.98237L21.1196 6.41987C21.18 6.64436 21.355 6.82035 21.5795 6.88081L24.017 7.53706C24.6607 7.71038 24.6607 8.62352 24.017 8.79682L21.5795 9.45307C21.3552 9.51354 21.1801 9.68868 21.1196 9.91303L20.4633 12.3505C20.29 12.9942 19.3769 12.9942 19.2036 12.3505L18.5473 9.91303C18.4868 9.68856 18.3109 9.51351 18.0864 9.45307L15.6489 8.79682C15.0056 8.62337 15.0057 7.71061 15.6489 7.53706L18.0864 6.88081C18.3109 6.82036 18.4869 6.64437 18.5473 6.41987L19.2036 3.98237ZM10.0161 5.03803C10.1493 4.54332 10.8506 4.54332 10.9838 5.03803L11.2221 5.92378C11.2686 6.09628 11.4041 6.23084 11.5766 6.27729L12.4623 6.51557C12.9569 6.64885 12.9568 7.35102 12.4623 7.48432L11.5766 7.7226C11.4041 7.76904 11.2686 7.90368 11.2221 8.07612L10.9838 8.96186C10.8506 9.45658 10.1493 9.45658 10.0161 8.96186L9.7768 8.07612C9.73023 7.90377 9.59569 7.76903 9.42328 7.7226L8.53754 7.48432C8.04282 7.35112 8.04282 6.64877 8.53754 6.51557L9.42328 6.27729C9.59574 6.23086 9.73027 6.09619 9.7768 5.92378L10.0161 5.03803Z\" fill=\"white\"/>\n <path d=\"M7.92788 14.3501C8.51431 14.3502 9.03935 14.7135 9.24624 15.2622L12.2238 23.1646C12.4661 23.8077 11.9901 24.4946 11.3029 24.4946C10.8798 24.4945 10.5042 24.2241 10.3703 23.8228L9.86343 22.3032H5.99819L5.41323 23.856C5.26818 24.2404 4.90025 24.4944 4.4894 24.4946C3.79582 24.4946 3.31803 23.799 3.56753 23.1519L6.61245 15.2524C6.82207 14.7087 7.34516 14.3501 7.92788 14.3501ZM14.466 14.3501C15.0263 14.3501 15.4806 14.8045 15.4806 15.3647V23.481C15.4804 24.0411 15.0261 24.4946 14.466 24.4946C13.906 24.4944 13.4525 24.0409 13.4523 23.481V15.3647C13.4523 14.8046 13.9058 14.3503 14.466 14.3501ZM6.63393 20.4448H9.22866L7.93569 16.9897L6.63393 20.4448Z\" fill=\"white\"/>`\n },\n} as const satisfies Record<string, CustomIcon>;\n\nexport type CustomIconNames = keyof typeof customIconObjects;\n\n","/**\n * Parses color string to extract color and opacity values\n * Supports:\n * - 8-digit hex format: #RRGGBBAA (e.g., #6b93bb55)\n * - rgba format: rgba(r, g, b, a) (e.g., rgba(107, 147, 187, 0.33))\n * - Standard formats: #RRGGBB, rgb(r, g, b), etc.\n */\nexport interface ParsedColor {\n color: string;\n opacity ? : number;\n}\n\nexport function parseColorWithAlpha(color ? : string): ParsedColor {\n if (!color) return {\n color: \"currentColor\"\n };\n\n // Check for 8-digit hex format (#RRGGBBAA)\n const hex8Match = color.match(/^#([0-9a-fA-F]{8})$/);\n if (hex8Match) {\n const hex = hex8Match[1];\n const a = parseInt(hex.substring(6, 8), 16) / 255;\n\n return {\n color: `#${hex.substring(0, 6)}`,\n opacity: a,\n };\n }\n\n // Check for rgba format\n const rgbaMatch = color.match(/^rgba?\\(([^)]+)\\)$/);\n\n if (rgbaMatch) {\n const values = rgbaMatch[1].split(\",\").map((v) => v.trim());\n\n if (values.length === 4) {\n // rgba format\n const opacity = parseFloat(values[3]);\n return {\n color: `rgb(${values[0]}, ${values[1]}, ${values[2]})`,\n opacity: opacity,\n };\n } else if (values.length === 3) {\n // rgb format (no alpha)\n return {\n color: color,\n };\n }\n }\n\n // No alpha detected, return as is\n return {\n color\n };\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { customIconObjects, type CustomIconNames } from './customIcons';\nimport { parseColorWithAlpha } from './iconColorUtils';\n\nexport type AllIconNames = IconNames | CustomIconNames;\n\nexport interface IconProps {\n name: AllIconNames;\n size?: number | string;\n color?: string;\n fillOpacity?: number | string;\n}\n\nconst props = withDefaults(defineProps<IconProps>(), {\n size: 16,\n});\n\nconst iconSize = computed(() => (typeof props.size === 'number' ? `${props.size}px` : props.size));\nconst isCustomIcon = computed(() => props.name in customIconObjects);\n\nconst customIconData = computed(() => {\n if (!isCustomIcon.value) {\n return null;\n }\n\n return customIconObjects[props.name as CustomIconNames];\n});\n\n// Parse color - extract color from 8-digit hex or rgba for all icons\nconst parsedColor = computed(() => parseColorWithAlpha(props.color));\nconst finalColor = computed(() => parsedColor.value.color || 'currentColor');\n\nconst finalOpacity = computed(() => {\n if (!isCustomIcon.value) {\n return undefined;\n }\n\n if (props.fillOpacity !== undefined) {\n return typeof props.fillOpacity === 'number' ? props.fillOpacity : parseFloat(props.fillOpacity);\n }\n\n return parsedColor.value.opacity;\n});\n</script>\n\n<template>\n <svg\n v-if=\"!isCustomIcon\"\n class=\"icon\"\n :fill=\"finalColor\"\n :height=\"iconSize\"\n :style=\"{ color: finalColor }\"\n :width=\"iconSize\">\n <use :xlink:href=\"`#${name}`\" />\n </svg>\n <svg\n v-else\n class=\"icon icon-custom\"\n :fill=\"color || 'currentColor'\"\n :height=\"iconSize\"\n :style=\"{\n '--icon-color': finalColor,\n ...finalOpacity !== undefined && finalOpacity !== null ? { '--icon-fill-opacity': String(finalOpacity) } : {},\n }\"\n :viewBox=\"customIconData?.viewBox\"\n :width=\"iconSize\"\n v-html=\"customIconData?.content\" />\n</template>\n\n<style scoped>\n.icon {\n display: inline-block;\n line-height: 0;\n vertical-align: middle;\n}\n\n.icon-custom :deep(path:not([fill^=\"url(\"]):not([fill=\"none\"]):not(.transparent-fill):not(.preserve-fill)) {\n fill: var(--icon-color, currentColor);\n}\n\n.icon-custom :deep(path.transparent-fill) {\n fill: var(--icon-color, #6259D7);\n fill-opacity: var(--icon-fill-opacity);\n}\n</style>\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n const open = openOption.value;\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n /**\n * The floating element's position may be recomputed while it's closed\n * but still mounted (such as when transitioning out). To ensure\n * `isPositioned` will be `false` initially on the next open, avoid\n * setting it to `true` when `open === false` (must be specified).\n */\n isPositioned.value = open !== false;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","let isTooltipConfigInitialized = false;\n\nexport const initializeTooltipConfig = () => {\n if (isTooltipConfigInitialized) {\n return;\n }\n\n isTooltipConfigInitialized = true;\n let status: boolean;\n\n Object.defineProperty(window, 'wasTooltipShown', {\n get() {\n clearTimeout(window.wasTooltipTimeout);\n\n window.wasTooltipTimeout = setTimeout(() => {\n status = false;\n }, 2000);\n\n return status;\n },\n set(value: boolean) {\n status = value;\n\n clearTimeout(window.wasTooltipTimeout);\n\n if (value) {\n window.wasTooltipTimeout = setTimeout(() => {\n status = false;\n }, 2000);\n }\n\n },\n configurable: true,\n });\n};\n","export function preventXSS (html = '') {\n if (typeof(html) === 'string') {\n return html.replace(/<\\/style>/gi, '')\n .replace(/<(.*?) on(.*?)=['\"](.*?)>/gi, '')\n .replace(/(<meta |<style|<\\/*script)(.*?)>/gi, '')\n .replace(/(<([^>]+)>)/ig, '')\n .replace(/<(.*?) (href|src)=\"j(.*)a(.*)v(.*)a(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*):(.*?)>/gi, '');\n }\n return html;\n}\n","<script setup lang=\"ts\">\nimport {\n useFloating,\n offset,\n arrow,\n flip,\n autoUpdate,\n shift,\n type Placement,\n} from '@floating-ui/vue';\nimport {\n computed,\n ref,\n watch,\n onMounted,\n onBeforeUnmount,\n nextTick,\n onBeforeMount,\n} from 'vue';\nimport { initializeTooltipConfig } from '@/components/Tooltip/wasTooltipShown';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { preventXSS } from '@/utils/preventXSS';\nimport styles from './Tooltip.module.scss';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst VISIBILITY_DELAY = 1000;\n// Matches .arrow width/height in Tooltip.module.scss\nconst ARROW_SIZE = 20;\nconst ARROW_EDGE_PADDING = 8;\nconst OPPOSITE_SIDE_BY_SIDE: Record<string, string> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\nconst showTimeout = ref<ReturnType<typeof setTimeout> | null>(null);\nconst hideTimeout = ref<ReturnType<typeof setTimeout> | null>(null);\nconst isMounted = ref(false);\n\nif (typeof window !== 'undefined' && window.wasTooltipShown === undefined) {\n window.wasTooltipShown = false;\n}\n\ntype ArrowPlacement = 'start' | 'center' | 'end';\n\nconst props = withDefaults(defineProps<{\n id: string;\n text?: string;\n placement?: Placement;\n arrowPlacement?: ArrowPlacement;\n status?: boolean;\n preventXss?: boolean;\n iconName?: IconNames;\n hideDelay?: number;\n showDelay?: number;\n}>(), {\n text: '',\n});\n\nconst tooltipRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLElement | null>(null);\nconst floatingArrowRef = ref<HTMLElement | null>(null);\nconst tooltipVisible = ref(false);\nconst secureText = computed(() => (props.preventXss ? preventXSS(props.text) : props.text));\n\nconst { floatingStyles, update, middlewareData, placement } = useFloating(triggerRef, tooltipRef, {\n placement: computed(() => props.placement || 'bottom'),\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(10),\n flip(),\n shift(),\n arrow({ element: floatingArrowRef, padding: ARROW_EDGE_PADDING }),\n ],\n});\n\nconst showTooltip = () => {\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n const showDelay = props.showDelay ?? VISIBILITY_DELAY;\n\n if (window.wasTooltipShown || showDelay <= 0) {\n tooltipVisible.value = true;\n } else {\n showTimeout.value = setTimeout(() => {\n if (!isMounted.value) {\n showTimeout.value = null;\n\n return;\n }\n\n tooltipVisible.value = true;\n window.wasTooltipShown = true;\n showTimeout.value = null;\n }, showDelay);\n }\n};\n\nconst scheduleHideTooltip = () => {\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n const delay = props.hideDelay ?? 0;\n\n if (delay > 0) {\n hideTimeout.value = setTimeout(() => {\n if (isMounted.value) {\n tooltipVisible.value = false;\n }\n\n hideTimeout.value = null;\n }, delay);\n } else {\n tooltipVisible.value = false;\n }\n};\n\nconst onMouseEnter = () => {\n showTooltip();\n};\n\nconst onMouseLeave = () => {\n scheduleHideTooltip();\n};\n\nconst onResize = () => {\n if (isMounted.value && triggerRef.value && tooltipRef.value) {\n update();\n }\n};\n\nwatch(() => props.placement, () => {\n if (isMounted.value && triggerRef.value && tooltipRef.value) {\n update();\n }\n});\n\nonBeforeMount(initializeTooltipConfig);\n\nonMounted(() => {\n isMounted.value = true;\n\n nextTick(() => {\n if (isMounted.value && triggerRef.value) {\n update();\n }\n });\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', onResize);\n }\n});\n\nonBeforeUnmount(() => {\n isMounted.value = false;\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', onResize);\n }\n\n if (showTimeout.value) {\n clearTimeout(showTimeout.value);\n\n showTimeout.value = null;\n }\n\n if (hideTimeout.value) {\n clearTimeout(hideTimeout.value);\n\n hideTimeout.value = null;\n }\n\n tooltipVisible.value = false;\n tooltipRef.value = null;\n triggerRef.value = null;\n floatingArrowRef.value = null;\n});\n\nconst tooltipShouldShow = computed(() => props.status || tooltipVisible.value);\n\nconst tooltipStyles = computed(() => ({\n ...floatingStyles.value,\n display: tooltipShouldShow.value ? 'inline-block' : 'none',\n}));\n\nconst staticPosition = computed(() => {\n const [side] = placement.value.split('-');\n\n return {\n [OPPOSITE_SIDE_BY_SIDE[side]]: '-4px',\n };\n});\n\nconst arrowPlacementOverride = computed(() => {\n if (!props.arrowPlacement) {\n return {};\n }\n\n const [side] = placement.value.split('-');\n const axis = side === 'top' || side === 'bottom' ? 'left' : 'top';\n\n switch (props.arrowPlacement) {\n case 'start':\n return { [axis]: `${ARROW_EDGE_PADDING}px` };\n case 'center':\n return { [axis]: `calc(50% - ${ARROW_SIZE / 2}px)` };\n case 'end':\n return { [axis]: `calc(100% - ${ARROW_SIZE + ARROW_EDGE_PADDING}px)` };\n\n default:\n return {};\n }\n});\n\nconst styleArrow = computed(() => {\n if (!floatingArrowRef.value) {\n return {};\n }\n\n return {\n left:\n middlewareData.value.arrow?.x != null\n ? `${middlewareData.value.arrow.x}px`\n : '',\n top:\n middlewareData.value.arrow?.y != null\n ? `${middlewareData.value.arrow.y}px`\n : '',\n right: '',\n bottom: '',\n ...staticPosition.value,\n ...arrowPlacementOverride.value,\n };\n});\n</script>\n\n<template>\n <div\n :id=\"id\"\n ref=\"triggerRef\"\n :class=\"styles.trigger\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <Icon\n v-if=\"iconName\"\n :color=\"styles.trigger__icon\"\n :name=\"iconName\" />\n <slot v-else />\n </div>\n <Teleport to=\"body\">\n <div\n ref=\"tooltipRef\"\n class=\"qa-tooltip\"\n :class=\"styles.bubble\"\n :style=\"tooltipStyles\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <slot\n v-if=\"$slots.contentSlot\"\n name=\"contentSlot\" />\n <div\n v-else\n :class=\"styles.bubble__content\">\n <div v-html=\"secureText\" />\n </div>\n <div\n v-if=\"!$slots.contentSlot\"\n ref=\"floatingArrowRef\"\n :class=\"styles.arrow\"\n :style=\"styleArrow\" />\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport Button from '@/components/Button/Button.vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport Tooltip from '@/components/Tooltip/Tooltip.vue';\n\nexport type CalendarDateFormat = 'YYYY-MM-DD' | 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'DD.MM.YYYY';\n\nexport interface CalendarProps {\n /** Selected date, in `format` (default ISO `YYYY-MM-DD`). */\n modelValue?: string;\n /** Earliest selectable date, in `format`. Days before this are disabled. */\n min?: string;\n /** Latest selectable date, in `format`. Days after this are disabled. */\n max?: string;\n /** Date format for the value (modelValue/min/max/emit) and the input. Default ISO. */\n format?: CalendarDateFormat;\n /** Tooltip shown when hovering a disabled (out-of-range) day. */\n disabledDateTooltip?: string;\n /** 0 = Sunday, 1 = Monday (default). */\n firstDayOfWeek?: 0 | 1;\n /** BCP-47 locale for month/weekday labels. */\n locale?: string;\n /** Placeholder for the date input when nothing is picked. */\n placeholder?: string;\n /** Footer confirm-button label (consumer passes a translated string). */\n applyLabel?: string;\n /** Footer cancel-button label (consumer passes a translated string). */\n cancelLabel?: string;\n /** Card width in px (default 252). Lets the consumer size the picker. */\n width?: number;\n /** Accessible name for the date input. Falls back to `placeholder`. */\n inputAriaLabel?: string;\n /** Accessible name for the previous-month button (consumer passes a translated string). */\n prevMonthLabel?: string;\n /** Accessible name for the next-month button (consumer passes a translated string). */\n nextMonthLabel?: string;\n}\n\nconst props = withDefaults(defineProps<CalendarProps>(), {\n modelValue: '',\n min: '',\n max: '',\n format: 'YYYY-MM-DD',\n disabledDateTooltip: '',\n firstDayOfWeek: 1,\n locale: 'en',\n placeholder: '',\n applyLabel: 'Apply',\n cancelLabel: 'Cancel',\n width: 252,\n inputAriaLabel: '',\n prevMonthLabel: 'Previous month',\n nextMonthLabel: 'Next month',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n apply: [];\n cancel: [];\n}>();\n\ntype Segment = 'd' | 'm' | 'y';\n\nconst FORMAT_ORDER: Record<CalendarDateFormat, Segment[]> = {\n 'YYYY-MM-DD': ['y', 'm', 'd'],\n 'DD/MM/YYYY': ['d', 'm', 'y'],\n 'MM/DD/YYYY': ['m', 'd', 'y'],\n 'DD.MM.YYYY': ['d', 'm', 'y'],\n};\nconst FORMAT_SEPARATOR: Record<CalendarDateFormat, string> = {\n 'YYYY-MM-DD': '-',\n 'DD/MM/YYYY': '/',\n 'MM/DD/YYYY': '/',\n 'DD.MM.YYYY': '.',\n};\nconst SEGMENT_LENGTH: Record<Segment, number> = { d: 2, m: 2, y: 4 };\n\nfunction pad (value: number, length: number): string {\n return String(value).padStart(length, '0');\n}\n\nfunction buildDate (year: number, month: number, day: number): Date | null {\n if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\n return null;\n }\n\n const date = new Date(year, month - 1, day);\n\n // Reject overflow (e.g. 31/02 → March) by round-tripping.\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction formatIn (date: Date, format: CalendarDateFormat): string {\n const byKey: Record<Segment, string> = {\n d: pad(date.getDate(), 2),\n m: pad(date.getMonth() + 1, 2),\n y: String(date.getFullYear()),\n };\n\n return FORMAT_ORDER[format].map(key => byKey[key]).join(FORMAT_SEPARATOR[format]);\n}\n\nfunction parseIn (text: string | undefined, format: CalendarDateFormat): Date | null {\n const segs = (text ?? '').split(FORMAT_SEPARATOR[format]);\n\n if (segs.length !== 3) {\n return null;\n }\n\n const byKey: Record<Segment, number> = { d: NaN, m: NaN, y: NaN };\n\n FORMAT_ORDER[format].forEach((key, index) => {\n byKey[key] = Number(segs[index]);\n });\n\n return buildDate(byKey.y, byKey.m, byKey.d);\n}\n\nfunction startOfDay (date: Date): number {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\nconst inputText = ref('');\n\nconst minDate = computed(() => parseIn(props.min, props.format));\nconst maxDate = computed(() => parseIn(props.max, props.format));\n\nfunction isInRange (date: Date): boolean {\n const time = startOfDay(date);\n const minTime = minDate.value ? startOfDay(minDate.value) : null;\n const maxTime = maxDate.value ? startOfDay(maxDate.value) : null;\n\n return (minTime === null || time >= minTime) && (maxTime === null || time <= maxTime);\n}\n\nconst draftDate = computed(() => parseIn(inputText.value, props.format));\nconst canApply = computed(() => draftDate.value !== null && isInRange(draftDate.value));\n\nfunction seedInputFromModel (): void {\n const date = parseIn(props.modelValue, props.format);\n\n inputText.value = date ? formatIn(date, props.format) : '';\n}\n\nseedInputFromModel();\n\nfunction initialView (): { year: number; month: number } {\n const base = draftDate.value ?? new Date();\n\n return { year: base.getFullYear(), month: base.getMonth() };\n}\n\nconst view = ref(initialView());\n\nwatch(() => props.modelValue, seedInputFromModel);\n\nwatch(draftDate, next => {\n if (next) {\n view.value = { year: next.getFullYear(), month: next.getMonth() };\n }\n});\n\nconst monthLabel = computed(() =>\n new Intl.DateTimeFormat(props.locale, { month: 'short', year: 'numeric' }).format(\n new Date(view.value.year, view.value.month, 1)\n )\n);\n\nconst weekdayLabels = computed(() => {\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' });\n const labels: string[] = [];\n\n // 2024-01-07 is a Sunday — a stable anchor independent of the current date.\n for (let i = 0; i < 7; i++) {\n const dayIndex = (props.firstDayOfWeek + i) % 7;\n\n labels.push(formatter.format(new Date(2024, 0, 7 + dayIndex)).slice(0, 2));\n }\n\n return labels;\n});\n\ninterface DayCell {\n key: string;\n label: number;\n display: string;\n inCurrentMonth: boolean;\n disabled: boolean;\n selected: boolean;\n}\n\nconst days = computed<DayCell[]>(() => {\n const { year, month } = view.value;\n const firstOfMonth = new Date(year, month, 1);\n const leading = (firstOfMonth.getDay() - props.firstDayOfWeek + 7) % 7;\n const selectedTime = draftDate.value ? startOfDay(draftDate.value) : null;\n\n const cells: DayCell[] = [];\n\n for (let i = 0; i < 42; i++) {\n // Calendar-day stepping (not fixed 24h-ms) keeps the grid correct across DST.\n const date = new Date(year, month, 1 - leading + i);\n\n cells.push({\n key: formatIn(date, 'YYYY-MM-DD'),\n label: date.getDate(),\n display: formatIn(date, props.format),\n inCurrentMonth: date.getMonth() === month,\n disabled: !isInRange(date),\n selected: selectedTime !== null && startOfDay(date) === selectedTime,\n });\n }\n\n return cells;\n});\n\nfunction goToPreviousMonth (): void {\n const month = view.value.month - 1;\n\n view.value = month < 0 ? { year: view.value.year - 1, month: 11 } : { year: view.value.year, month };\n}\n\nfunction goToNextMonth (): void {\n const month = view.value.month + 1;\n\n view.value = month > 11 ? { year: view.value.year + 1, month: 0 } : { year: view.value.year, month };\n}\n\nfunction selectDay (cell: DayCell): void {\n if (cell.disabled) {\n return;\n }\n\n inputText.value = cell.display;\n}\n\n// Mask free text into the active format: digits only, separators auto-inserted, segment lengths\n// from the format. A 2-digit segment \"closed\" by a typed separator pads (e.g. \"1/\" → \"01/\"),\n// but a separator is never force-added, so backspace never gets stuck.\nfunction maskDate (raw: string): string {\n const format = props.format;\n const order = FORMAT_ORDER[format];\n const sep = FORMAT_SEPARATOR[format];\n const lengths = order.map(key => SEGMENT_LENGTH[key]);\n const totalDigits = lengths.reduce((sum, length) => sum + length, 0);\n\n const typedParts = raw.split(sep);\n\n for (let i = 0; i < typedParts.length - 1; i++) {\n if (lengths[i] === 2 && /^\\d$/.test(typedParts[i])) {\n typedParts[i] = `0${typedParts[i]}`;\n }\n }\n\n const digits = typedParts.join('').replace(/\\D/g, '').slice(0, totalDigits);\n const segments: string[] = [];\n let cursor = 0;\n\n for (const length of lengths) {\n segments.push(digits.slice(cursor, cursor + length));\n cursor += length;\n }\n\n const endsWithSep = raw.endsWith(sep);\n let out = segments[0];\n\n for (let i = 1; i < segments.length; i++) {\n if (segments[i]) {\n out += sep + segments[i];\n } else if (endsWithSep && segments[i - 1].length === lengths[i - 1]) {\n out += sep;\n break;\n } else {\n break;\n }\n }\n\n return out;\n}\n\nfunction onDateInput (event: Event): void {\n inputText.value = maskDate((event.target as HTMLInputElement).value);\n}\n\nfunction onApply (): void {\n if (!canApply.value || draftDate.value === null) {\n return;\n }\n\n emit('update:modelValue', formatIn(draftDate.value, props.format));\n emit('apply');\n}\n\nfunction onCancel (): void {\n seedInputFromModel();\n emit('cancel');\n}\n</script>\n\n<template>\n <div\n class=\"ab-calendar\"\n data-testid=\"calendar\"\n :style=\"{ width: `${width}px` }\">\n <input\n :value=\"inputText\"\n type=\"text\"\n class=\"ab-calendar__input\"\n data-testid=\"calendar-input\"\n :placeholder=\"placeholder\"\n :aria-label=\"inputAriaLabel || placeholder || undefined\"\n inputmode=\"numeric\"\n maxlength=\"10\"\n autocomplete=\"off\"\n @input=\"onDateInput\">\n\n <div class=\"ab-calendar__header\">\n <button\n type=\"button\"\n class=\"ab-calendar__nav\"\n data-testid=\"calendar-prev\"\n :aria-label=\"prevMonthLabel\"\n @click=\"goToPreviousMonth\">\n <Icon\n class=\"ab-calendar__nav-icon\"\n name=\"line-chevron-left\"\n :size=\"14\" />\n </button>\n <span class=\"ab-calendar__month\">{{ monthLabel }}</span>\n <button\n type=\"button\"\n class=\"ab-calendar__nav\"\n data-testid=\"calendar-next\"\n :aria-label=\"nextMonthLabel\"\n @click=\"goToNextMonth\">\n <Icon\n class=\"ab-calendar__nav-icon\"\n name=\"line-chevron-right\"\n :size=\"14\" />\n </button>\n </div>\n\n <div class=\"ab-calendar__weekdays\">\n <span\n v-for=\"label in weekdayLabels\"\n :key=\"label\"\n class=\"ab-calendar__weekday\">{{ label }}</span>\n </div>\n\n <div class=\"ab-calendar__grid\">\n <template\n v-for=\"cell in days\"\n :key=\"cell.key\">\n <!-- Disabled <button> doesn't fire hover; the Tooltip wrapper captures it. -->\n <Tooltip\n v-if=\"cell.disabled && disabledDateTooltip\"\n :id=\"`calendar-disabled-${cell.key}`\"\n :text=\"disabledDateTooltip\"\n placement=\"top\">\n <button\n type=\"button\"\n class=\"ab-calendar__day ab-calendar__day--disabled\"\n :class=\"{ 'ab-calendar__day--muted': !cell.inCurrentMonth }\"\n data-testid=\"calendar-day\"\n data-disabled=\"true\"\n :data-date=\"cell.key\"\n :aria-label=\"cell.display\"\n aria-disabled=\"true\"\n disabled>{{ cell.label }}</button>\n </Tooltip>\n <button\n v-else\n type=\"button\"\n class=\"ab-calendar__day\"\n :class=\"{\n 'ab-calendar__day--muted': !cell.inCurrentMonth,\n 'ab-calendar__day--selected': cell.selected,\n 'ab-calendar__day--disabled': cell.disabled,\n }\"\n data-testid=\"calendar-day\"\n :data-disabled=\"cell.disabled ? 'true' : 'false'\"\n :data-date=\"cell.key\"\n :aria-label=\"cell.display\"\n :aria-pressed=\"cell.selected\"\n :disabled=\"cell.disabled\"\n @click=\"selectDay(cell)\">{{ cell.label }}</button>\n </template>\n </div>\n\n <div class=\"ab-calendar__footer\">\n <Button\n variant=\"ghost\"\n color=\"secondary\"\n size=\"default\"\n custom-class=\"ab-calendar__btn ab-calendar__btn--cancel\"\n data-testid=\"calendar-cancel\"\n :label=\"cancelLabel\"\n @click=\"onCancel\" />\n <Button\n variant=\"solid\"\n color=\"primary\"\n size=\"default\"\n custom-class=\"ab-calendar__btn ab-calendar__btn--apply\"\n data-testid=\"calendar-apply\"\n :label=\"applyLabel\"\n :disabled=\"!canApply\"\n @click=\"onApply\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.ab-calendar {\n box-sizing: border-box;\n padding: 16px;\n border-radius: 4px;\n background: $color-base-4;\n font-family: Figtree, sans-serif;\n overflow: hidden;\n user-select: none;\n\n &__input {\n width: 100%;\n box-sizing: border-box;\n height: 40px;\n padding: 8px;\n margin-bottom: 24px;\n border: 1px solid $color_gray_300;\n border-radius: 4px;\n font-family: inherit;\n font-size: 15px;\n line-height: 24px;\n color: $color_gray_800;\n background: $color_gray_0;\n\n &::placeholder {\n color: $color-base-3;\n }\n\n &:focus {\n outline: none;\n border-color: $color_primary_500;\n background: $color_gray_0;\n box-shadow: 0 0 0 3px $color_primary_200;\n }\n }\n\n &__header,\n &__weekdays,\n &__grid {\n margin-left: 8px;\n margin-right: 8px;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n }\n\n &__month {\n flex: 1;\n font-size: 13px;\n font-weight: 600;\n line-height: 20px;\n letter-spacing: 1.2px;\n text-align: center;\n color: $color_gray_600;\n text-transform: uppercase;\n }\n\n &__nav {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: $color_gray_600;\n cursor: pointer;\n\n &:hover {\n background: $color_gray_200;\n }\n }\n\n &__nav-icon {\n display: block;\n }\n\n &__weekdays,\n &__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 0;\n }\n\n &__weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n font-size: 13px;\n line-height: 16px;\n color: $color_gray_500;\n text-transform: uppercase;\n }\n\n &__day {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 32px;\n border: none;\n border-radius: 4px;\n background: transparent;\n font-family: inherit;\n font-size: 13px;\n line-height: 16px;\n color: $color_gray_800;\n cursor: pointer;\n\n &:hover:not(&--disabled):not(&--selected) {\n background: $color_primary_0;\n }\n\n &--muted {\n visibility: hidden;\n height: 0;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n }\n\n &--selected {\n background: $color_primary_500;\n color: $color-base-4;\n\n &:hover {\n background: $color_primary_500;\n }\n }\n\n &--disabled {\n color: $color_gray_500;\n cursor: not-allowed;\n }\n }\n\n &__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 16px;\n margin: 8px -16px -8px;\n padding: 8px 16px;\n border-top: 1px solid $color_gray_300;\n }\n\n &__footer :deep(.ab-calendar__btn--cancel) {\n color: $color_neutral_800;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { AllIconNames } from '@/components/Icon/Icon.vue';\nimport { Icon } from '@/index';\nimport styles from './Chip.module.scss';\n\nexport interface ChipProps {\n label: string;\n thumbnailUrl?: string;\n thumbnailAlt?: string;\n iconName?: AllIconNames;\n removable?: boolean;\n clickable?: boolean;\n variant?: 'default';\n}\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n removable: false,\n clickable: false,\n variant: 'default',\n});\n\nconst emit = defineEmits<{\n remove: [];\n click: [];\n}>();\n\nconst chipClasses = computed(() => [\n styles.chip,\n styles[`chip--${props.variant}`],\n {\n [styles['chip--clickable']]: props.clickable,\n },\n]);\n\nfunction handleClick () {\n if (props.clickable) {\n emit('click');\n }\n}\n\nfunction handleRemove (event: MouseEvent) {\n event.stopPropagation();\n\n emit('remove');\n}\n</script>\n\n<template>\n <div\n :class=\"chipClasses\"\n @click=\"handleClick\">\n <span\n v-if=\"thumbnailUrl || iconName\"\n :class=\"styles.chip__thumbnail\">\n <img\n v-if=\"thumbnailUrl\"\n :alt=\"thumbnailAlt || label\"\n :class=\"styles.chip__thumbnailImage\"\n :src=\"thumbnailUrl\">\n <Icon\n v-else-if=\"iconName\"\n :class=\"styles.chip__icon\"\n :name=\"iconName\"\n :size=\"24\" />\n </span>\n <span :class=\"styles.chip__label\">{{ label }}</span>\n <button\n v-if=\"removable\"\n type=\"button\"\n :class=\"styles.chip__remove\"\n @click=\"handleRemove\">\n <Icon\n name=\"chip-close\"\n :size=\"4\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { Icon } from '@/index';\nimport styles from './Checkbox.module.scss';\n\nexport interface CheckboxProps {\n id: string;\n name?: string;\n label?: string;\n checked?: boolean;\n disabled?: boolean;\n value?: string | number;\n modelValue?: boolean;\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n checked: false,\n disabled: false,\n label: '',\n name: '',\n value: '',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n change: [checked: boolean];\n}>();\n\nconst checked = computed(() => (props.modelValue !== undefined ? props.modelValue : props.checked));\n\nfunction handleChange (event: Event) {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n}\n</script>\n\n<template>\n <label\n :class=\"[\n styles.checkbox,\n {\n [styles.checkbox__checked]: checked,\n [styles.checkbox__disabled]: disabled,\n },\n ]\"\n :for=\"id\">\n <input\n :id=\"id\"\n type=\"checkbox\"\n :checked=\"checked\"\n :class=\"styles.checkbox__input\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @change=\"handleChange\">\n <span :class=\"styles.checkbox__box\">\n <Icon\n v-if=\"checked\"\n name=\"line-check-netural\"\n :size=\"16\" />\n </span>\n <span\n v-if=\"label\"\n :class=\"styles.checkbox__label\">{{ label }}</span>\n <slot />\n </label>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport styles from './ColorPreview.module.scss';\n\nexport interface ColorPreviewProps {\n colors: string[];\n size?: 'small' | 'medium' | 'default';\n}\n\nconst props = withDefaults(defineProps<ColorPreviewProps>(), {\n size: 'default',\n});\n\nconst previewClasses = computed(() => [\n styles.colorPreview,\n styles[`colorPreview--${props.size}`],\n]);\n</script>\n\n<template>\n <div :class=\"previewClasses\">\n <div :class=\"styles.colorPreview__container\">\n <div\n v-for=\"(color, index) in colors\"\n :key=\"index\"\n :class=\"styles.colorPreview__swatch\"\n :style=\"{ backgroundColor: color }\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, nextTick } from 'vue';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\ninterface InBasicTextInputProps {\n id: string;\n name: string;\n theme?: 'grey' | 'white';\n modelValue?: string | number;\n labelStatus?: boolean;\n labelText?: string;\n type?: 'text' | 'number';\n states?: 'default' | 'error' | 'warning';\n placeholderText: string;\n disabledStatus?: boolean;\n readonly?: boolean;\n leftIconStatus?: boolean;\n leftIconName?: IconNames;\n rightIconStatus?: boolean;\n rightIconName?: IconNames;\n suffixTextStatus?: boolean;\n suffixText?: string;\n autoComplete?: string;\n maxCharacterLength?: number | string;\n minValue?: number | string;\n maxValue?: number | string;\n autoFocus?: boolean;\n allowDecimal?: boolean;\n allowComma?: boolean;\n preventXss?: boolean;\n helperMessageStatus?: boolean;\n helperMessage?: string;\n stateMessage?: string;\n}\n\nconst props = withDefaults(defineProps<InBasicTextInputProps>(), {\n theme: 'grey',\n modelValue: '',\n labelStatus: true,\n labelText: '',\n type: 'text',\n states: 'default',\n disabledStatus: false,\n readonly: false,\n leftIconStatus: false,\n leftIconName: undefined,\n rightIconStatus: false,\n rightIconName: undefined,\n suffixTextStatus: false,\n suffixText: '',\n autoComplete: 'off',\n maxCharacterLength: '',\n minValue: 0,\n maxValue: '',\n autoFocus: false,\n allowDecimal: false,\n allowComma: true,\n preventXss: true,\n helperMessageStatus: true,\n helperMessage: '',\n stateMessage: '',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n input: [value: string | number];\n change: [value: string | number];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keyup: [event: KeyboardEvent];\n keypress: [event: KeyboardEvent];\n click: [event: MouseEvent];\n paste: [event: ClipboardEvent];\n leftIconClick: [event: MouseEvent];\n rightIconClick: [event: MouseEvent];\n}>();\n\nconst inputValue = ref<string | number>('');\n\nconst labelTextSecure = computed(() => {\n if (props.preventXss) {\n // Simple XSS prevention - escape HTML\n return String(props.labelText)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n return props.labelText;\n});\n\nconst statesDefault = computed(() => props.states === 'default');\nconst statesValidation = computed(\n () => props.states === 'warning' || props.states === 'error'\n);\nconst helperContainerStatus = computed(\n () => props.helperMessageStatus || statesValidation.value\n);\n\nconst isNumberType = computed(() => props.type === 'number');\n\nconst deniedSymbols = computed(() => {\n const denied = ['e', 'E', '+', '\\\\'];\n const minValueNum = typeof props.minValue === 'number'\n ? props.minValue\n : Number(props.minValue);\n\n if (!Number.isNaN(minValueNum) && minValueNum >= 0) {\n denied.push('-');\n }\n\n if (!props.allowDecimal) {\n denied.push('.');\n }\n\n if (!props.allowComma) {\n denied.push(',');\n }\n\n return denied;\n});\n\nconst preventKeyPress = (key: string) => deniedSymbols.value.includes(key);\n\nconst fixValue = (event: Event & { target?: HTMLInputElement }) => {\n if (props.preventXss && event?.target) {\n const safeData = String(event.target.value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n\n if (event.target.value !== safeData) {\n event.target.value = safeData;\n }\n }\n\n inputValue.value = event?.target?.value || '';\n\n return event;\n};\n\nconst createCommasAndDotsRegex = () => {\n let regexPattern = '';\n\n if (props.allowDecimal) {\n regexPattern += '.';\n }\n\n if (props.allowComma) {\n regexPattern += ',';\n }\n\n return new RegExp(`[${regexPattern}]`, 'g');\n};\n\nconst createNonNumberRegex = () => {\n let allowedChars = '0-9';\n\n if (props.allowDecimal) {\n allowedChars += '\\\\.';\n }\n\n if (props.allowComma) {\n allowedChars += ',';\n }\n\n return new RegExp(`[^${allowedChars}]+`, 'g');\n};\n\nconst replaceNonNumbers = (event: Event & { target?: HTMLInputElement }) => {\n if (!event?.target) {\n return;\n }\n\n const inputElement = event.target;\n const { selectionStart } = inputElement;\n\n if (selectionStart === null) {\n return;\n }\n\n const cursor = selectionStart - 1;\n const { value } = event.target;\n const regex = createNonNumberRegex();\n const indexes = [...value.matchAll(regex)].map(item => item.index);\n\n event.target.value = value.replace(regex, '');\n\n if (indexes.length > 0 && cursor >= 0) {\n inputElement.setSelectionRange(cursor, cursor);\n }\n};\n\nconst replaceExtraCommasAndDots = (\n event: Event & { target?: HTMLInputElement }\n) => {\n if (!event?.target) {\n return;\n }\n\n const { value } = event.target;\n const inputElement = event.target;\n const { selectionStart } = inputElement;\n\n if (selectionStart === null) {\n return;\n }\n\n const cursorPosition = selectionStart - 1;\n const regex = createCommasAndDotsRegex();\n const indexes = [...value.matchAll(regex)].map(item => item.index);\n const characters = value.split('');\n\n if (indexes.length > 1 && cursorPosition >= 0) {\n characters[cursorPosition] = '';\n }\n\n event.target.value = characters.join('');\n\n if (indexes.length > 1 && cursorPosition >= 0) {\n inputElement.setSelectionRange(cursorPosition, cursorPosition);\n }\n};\n\nconst keyup = (event: KeyboardEvent) => {\n emit('keyup', event);\n};\n\nconst keypress = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n emit('keypress', event);\n }\n\n if (isNumberType.value && preventKeyPress(event.key)) {\n event.preventDefault();\n }\n};\n\nconst focus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst blur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst click = (event: MouseEvent) => {\n emit('click', event);\n};\n\nconst input = (event: Event) => {\n const inputEvent = event as Event & { target?: HTMLInputElement };\n\n if (isNumberType.value) {\n replaceNonNumbers(inputEvent);\n replaceExtraCommasAndDots(inputEvent);\n }\n\n fixValue(inputEvent);\n\n const value = inputEvent?.target?.value || '';\n\n inputValue.value = value;\n emit('input', value);\n emit('update:modelValue', value);\n};\n\nconst change = (event: Event) => {\n const inputEvent = event as Event & { target?: HTMLInputElement };\n\n if (isNumberType.value) {\n replaceNonNumbers(inputEvent);\n replaceExtraCommasAndDots(inputEvent);\n }\n\n fixValue(inputEvent);\n\n const value = inputEvent?.target?.value || '';\n\n inputValue.value = value;\n emit('change', value);\n emit('update:modelValue', value);\n};\n\nconst paste = (event: ClipboardEvent) => {\n if (\n props.maxCharacterLength\n && typeof props.maxCharacterLength === 'number'\n ) {\n const inputElement = event.target as HTMLInputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n if (start === null || end === null) {\n return;\n }\n\n const { value } = inputElement;\n const clipboardData = event.clipboardData?.getData('text/plain') || '';\n const currentLength = value.length;\n const selectedLength = end - start;\n const availableSpace = props.maxCharacterLength - currentLength + selectedLength;\n\n if (availableSpace <= 0) {\n event.preventDefault();\n\n return;\n }\n\n const truncatedClipboardData = clipboardData.slice(0, availableSpace);\n\n if (truncatedClipboardData !== clipboardData) {\n event.preventDefault();\n\n const newValue = value.slice(0, start)\n + truncatedClipboardData\n + value.slice(end);\n\n inputElement.value = newValue;\n\n const cursor = start + truncatedClipboardData.length;\n\n inputElement.setSelectionRange(cursor, cursor);\n inputValue.value = newValue;\n emit('input', newValue);\n emit('update:modelValue', newValue);\n\n return;\n }\n }\n\n if (!isNumberType.value) {\n return;\n }\n\n event.preventDefault();\n\n const inputElement = event.target as HTMLInputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n if (start === null || end === null) {\n return;\n }\n\n const { value } = inputElement;\n const replaceAll = value.includes('.') || value.includes(',');\n const clipboardData = event.clipboardData?.getData('text/plain') || '';\n const regex = createCommasAndDotsRegex();\n const nonNumberRegex = createNonNumberRegex();\n let cleanedValue = clipboardData.replace(nonNumberRegex, '');\n const matches = [...cleanedValue.matchAll(regex)];\n const indexes: number[] = [];\n\n matches.forEach(match => {\n if (match.index !== undefined) {\n indexes.push(match.index);\n }\n });\n\n const characters = cleanedValue.split('');\n\n if (!replaceAll) {\n indexes.shift();\n }\n\n indexes.forEach(index => {\n characters[index] = '';\n });\n\n cleanedValue = characters.join('');\n\n const cursor = start + cleanedValue.length;\n const newValue = value.slice(0, start) + cleanedValue + value.slice(end);\n\n inputElement.value = newValue;\n inputElement.setSelectionRange(cursor, cursor);\n inputValue.value = newValue;\n emit('input', newValue);\n emit('update:modelValue', newValue);\n};\n\nconst leftIconClick = (event: MouseEvent) => {\n emit('leftIconClick', event);\n};\n\nconst rightIconClick = (event: MouseEvent) => {\n emit('rightIconClick', event);\n};\n\nconst textInput = ref<HTMLInputElement | null>(null);\nconst componentRoot = ref<HTMLElement | null>(null);\n\nconst focusToInput = () => {\n nextTick(() => {\n textInput.value?.focus();\n });\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n inputValue.value = newValue;\n },\n { immediate: true }\n);\n\nwatch(\n () => props.autoFocus,\n newValue => {\n if (newValue) {\n focusToInput();\n }\n }\n);\n\nonMounted(() => {\n if (props.autoFocus) {\n focusToInput();\n }\n});\n</script>\n\n<template>\n <fieldset\n ref=\"componentRoot\"\n class=\"in-basic-text-input-wrapper qa-text-input\"\n :class=\"[\n `in-basic-text-input-wrapper__${states}`,\n `in-basic-text-input-wrapper__${theme}`,\n { 'in-basic-text-input-wrapper__disable': disabledStatus },\n ]\">\n <label\n v-if=\"labelStatus\"\n class=\"in-basic-text-input-wrapper__label\"\n :for=\"id\">\n <span v-html=\"labelTextSecure\" />\n </label>\n <div class=\"in-basic-text-input-wrapper__input-field\">\n <div\n v-if=\"$slots.leftSlot\"\n class=\"in-basic-text-input-wrapper__slot-left\">\n <slot name=\"leftSlot\" />\n </div>\n <Icon\n v-if=\"leftIconStatus\"\n class=\"in-basic-text-input-wrapper__icon-left\"\n :name=\"leftIconName\"\n :size=\"24\"\n @click=\"leftIconClick\" />\n <input\n :id=\"id\"\n ref=\"textInput\"\n class=\"in-basic-text-input-wrapper__input\"\n :autocomplete=\"autoComplete\"\n :disabled=\"disabledStatus\"\n :max=\"typeof maxValue === 'number' ? maxValue : undefined\"\n :maxlength=\"\n typeof maxCharacterLength === 'number'\n ? maxCharacterLength\n : undefined\n \"\n :min=\"typeof minValue === 'number' ? minValue : undefined\"\n :name=\"name\"\n :placeholder=\"placeholderText\"\n :readonly=\"readonly\"\n :type=\"type\"\n :value=\"inputValue\"\n @blur=\"blur\"\n @change=\"change\"\n @click=\"click\"\n @focus=\"focus\"\n @input=\"input\"\n @keypress=\"keypress\"\n @keyup=\"keyup\"\n @paste=\"paste\">\n <span\n v-if=\"suffixTextStatus && suffixText\"\n class=\"in-basic-text-input-wrapper__suffix-text\">\n {{ suffixText }}\n </span>\n <Icon\n v-if=\"rightIconStatus\"\n class=\"in-basic-text-input-wrapper__icon-right\"\n :name=\"rightIconName\"\n :size=\"24\"\n @click=\"rightIconClick\" />\n <div\n v-if=\"$slots.rightSlot\"\n class=\"in-basic-text-input-wrapper__slot-right\">\n <slot name=\"rightSlot\" />\n </div>\n </div>\n <div\n v-if=\"helperContainerStatus\"\n class=\"in-basic-text-input-wrapper__helper-container\">\n <div\n v-if=\"helperMessageStatus || statesValidation\"\n class=\"in-basic-text-input-wrapper__helper-message\">\n <p\n v-if=\"statesDefault\"\n class=\"in-basic-text-input-wrapper__helper-text\">\n {{ helperMessage }}\n </p>\n <p\n v-if=\"statesValidation && !disabledStatus\"\n class=\"in-basic-text-input-wrapper__helper-text\">\n {{ stateMessage }}\n </p>\n </div>\n </div>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-basic-text-input-wrapper {\n border: 0;\n margin: 0;\n padding: 0;\n position: relative;\n min-width: 0;\n width: 100%;\n\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n &__label {\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n color: #292929;\n margin-bottom: 8px;\n display: block;\n white-space: nowrap;\n font-family: \"Figtree\", sans-serif;\n }\n\n &__input-field {\n border: 1px solid #e1e1e1;\n border-radius: 4px;\n background-color: #f9f9f9;\n display: flex;\n flex-direction: row;\n align-items: center;\n //max-height: 40px;\n height: 40px;\n box-sizing: border-box;\n min-width: 0;\n width: 100%;\n\n &:focus-within {\n border-color: #0a2ecc;\n box-shadow: 0 0 0 3px #b5c1f1;\n }\n\n &:hover {\n border-color: #7a92f2;\n }\n }\n\n &__icon-left {\n margin-left: 8px;\n fill: #666666;\n margin-right: 0;\n }\n\n &__suffix-text {\n margin-left: 0;\n margin-right: 8px;\n font-size: 15px;\n color: #666666;\n white-space: nowrap;\n border-left: 1px solid #e1e1e1;\n padding: 0 8px;\n display: flex;\n align-self: normal;\n align-items: center;\n }\n\n &__icon-right {\n margin-right: 8px;\n fill: #666666;\n }\n\n &__input {\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n outline: none;\n resize: vertical;\n background-color: inherit;\n border: none !important;\n padding: 6px 8px;\n flex-grow: 1;\n min-width: 0;\n width: 0;\n transition: none !important;\n border-radius: 4px;\n color: #292929;\n font-family: \"Figtree\", sans-serif;\n\n &::placeholder {\n color: #666666;\n }\n }\n\n &__helper-container {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-top: 4px;\n }\n\n &__helper-message {\n display: flex;\n align-items: flex-start;\n }\n\n &__helper-icon {\n margin-right: 4px;\n min-width: 16px;\n }\n\n &__helper-text {\n font-size: 13px;\n font-weight: 400;\n line-height: 16px;\n margin: 0;\n color: #292929;\n }\n}\n\n.in-basic-text-input-wrapper__warning {\n .in-basic-text-input-wrapper__input-field {\n border-color: #ffbf00;\n\n &:focus-within {\n border-color: #ffbf00;\n box-shadow: 0 0 0 3px #ffe187;\n }\n\n &:hover {\n border-color: #ffd557;\n }\n }\n\n .in-basic-text-input-wrapper__helper-icon {\n fill: #ffbf00;\n transition: none;\n }\n}\n\n.in-basic-text-input-wrapper__error {\n .in-basic-text-input-wrapper__input-field {\n border-color: #dc2a2a;\n\n &:focus-within {\n border-color: #dc2a2a;\n box-shadow: 0 0 0 3px #f88e8c;\n }\n\n &:hover {\n border-color: #f16462;\n }\n }\n\n .in-basic-text-input-wrapper__helper-icon {\n fill: #dc2a2a;\n transition: none;\n }\n}\n\n.in-basic-text-input-wrapper__disable {\n * {\n pointer-events: none;\n fill: #989898;\n color: #989898 !important;\n }\n\n .in-basic-text-input-wrapper__input-field {\n border-color: #e1e1e1;\n background-color: #e1e1e1 !important;\n }\n\n .in-basic-text-input-wrapper__input {\n transition: none !important;\n\n &::placeholder {\n color: #989898 !important;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface Props {\n color: string;\n isTransparent?: boolean;\n}\n\nconst props = defineProps<Props>();\n\ndefineEmits(['click']);\n\nconst hasTransparency = computed(() => {\n if (props.color.startsWith('#') && props.color.length === 9) {\n return true;\n }\n\n if (props.color.startsWith('rgba')) {\n const opacityMatch = props.color.match(/[\\d.]+\\)$/);\n\n if (opacityMatch) {\n const opacity = parseFloat(opacityMatch[0]);\n\n return opacity < 1;\n }\n }\n\n return false;\n});\n</script>\n\n<template>\n <div\n class=\"color-swatch\"\n @click=\"$emit('click')\">\n <!-- Transparent background pattern -->\n <div\n v-if=\"isTransparent || hasTransparency\"\n class=\"color-swatch__transparent\">\n <div class=\"color-swatch__checkerboard\" />\n <div\n v-if=\"hasTransparency\"\n class=\"color-swatch__color-overlay\"\n :style=\"{ background: color }\" />\n </div>\n\n <!-- Color swatch -->\n <div\n v-else\n class=\"color-swatch__color\"\n :style=\"{ background: color }\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.color-swatch {\n position: relative;\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n cursor: pointer;\n transition: transform 0.2s;\n\n &:hover {\n transform: scale(1.1);\n }\n\n &__transparent {\n position: absolute;\n inset: 0;\n border-radius: 1.6px;\n border: 0.8px solid #e1e1e1;\n overflow: hidden;\n }\n\n &__checkerboard {\n width: 100%;\n height: 100%;\n background-image: repeating-conic-gradient(#dcdee6 0% 25%, white 0% 50%);\n background-size: 6px 6px;\n }\n\n &__color-overlay {\n position: absolute;\n inset: 0;\n border-radius: 1.6px;\n }\n\n &__color {\n position: absolute;\n inset: 0;\n border-radius: 2px;\n border: 1px solid #e1e1e1;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { Icon } from '@/index';\nimport ColorSwatch from './ColorSwatch.vue';\n\ninterface Emits {\n (e: 'color-change', color: string): void;\n (e: 'close'): void;\n}\n\ninterface ColorPickerProps {\n color?: string;\n title?: string;\n showSaveButton?: boolean;\n presetColors?: string[];\n firstRowCount?: number;\n showOpacityInHex?: boolean;\n}\n\nconst props = withDefaults(defineProps<ColorPickerProps>(), {\n color: '#666666',\n title: 'Text Color',\n showSaveButton: false,\n showOpacityInHex: true,\n firstRowCount: 10,\n presetColors: () => [\n 'transparent',\n '#000000',\n '#333333',\n '#666666',\n '#999999',\n '#CCCCCC',\n '#FFFFFF',\n '#F43736',\n '#FF9800',\n '#FFC207',\n '#FFEB3B',\n '#CDDC39',\n '#8BC44A',\n '#4CAF51',\n '#009688',\n '#07BCD4',\n '#05AAF4',\n '#3F52B5',\n ],\n});\n\nconst emit = defineEmits<Emits>();\nconst hue = ref(0.0);\nconst saturation = ref(0);\nconst brightness = ref(0.4);\nconst opacity = ref(1);\nconst hexInput = ref('666666');\nconst savedColors = ref<string[]>([]);\nconst isUpdatingFromProp = ref(false); // Flag to prevent emit when updating from prop\nconst colorPickerRef = ref<HTMLElement | null>(null);\nconst hueSliderRef = ref<HTMLElement | null>(null);\nconst opacitySliderRef = ref<HTMLElement | null>(null);\n\nconst presetColorRows = computed(() => {\n const colors = props.presetColors || [];\n const rows: string[][] = [];\n const colorsPerRow = 11;\n const firstRowSize = props.firstRowCount;\n\n if (colors.length === 0) {\n return rows;\n }\n\n rows.push(colors.slice(0, firstRowSize));\n\n for (let i = firstRowSize; i < colors.length; i += colorsPerRow) {\n rows.push(colors.slice(i, i + colorsPerRow));\n }\n\n return rows;\n});\n\nconst hueColor = computed(() => {\n const h = hue.value;\n const x = 1 - Math.abs(((h * 6) % 2) - 1);\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h < 1 / 6) {\n r = 1;\n g = x;\n } else if (h < 2 / 6) {\n r = x;\n g = 1;\n } else if (h < 3 / 6) {\n g = 1;\n b = x;\n } else if (h < 4 / 6) {\n g = x;\n b = 1;\n } else if (h < 5 / 6) {\n r = x;\n b = 1;\n } else {\n r = 1;\n b = x;\n }\n\n return `rgb(${Math.round(r * 255)}, ${Math.round(g * 255)}, ${Math.round(b * 255)})`;\n});\n\nconst currentColor = computed(() => {\n const h = hue.value;\n const s = saturation.value;\n const v = brightness.value;\n const c = v * s;\n const x = c * (1 - Math.abs(((h * 6) % 2) - 1));\n const m = v - c;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h < 1 / 6) {\n r = c;\n g = x;\n } else if (h < 2 / 6) {\n r = x;\n g = c;\n } else if (h < 3 / 6) {\n g = c;\n b = x;\n } else if (h < 4 / 6) {\n g = x;\n b = c;\n } else if (h < 5 / 6) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n\n return `rgb(${r}, ${g}, ${b})`;\n});\n\nconst currentColorWithOpacity = computed(() => {\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return currentColor.value;\n }\n\n if (opacity.value < 1) {\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opacity.value})`;\n }\n\n return `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;\n});\n\nwatch([hue, saturation, brightness, opacity], () => {\n updateHexInput();\n\n if (!isUpdatingFromProp.value) {\n emit('color-change', currentColorWithOpacity.value);\n }\n});\n\nwatch(\n () => props.color,\n newColor => {\n if (newColor) {\n isUpdatingFromProp.value = true;\n\n // Handle 'transparent' as a special case\n if (newColor.toLowerCase() === 'transparent') {\n setNoColor();\n } else {\n setColorFromHex(newColor);\n }\n\n setTimeout(() => {\n isUpdatingFromProp.value = false;\n }, 0);\n }\n },\n { immediate: true }\n);\n\nfunction updateHexInput () {\n if (opacity.value === 0) {\n hexInput.value = '';\n\n return;\n }\n\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return;\n }\n\n const hex = rgb\n .map(x => parseInt(x).toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase();\n\n if (props.showOpacityInHex) {\n const opacityHex = Math.round(opacity.value * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n\n hexInput.value = hex + opacityHex;\n } else {\n hexInput.value = hex;\n }\n}\n\nfunction handleColorPickerMouseDown (e: MouseEvent) {\n // Picking from the gradient means \"I want a visible colour\". If the picker was\n // seeded transparent (no-colour), opacity is 0 — promote it so the pick is not\n // swallowed as rgba(...,0) and the hex input reflects the choice.\n if (opacity.value === 0) {\n opacity.value = 1;\n }\n\n const updatePosition = (event: MouseEvent) => {\n if (!colorPickerRef.value) {\n return;\n }\n\n const rect = colorPickerRef.value.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n\n saturation.value = x;\n brightness.value = 1 - y;\n };\n\n updatePosition(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updatePosition(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleHueSliderMouseDown (e: MouseEvent) {\n // See handleColorPickerMouseDown: choosing a hue implies a visible colour, so lift\n // a transparent (no-colour) seed off opacity 0.\n if (opacity.value === 0) {\n opacity.value = 1;\n }\n\n const updateHue = (event: MouseEvent) => {\n if (!hueSliderRef.value) {\n return;\n }\n\n const rect = hueSliderRef.value.getBoundingClientRect();\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n\n hue.value = y;\n };\n\n updateHue(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updateHue(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleOpacitySliderMouseDown (e: MouseEvent) {\n const updateOpacity = (event: MouseEvent) => {\n if (!opacitySliderRef.value) {\n return;\n }\n\n const rect = opacitySliderRef.value.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n\n opacity.value = 1 - x;\n };\n\n updateOpacity(e);\n\n const handleMouseMove = (event: MouseEvent) => {\n updateOpacity(event);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n}\n\nfunction handleHexInput (value: string | number) {\n const maxLength = props.showOpacityInHex ? 8 : 6;\n const hexString = String(value).replace(/[^0-9A-Fa-f]/g, '').slice(0, maxLength).toUpperCase();\n\n hexInput.value = hexString;\n\n if (props.showOpacityInHex) {\n if (hexString.length === 6 || hexString.length === 8) {\n setColorFromHex(hexString);\n }\n } else if (hexString.length === 6) {\n setColorFromHex(hexString);\n }\n}\n\nfunction handleHexPaste (event: ClipboardEvent) {\n const pastedText = event.clipboardData?.getData('text') || '';\n const maxLength = props.showOpacityInHex ? 8 : 6;\n const cleanHex = pastedText.replace(/^#/, '').replace(/[^0-9A-Fa-f]/g, '').slice(0, maxLength).toUpperCase();\n\n if (props.showOpacityInHex) {\n if (cleanHex.length === 6 || cleanHex.length === 8) {\n hexInput.value = cleanHex;\n setColorFromHex(cleanHex);\n event.preventDefault();\n } else if (cleanHex.length > 0) {\n hexInput.value = cleanHex;\n event.preventDefault();\n }\n } else if (cleanHex.length === 6) {\n hexInput.value = cleanHex;\n setColorFromHex(cleanHex);\n event.preventDefault();\n } else if (cleanHex.length > 0) {\n hexInput.value = cleanHex;\n event.preventDefault();\n }\n}\n\nfunction validateHexInput () {\n const expectedLength = props.showOpacityInHex ? 8 : 6;\n\n if (hexInput.value.length !== expectedLength) {\n updateHexInput();\n }\n}\n\nfunction setColorFromHex (hex: string) {\n const cleanHex = hex.startsWith('#') ? hex.slice(1) : hex;\n const hex6Result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\n const hex8Result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\n const result = hex8Result || hex6Result;\n\n if (!result) {\n const rgbMatch = /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/.exec(hex);\n\n if (rgbMatch) {\n const r = parseInt(rgbMatch[1], 10) / 255;\n const g = parseInt(rgbMatch[2], 10) / 255;\n const b = parseInt(rgbMatch[3], 10) / 255;\n const a = rgbMatch[4] ? parseFloat(rgbMatch[4]) : 1;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n hue.value = h;\n saturation.value = s;\n brightness.value = v;\n opacity.value = a;\n updateHexInput();\n\n return;\n }\n\n return;\n }\n\n const r = parseInt(result[1], 16) / 255;\n const g = parseInt(result[2], 16) / 255;\n const b = parseInt(result[3], 16) / 255;\n\n if (hex8Result && result[4]) {\n opacity.value = parseInt(result[4], 16) / 255;\n } else {\n opacity.value = 1;\n }\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n let h = 0;\n\n if (delta !== 0) {\n if (max === r) {\n h = ((g - b) / delta + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / delta + 2) / 6;\n } else {\n h = ((r - g) / delta + 4) / 6;\n }\n }\n\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n hue.value = h;\n saturation.value = s;\n brightness.value = v;\n\n const hexWithoutHash = hex.replace(/^#/, '');\n\n hexInput.value = hexWithoutHash.slice(0, 6).toUpperCase();\n}\n\nfunction setOpacity (value: number) {\n opacity.value = value;\n}\n\nfunction getCurrentColorWithOpacityHex (): string {\n const rgb = currentColor.value.match(/\\d+/g);\n\n if (!rgb) {\n return 'ffffff';\n }\n\n const hex = rgb\n .map(x => parseInt(x).toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase();\n\n const opacityHex = Math.round(opacity.value * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n\n return `#${hex}${opacityHex}`;\n}\n\nfunction saveCurrentColor () {\n const colorWithOpacity = getCurrentColorWithOpacityHex();\n\n if (!savedColors.value.includes(colorWithOpacity)) {\n savedColors.value.push(colorWithOpacity);\n }\n}\n\nfunction selectSavedColor (color: string) {\n setColorFromHex(color);\n}\n\nfunction setNoColor () {\n hexInput.value = '';\n opacity.value = 0;\n hue.value = 0;\n saturation.value = 0;\n brightness.value = 0.4;\n emit('color-change', 'transparent');\n}\n</script>\n\n<template>\n <div class=\"color-picker\">\n <div class=\"color-picker__header-wrapper\">\n <div class=\"color-picker__header\">\n <h3 class=\"color-picker__title\">\n {{ title }}\n </h3>\n </div>\n <div\n v-if=\"$slots.tabs\"\n class=\"color-picker__tabs\">\n <slot name=\"tabs\" />\n </div>\n </div>\n <div class=\"color-picker__content-wrapper\">\n <div class=\"color-picker__gradient-wrapper\">\n <div class=\"color-picker__color-area\">\n <div\n ref=\"colorPickerRef\"\n class=\"color-picker__color-canvas\"\n :style=\"{\n background: `linear-gradient(to bottom, transparent, black),\n linear-gradient(to right, white, ${hueColor})`,\n }\"\n @mousedown=\"handleColorPickerMouseDown\">\n <div\n class=\"color-picker__color-indicator\"\n :style=\"{ left: `${saturation * 100}%`, top: `${(1 - brightness) * 100}%` }\" />\n </div>\n </div>\n\n <div class=\"color-picker__hue-wrapper\">\n <div\n ref=\"hueSliderRef\"\n class=\"color-picker__hue-slider\"\n @mousedown=\"handleHueSliderMouseDown\">\n <div\n class=\"color-picker__hue-indicator\"\n :style=\"{ top: `${hue * 100}%` }\" />\n </div>\n </div>\n </div>\n\n <div class=\"color-picker__opacity-wrapper\">\n <div\n ref=\"opacitySliderRef\"\n class=\"color-picker__opacity-slider\"\n @mousedown=\"handleOpacitySliderMouseDown\">\n <div class=\"color-picker__opacity-checkerboard\" />\n <div\n class=\"color-picker__opacity-gradient\"\n :style=\"{\n background: `linear-gradient(to right, ${currentColor}, transparent)`,\n }\" />\n <div\n class=\"color-picker__opacity-handle\"\n :style=\"{\n left: `${(1 - opacity) * 100}%`,\n }\" />\n </div>\n </div>\n\n <div class=\"color-picker__hex-input-wrapper\">\n <InBasicTextInput\n id=\"color-picker-hex-input\"\n name=\"hex-input\"\n placeholder-text=\"\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n v-model=\"hexInput\"\n @blur=\"validateHexInput\"\n @input=\"handleHexInput\"\n @paste=\"handleHexPaste\" />\n </div>\n\n <div\n v-for=\"(row, rowIndex) in presetColorRows\"\n :key=\"`preset-row-${rowIndex}`\"\n class=\"color-picker__preset-row\">\n <div\n v-if=\"rowIndex === 0\"\n class=\"color-picker__no-color\"\n @click=\"setNoColor\">\n <Icon\n name=\"no-color\"\n :size=\"14\" />\n </div>\n <ColorSwatch\n v-for=\"(color, index) in row\"\n :key=\"`preset-${rowIndex}-${index}`\"\n :color=\"color\"\n :is-transparent=\"color === 'transparent'\"\n @click=\"color === 'transparent' ? setOpacity(0) : setColorFromHex(color)\" />\n </div>\n <div\n v-if=\"presetColorRows.length === 0\"\n class=\"color-picker__preset-row\">\n <div\n class=\"color-picker__no-color\"\n @click=\"setNoColor\">\n <Icon\n name=\"no-color\"\n :size=\"14\" />\n </div>\n </div>\n\n <div\n v-if=\"showSaveButton && savedColors.length > 0\"\n class=\"color-picker__preset-row\">\n <ColorSwatch\n v-for=\"(color, index) in savedColors\"\n :key=\"`saved-${index}`\"\n :color=\"color\"\n @click=\"selectSavedColor(color)\" />\n <button\n class=\"color-picker__save-button\"\n title=\"Save current color\"\n @click=\"saveCurrentColor\" />\n </div>\n\n <div\n v-else-if=\"showSaveButton\"\n class=\"color-picker__preset-row\">\n <button\n class=\"color-picker__save-button\"\n title=\"Save current color\"\n @click=\"saveCurrentColor\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.color-picker {\n display: flex;\n flex-direction: column;\n width: 276px;\n background: white;\n border-radius: 4px;\n border: $border_solid;\n box-shadow: $shadow_elevation;\n padding: 0;\n\n &__content-wrapper {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 0;\n margin: 0;\n border-bottom: $border_solid;\n }\n\n // InTabs adds its own top border; drop the header's so they don't stack into 2px.\n &__header-wrapper:has(&__tabs) &__header {\n border-bottom: none;\n }\n\n &__title {\n color: #222938;\n font-weight: 600;\n font-size: 13px;\n line-height: 16px;\n margin: 0;\n width: 100%;\n padding: 12px 16px;\n font-family: \"Figtree\", sans-serif;\n }\n\n &__tabs {\n margin: 0;\n margin-top: 0;\n width: 100%;\n }\n\n &__gradient-wrapper {\n display: flex;\n gap: 10px;\n }\n\n &__color-area {\n position: relative;\n width: 216px;\n height: 167px;\n flex-shrink: 0;\n }\n\n &__color-canvas {\n position: absolute;\n inset: 0;\n border-radius: 2px;\n cursor: crosshair;\n }\n\n &__color-indicator {\n position: absolute;\n width: 5px;\n height: 5px;\n border-radius: 2px;\n background: #383f47;\n transform: translate(-50%, -50%);\n pointer-events: none;\n border: 1px solid white;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);\n }\n\n &__hue-wrapper {\n position: relative;\n width: 20px;\n height: 167px;\n flex-shrink: 0;\n }\n\n &__hue-slider {\n position: absolute;\n left: 2px;\n top: 0;\n width: 16px;\n height: 100%;\n border-radius: 12px;\n cursor: pointer;\n background: linear-gradient(\n to bottom,\n #ff0000 0%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n &__hue-indicator {\n position: absolute;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n width: 20px;\n height: 7px;\n border-radius: 25px;\n border: 1px solid #7d7d7d;\n background: white;\n pointer-events: none;\n }\n\n &__opacity-wrapper {\n position: relative;\n width: 216px;\n height: 20px;\n }\n\n &__opacity-slider {\n position: absolute;\n left: 0;\n top: 2px;\n width: 100%;\n height: 16px;\n border-radius: 48px;\n cursor: pointer;\n overflow: visible;\n }\n\n &__opacity-checkerboard {\n position: absolute;\n inset: 0;\n border-radius: 48px;\n background-image: repeating-conic-gradient(#dcdee6 0% 25%, white 0% 50%);\n background-size: 8px 8px;\n z-index: 1;\n }\n\n &__opacity-gradient {\n position: absolute;\n inset: 0;\n border-radius: 48px;\n z-index: 2;\n }\n\n &__opacity-handle {\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%) rotate(90deg);\n width: 20px;\n height: 7px;\n border-radius: 25px;\n border: 1px solid #7d7d7d;\n background: white;\n pointer-events: none;\n z-index: 10;\n }\n\n &__hex-input-wrapper {\n width: 216px;\n }\n\n &__preset-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n &__no-color {\n width: 14px;\n height: 14px;\n border-radius: 2px;\n border: $border_solid;\n background: white;\n cursor: pointer;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: border-color 0.2s;\n\n &:hover {\n border-color: #666;\n }\n\n :deep(svg) {\n fill: #495366;\n }\n }\n\n &__save-button {\n width: 14px;\n height: 14px;\n border-radius: 2px;\n border: 2px dashed #e1e1e1;\n background: transparent;\n cursor: pointer;\n flex-shrink: 0;\n transition: border-color 0.2s;\n\n &:hover {\n border-color: #666;\n }\n }\n}\n</style>\n","import type { DirectiveBinding, Ref } from 'vue';\n\ninterface ClickOutsideElement extends HTMLElement {\n clickOutsideEvent?: (event: Event) => void;\n clickOutsideCapture?: boolean;\n}\n\ntype DirectiveType = {\n handler: () => void;\n exclude?: Ref<HTMLElement | undefined>[];\n capture?: boolean;\n};\n\nexport default {\n mounted(el: ClickOutsideElement, binding: DirectiveBinding<DirectiveType>) {\n el.clickOutsideEvent = (event: Event) => {\n const excludeElements = (binding.value.exclude || [])\n .filter(el => el.value)\n .map(el => el.value);\n const isClickInside = [el, ...excludeElements].some(element => {\n return element && (element === event.target || element.contains(event.target as Node));\n });\n\n if (!isClickInside) {\n binding.value.handler();\n }\n };\n\n // Use capture phase if specified, otherwise use bubble phase (default)\n const useCapture = binding.value.capture ?? false;\n\n el.clickOutsideCapture = useCapture;\n\n document.addEventListener('click', el.clickOutsideEvent, useCapture);\n },\n unmounted(el: ClickOutsideElement) {\n if (el.clickOutsideEvent) {\n const useCapture = el.clickOutsideCapture ?? false;\n\n document.removeEventListener('click', el.clickOutsideEvent, useCapture);\n }\n },\n};\n","const isFuzzyMatch = (choiceValue: string, searchTerm: string): boolean => {\n let searchIndex = 0;\n for (const char of choiceValue) {\n if (char.toLowerCase() === searchTerm[searchIndex]?.toLowerCase()) {\n searchIndex++;\n }\n if (searchIndex === searchTerm.length) {\n return true;\n }\n }\n return false;\n};\n\n\nexport const fuzzySearch = <T>(\n choices: T[],\n key: keyof T,\n searchTerm: string,\n): T[] => {\n if (!searchTerm.trim()) {\n return choices;\n }\n\n const normalizedSearchTerm = searchTerm.toLowerCase();\n\n return choices\n .filter(choice => {\n const value = String(choice[key]);\n\n return isFuzzyMatch(value.toLowerCase(), normalizedSearchTerm)\n })\n .sort((a, b) => {\n const aValue = String(a[key]).toLowerCase();\n const bValue = String(b[key]).toLowerCase();\n\n if (aValue === normalizedSearchTerm) return -1;\n if (bValue === normalizedSearchTerm) return 1;\n\n if (aValue.startsWith(normalizedSearchTerm) && !bValue.startsWith(normalizedSearchTerm))\n return -1;\n if (!aValue.startsWith(normalizedSearchTerm) && bValue.startsWith(normalizedSearchTerm))\n return 1;\n\n return aValue.length - bValue.length;\n });\n};\n","<script lang=\"ts\" setup>\nimport { ref, computed, type StyleValue, onMounted, reactive, watch } from 'vue';\nimport clickOutside from '@/directives/clickOutside';\nimport { fuzzySearch } from '@/utils/search';\nimport styles from './Dropdown.module.scss';\n\nconst vClickOutside = clickOutside;\n\ninterface MenuItem {\n text: string;\n value: string;\n}\n\ninterface DropdownProps {\n id: string;\n label?: string;\n modelValue?: string;\n menuHeight?: number;\n placeholder?: string;\n addable?: boolean;\n addButtonText?: string;\n searchable?: boolean;\n searchPlaceHolder?: string;\n items: MenuItem[];\n validateAddItem?: (item: string, items: MenuItem[]) => string | null;\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'add-error', error: string): void;\n (e: 'item-added', item: MenuItem): void;\n (e: 'select-item', item: MenuItem): void;\n}\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n menuHeight: 154,\n searchable: false,\n addable: false,\n modelValue: '',\n validateAddItem: () => null,\n});\n\nconst emit = defineEmits<Emits>();\nconst dropdownRef = ref<HTMLDivElement>();\nconst menuRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst selectedItem = ref<MenuItem | null>(null);\nconst searchQuery = ref('');\nconst errorMessage = ref<string | null>(null);\nconst menuPosition = ref({ x: 0, y: 0, width: 0, shouldOpenUp: false, height: props.menuHeight });\nconst filteredItems = reactive([...props.items]);\nconst allItems = reactive([...props.items]);\n\nconst calculateMenuPosition = () => {\n if (!dropdownRef.value) {\n return;\n }\n\n const { offsetTop: top, offsetLeft: left, offsetWidth: width } = dropdownRef.value;\n const viewportHeight = window.innerHeight;\n const bottom = top + dropdownRef.value.offsetHeight;\n const shouldOpenUp = bottom + props.menuHeight > viewportHeight;\n\n menuPosition.value = {\n x: left + window.scrollX,\n y: shouldOpenUp ? top + window.scrollY : bottom + window.scrollY,\n width,\n shouldOpenUp,\n height: props.menuHeight,\n };\n};\n\nconst toggleMenu = () => {\n calculateMenuPosition();\n isOpen.value = !isOpen.value;\n};\n\nconst resetSettings = () => {\n errorMessage.value = null;\n searchQuery.value = '';\n filteredItems.splice(0, filteredItems.length, ...allItems);\n};\n\nconst closeMenu = () => {\n isOpen.value = false;\n\n resetSettings();\n};\n\nconst selectItem = (item: MenuItem) => {\n selectedItem.value = item;\n\n emit('select-item', item);\n emit('update:modelValue', item.value);\n\n closeMenu();\n};\n\nconst addItem = () => {\n const query = searchQuery.value.trim();\n const error = props.validateAddItem(query, allItems);\n\n if (error) {\n errorMessage.value = error;\n\n emit('add-error', error);\n\n return;\n }\n\n const newItem: MenuItem = {\n text: query,\n value: query,\n };\n\n allItems.push(newItem);\n resetSettings();\n\n emit('item-added', newItem);\n};\n\nconst onSearch = () => {\n const results = fuzzySearch<MenuItem>(allItems, 'text', searchQuery.value);\n\n filteredItems.splice(0, filteredItems.length, ...results);\n};\n\nconst onFocusSearch = () => {\n errorMessage.value = '';\n};\n\nconst menuStyle = computed<Partial<StyleValue>>(() => ({\n top: menuPosition.value.shouldOpenUp ? `${menuPosition.value.y - 10}px` : `${menuPosition.value.y}px`,\n left: `${menuPosition.value.x}px`,\n width: `${menuPosition.value.width}px`,\n height: `${props.menuHeight}px`,\n}));\n\nonMounted(() => {\n calculateMenuPosition();\n\n if (props.modelValue) {\n const defaultItem = allItems.find(item => item.value === props.modelValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nconst selectedValue = computed(() => (selectedItem.value ? selectedItem.value.text : ''));\n\nwatch(() => props.modelValue, newValue => {\n if (selectedItem.value?.value !== newValue) {\n const defaultItem = allItems.find(item => item.value === newValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nwatch(\n () => props.items,\n newItems => {\n allItems.splice(0, allItems.length, ...newItems);\n filteredItems.splice(0, filteredItems.length, ...newItems);\n },\n { deep: true }\n);\n\nconst clickOutsideTarget = ref({ handler: closeMenu, exclude: [dropdownRef, menuRef] });\n</script>\n\n<template>\n <div\n ref=\"dropdownRef\"\n :class=\"styles.dropdown\">\n <label\n v-if=\"label\"\n :class=\"styles.dropdown__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <button\n :class=\"[\n styles.dropdown__valueContent, {\n [styles['dropdown__valueContent--open']]: isOpen,\n },\n ]\"\n @click=\"toggleMenu\">\n <span :class=\"styles.dropdown__value\">\n {{ selectedValue }}\n </span>\n <span\n v-if=\"placeholder && !selectedValue\"\n :class=\"styles.dropdown__placeholder\">\n {{ placeholder }}\n </span>\n <svg\n fill=\"none\"\n height=\"17\"\n viewBox=\"0 0 16 17\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n :class=\"styles.dropdown__arrowIcon\">\n <path\n d=\"M8 11.2021L4.5359 6.70215L11.4641 6.70215L8 11.2021Z\"\n fill=\"#91949F\" />\n </svg>\n </button>\n </div>\n\n <div\n v-show=\"isOpen\"\n ref=\"menuRef\"\n :class=\"styles.menu\"\n :style=\"menuStyle\"\n v-click-outside=\"clickOutsideTarget\"\n @click.prevent>\n <div\n v-if=\"props.searchable\"\n :class=\"styles.menu__searchContainer\">\n <div :class=\"styles.menu__searchInputWrap\">\n <input\n type=\"text\"\n :class=\"[\n styles.menu__searchInput, {\n [styles['menu__searchInput--error']]: errorMessage,\n },\n ]\"\n :placeholder=\"searchPlaceHolder\"\n v-model=\"searchQuery\"\n @focus=\"onFocusSearch\"\n @input=\"onSearch\">\n <p\n v-if=\"errorMessage\"\n :class=\"styles.menu__errorMessage\">\n {{ errorMessage }}\n </p>\n </div>\n <button\n v-if=\"props.addable\"\n :class=\"styles.menu__addButton\"\n @click=\"addItem\">\n {{ addButtonText }}\n </button>\n </div>\n <ul :class=\"styles.menu__itemContainer\">\n <li\n v-for=\"(item, index) in filteredItems\"\n :key=\"`${item.value}-${index}`\"\n :class=\"[\n styles.menu__item, {\n [styles['menu__item--active']]: selectedItem && item.value === selectedItem.value,\n },\n ]\"\n @click=\"selectItem(item)\">\n {{ item.text }}\n </li>\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ninterface InBoxProps {\n border?: string;\n borderRadius?: string;\n borderTriangle?: boolean;\n borderTrianglePosition?: string;\n borderTriangleAlign?: string;\n}\n\nconst props = withDefaults(defineProps<InBoxProps>(), {\n border: '',\n borderRadius: '',\n borderTriangle: false,\n borderTrianglePosition: '',\n borderTriangleAlign: '',\n});\n\nconst boxClass = computed(() => {\n const classes: string[] = [];\n\n if (props.border) {\n classes.push(props.border);\n }\n\n if (props.borderRadius) {\n classes.push(props.borderRadius);\n }\n\n if (props.borderTriangle && props.borderTrianglePosition && props.borderTriangleAlign) {\n classes.push(`in-box_${props.borderTrianglePosition}-${props.borderTriangleAlign}`);\n }\n\n return classes.join(' ');\n});\n</script>\n\n<template>\n <div\n class=\"in-box\"\n :class=\"boxClass\">\n <slot />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-box {\n // Base styles - can be extended with utility classes\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, withDefaults, defineProps } from 'vue';\nimport styles from './InInfoBox.module.scss';\n\nexport interface InInfoBoxProps {\n id: string;\n theme?: 'light' | 'dark';\n variant?: 'information' | 'warning' | 'alert' | 'smart' | 'neutral';\n titleStatus?: boolean;\n titleText?: string;\n descriptionStatus?: boolean;\n descriptionText?: string;\n size?: 'small' | 'medium' | 'large';\n fullWidthContentStatus?: boolean;\n autoSize?: boolean;\n}\n\nconst props = withDefaults(defineProps<InInfoBoxProps>(), {\n theme: 'light',\n variant: 'information',\n titleStatus: true,\n titleText: '',\n descriptionStatus: true,\n descriptionText: '',\n size: 'medium',\n fullWidthContentStatus: false,\n autoSize: false,\n});\n\nconst isDark = computed(() => props.theme === 'dark');\nconst borderColorClass = computed(() => `in-info-box__${props.variant}`);\nconst sizeClass = computed(() => (props.autoSize ? '' : `in-info-box__size-${props.size}`));\nconst textColorClass = computed(() => (isDark.value ? 'inverse' : 'default'));\n</script>\n\n<template>\n <div\n :class=\"[\n styles['in-info-box'],\n isDark ? styles['in-info-box__background-inverse'] : styles['in-info-box__background-default'],\n styles[sizeClass],\n styles[borderColorClass],\n ]\">\n <div\n :class=\"[\n styles['in-info-box__container'],\n { [styles['in-info-box__container-full-width']]: fullWidthContentStatus },\n ]\">\n <div\n v-if=\"titleStatus\"\n :class=\"[\n styles['in-info-box__heading-wrapper'],\n { [styles['in-info-box__heading-wrapper-full-width']]: fullWidthContentStatus },\n ]\">\n <div\n :class=\"[\n styles['in-info-box__heading'],\n styles[`in-info-box__heading-${textColorClass}`],\n { [styles['in-info-box__heading-full-width']]: fullWidthContentStatus },\n ]\"\n v-html=\"titleText\" />\n <div\n v-if=\"titleStatus && descriptionStatus\"\n :class=\"[\n styles['in-info-box__heading-details'],\n styles[`in-info-box__heading-details-${textColorClass}`],\n ]\"\n v-html=\"descriptionText\" />\n </div>\n <div :class=\"styles['in-info-box__content']\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type {\n CascadingListItem,\n CascadingMenuItem,\n CascadingMenuProps,\n CascadingSubList,\n VirtualAnchor,\n} from './types';\nimport { autoUpdate, flip, offset, shift, size, useFloating } from '@floating-ui/vue';\nimport { computed, onBeforeUnmount, ref, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { fuzzySearch } from '@/utils/search';\n\nconst props = withDefaults(defineProps<CascadingMenuProps>(), {\n width: 220,\n listWidth: 240,\n listMaxHeight: 400,\n menuMaxHeight: undefined,\n loadingText: '',\n menuStyle: () => ({}),\n listStyle: () => ({}),\n teleportTarget: 'body',\n submenuPlacement: 'right',\n searchable: false,\n searchPlaceholder: 'Search',\n emptySearchText: 'No Search Result',\n loading: false,\n selectedItemId: null,\n selectedSubItemId: null,\n menuTestId: undefined,\n listTestId: undefined,\n searchInputId: undefined,\n});\n\ninterface Events {\n (e: 'update:open', value: boolean): void;\n (e: 'item-click', itemId: string): void;\n (e: 'item-expand', itemId: string): void;\n (e: 'select', payload: { itemId: string; subItemId: string }): void;\n (e: 'update:search-query', value: string): void;\n}\n\nconst emit = defineEmits<Events>();\nconst menuRef = ref<HTMLElement | null>(null);\nconst listRef = ref<HTMLElement | null>(null);\nconst activeItemId = ref<string | null>(null);\nconst childSearchQuery = ref('');\nconst parentSearchQuery = ref('');\nconst itemEls = new Map<string, HTMLElement>();\nconst FALLBACK_SEARCH_INPUT_ID = `in-cascading-menu-search-${Math.random().toString(36).slice(2, 9)}`;\nconst parentSearchInputId = computed(() => props.searchInputId ?? FALLBACK_SEARCH_INPUT_ID);\nconst childSearchInputId = computed(() => `${parentSearchInputId.value}-child`);\n\ntype NormalizedEntry =\n | { type: 'group-header'; label: string }\n | { type: 'item'; item: CascadingMenuItem };\n\nconst normalizedEntries = computed<NormalizedEntry[]>(() => props.items.flatMap<NormalizedEntry>(entry => {\n if ('kind' in entry && entry.kind === 'group') {\n return [\n { type: 'group-header', label: entry.label },\n ...entry.items.map<NormalizedEntry>(item => ({ type: 'item', item })),\n ];\n }\n\n return [{ type: 'item', item: entry as CascadingMenuItem }];\n}));\n\nconst flatItems = computed<CascadingMenuItem[]>(() => normalizedEntries.value\n .filter((e): e is { type: 'item'; item: CascadingMenuItem } => e.type === 'item')\n .map(e => e.item));\n\nconst isGlobalSearchMode = computed(() => props.searchable);\nconst hasActiveParentSearch = computed(() => isGlobalSearchMode.value && parentSearchQuery.value.trim().length > 0);\n\nconst menuSizeStyle = computed(() => {\n const style: Record<string, string> = {\n width: `${props.width}px`,\n maxWidth: `${props.width}px`,\n };\n\n if (props.menuMaxHeight) {\n style.maxHeight = `${props.menuMaxHeight}px`;\n }\n\n return style;\n});\nconst listSizeStyle = computed(() => ({ width: `${props.listWidth}px` }));\n\nconst activeItem = computed<CascadingMenuItem | null>(() => {\n if (!activeItemId.value) {\n return null;\n }\n\n return flatItems.value.find(i => i.id === activeItemId.value) ?? null;\n});\n\nconst activeSubList = computed<CascadingSubList | null>(() => activeItem.value?.subList ?? null);\n\nconst activeItemEl = computed<HTMLElement | null>(() => {\n if (!activeItemId.value) {\n return null;\n }\n\n return itemEls.get(activeItemId.value) ?? null;\n});\n\nconst showChildPanel = computed(() => props.open && !hasActiveParentSearch.value && activeSubList.value !== null);\nconst menuAnchorRef = computed(() => props.anchor as HTMLElement | VirtualAnchor | null);\n\nconst { floatingStyles: menuFloatingStyles } = useFloating(menuAnchorRef, menuRef, {\n placement: 'bottom-start',\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [offset(3), flip(), shift({ padding: 8 })],\n});\n\nconst isLeftPlacement = computed(() => props.submenuPlacement === 'left');\n\ntype ListPlacement = 'right-start' | 'left-start';\n\nconst listPlacement = computed<ListPlacement>(() => (isLeftPlacement.value ? 'left-start' : 'right-start'));\nconst listFallback = computed<ListPlacement[]>(() => (isLeftPlacement.value ? ['right-start'] : ['left-start']));\n\nconst listMiddleware = computed(() => [\n offset({ mainAxis: 0, crossAxis: -8 }),\n flip({ fallbackPlacements: listFallback.value }),\n shift({ padding: 8 }),\n size({\n apply ({ availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${Math.min(availableHeight - 8, props.listMaxHeight)}px`,\n });\n },\n }),\n]);\n\nconst { floatingStyles: listFloatingStyles } = useFloating(activeItemEl, listRef, {\n placement: listPlacement,\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: listMiddleware,\n});\n\nconst childListItems = computed<CascadingListItem[]>(() => {\n if (!activeSubList.value) {\n return [];\n }\n\n if (!activeSubList.value.searchable) {\n return activeSubList.value.items;\n }\n\n return fuzzySearch<CascadingListItem>(activeSubList.value.items, 'label', childSearchQuery.value);\n});\n\ninterface FlatSection {\n parentId: string;\n parentLabel: string;\n items: CascadingListItem[];\n}\n\nconst flatSections = computed<FlatSection[]>(() => {\n if (!hasActiveParentSearch.value) {\n return [];\n }\n\n const query = parentSearchQuery.value;\n\n const collectFromItem = (item: CascadingMenuItem): FlatSection | null => {\n if (!item.subList) {\n return null;\n }\n\n const matched = fuzzySearch<CascadingListItem>(item.subList.items, 'label', query);\n\n if (matched.length === 0) {\n return null;\n }\n\n return { parentId: item.id, parentLabel: item.label, items: matched };\n };\n\n return props.items\n .flatMap<FlatSection | null>(entry => {\n if ('kind' in entry && entry.kind === 'group') {\n return entry.items.map(collectFromItem);\n }\n\n return [collectFromItem(entry as CascadingMenuItem)];\n })\n .filter((section): section is FlatSection => section !== null);\n});\n\nconst flatSectionsEmpty = computed(() => hasActiveParentSearch.value && flatSections.value.length === 0);\n\nfunction registerItemEl (id: string, el: unknown): void {\n if (el instanceof HTMLElement) {\n itemEls.set(id, el);\n } else {\n itemEls.delete(id);\n }\n}\n\nfunction handleItemHover (item: CascadingMenuItem): void {\n if (hasActiveParentSearch.value) {\n return;\n }\n\n const wasActive = activeItemId.value === item.id;\n\n activeItemId.value = item.id;\n childSearchQuery.value = '';\n\n if (item.subList && !wasActive) {\n emit('item-expand', item.id);\n }\n}\n\nfunction handleItemClick (item: CascadingMenuItem): void {\n if (item.subList) {\n activeItemId.value = item.id;\n\n return;\n }\n\n emit('item-click', item.id);\n}\n\nfunction handleListItemClick (parentId: string, listItem: CascadingListItem): void {\n if (listItem.disabled) {\n return;\n }\n\n emit('select', { itemId: parentId, subItemId: listItem.id });\n}\n\nfunction handleChildListItemClick (listItem: CascadingListItem): void {\n if (!activeItem.value) {\n return;\n }\n\n handleListItemClick(activeItem.value.id, listItem);\n}\n\nfunction handleParentSearchUpdate (value: string | number): void {\n const next = String(value);\n\n parentSearchQuery.value = next;\n activeItemId.value = null;\n childSearchQuery.value = '';\n emit('update:search-query', next);\n}\n\nfunction handleChildSearchUpdate (value: string | number): void {\n childSearchQuery.value = String(value);\n}\n\nfunction isInsideAnyLayer (target: Node | null): boolean {\n if (!target) {\n return false;\n }\n\n if (menuRef.value?.contains(target) || listRef.value?.contains(target)) {\n return true;\n }\n\n const { anchor } = props;\n\n if (anchor && 'contains' in anchor && typeof (anchor as Node).contains === 'function') {\n return (anchor as Node).contains(target);\n }\n\n return false;\n}\n\nfunction handleDocumentPointerDown (event: PointerEvent): void {\n if (!props.open) {\n return;\n }\n\n if (isInsideAnyLayer(event.target as Node | null)) {\n return;\n }\n\n emit('update:open', false);\n}\n\nfunction handleWindowKeyDown (event: KeyboardEvent): void {\n if (!props.open || event.key !== 'Escape') {\n return;\n }\n\n if (parentSearchQuery.value || childSearchQuery.value) {\n event.stopPropagation();\n parentSearchQuery.value = '';\n childSearchQuery.value = '';\n activeItemId.value = null;\n\n return;\n }\n\n emit('update:open', false);\n}\n\nwatch(() => props.open, isOpen => {\n if (isOpen) {\n document.addEventListener('pointerdown', handleDocumentPointerDown, true);\n window.addEventListener('keydown', handleWindowKeyDown);\n } else {\n document.removeEventListener('pointerdown', handleDocumentPointerDown, true);\n window.removeEventListener('keydown', handleWindowKeyDown);\n activeItemId.value = null;\n childSearchQuery.value = '';\n parentSearchQuery.value = '';\n itemEls.clear();\n }\n}, { immediate: true });\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', handleDocumentPointerDown, true);\n window.removeEventListener('keydown', handleWindowKeyDown);\n});\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <div\n v-if=\"open\"\n ref=\"menuRef\"\n class=\"in-cascading-menu\"\n role=\"menu\"\n :data-testid=\"menuTestId\"\n :style=\"[menuFloatingStyles, menuSizeStyle, menuStyle as Record<string, string>]\">\n <div\n v-if=\"searchable\"\n class=\"in-cascading-menu__search\">\n <InBasicTextInput\n :id=\"parentSearchInputId\"\n right-icon-status\n name=\"cascading-menu-search\"\n right-icon-name=\"line-search\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"parentSearchQuery\"\n :placeholder-text=\"searchPlaceholder\"\n @update:model-value=\"handleParentSearchUpdate\" />\n </div>\n\n <div\n class=\"in-cascading-menu__body\"\n :class=\"{ 'is-flat-search': hasActiveParentSearch }\">\n <div\n v-if=\"loading\"\n class=\"in-cascading-menu__state in-cascading-menu__state--loading\">\n <Icon\n class=\"in-cascading-menu__spinner-icon\"\n name=\"line-spinner\"\n :size=\"24\" />\n <span\n v-if=\"loadingText\"\n class=\"in-cascading-menu__state-text\">\n {{ loadingText }}\n </span>\n </div>\n\n <template v-else-if=\"hasActiveParentSearch\">\n <div\n v-if=\"flatSectionsEmpty\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-no-search-result\"\n :size=\"40\" />\n <span class=\"in-cascading-menu__state-text\">{{ emptySearchText }}</span>\n </div>\n <div\n v-else\n class=\"in-cascading-menu__flat\">\n <section\n v-for=\"section in flatSections\"\n :key=\"section.parentId\"\n class=\"in-cascading-menu__flat-group\">\n <h4 class=\"in-cascading-menu__group-header\">\n {{ section.parentLabel }}\n </h4>\n <button\n v-for=\"listItem in section.items\"\n :key=\"`${section.parentId}-${listItem.id}`\"\n class=\"in-cascading-menu__list-item\"\n role=\"menuitem\"\n type=\"button\"\n :class=\"{\n 'is-disabled': listItem.disabled,\n 'is-selected': selectedSubItemId === listItem.id,\n }\"\n :data-testid=\"listItem.testId\"\n :disabled=\"listItem.disabled\"\n @click=\"handleListItemClick(section.parentId, listItem)\">\n <span class=\"in-cascading-menu__list-item-content\">\n <span class=\"in-cascading-menu__list-item-label\">{{ listItem.label }}</span>\n <span\n v-if=\"listItem.subtitle\"\n class=\"in-cascading-menu__list-item-subtitle\">\n {{ listItem.subtitle }}\n </span>\n </span>\n <span\n v-if=\"listItem.meta\"\n class=\"in-cascading-menu__list-item-meta\">\n {{ listItem.meta }}\n </span>\n </button>\n </section>\n </div>\n </template>\n\n <template v-else>\n <template\n v-for=\"(entry, index) in normalizedEntries\"\n :key=\"`e-${index}`\">\n <h4\n v-if=\"entry.type === 'group-header'\"\n class=\"in-cascading-menu__group-header\">\n {{ entry.label }}\n </h4>\n <button\n v-else\n :ref=\"el => registerItemEl(entry.item.id, el)\"\n class=\"in-cascading-menu__item\"\n role=\"menuitem\"\n type=\"button\"\n :class=\"{\n 'is-active': activeItemId === entry.item.id,\n 'is-selected': selectedItemId === entry.item.id,\n }\"\n :data-item-id=\"entry.item.id\"\n :data-testid=\"entry.item.testId\"\n @click=\"handleItemClick(entry.item)\"\n @focus=\"handleItemHover(entry.item)\"\n @mouseenter=\"handleItemHover(entry.item)\">\n <span class=\"in-cascading-menu__item-label\">{{ entry.item.label }}</span>\n <Icon\n v-if=\"entry.item.hasChildren || entry.item.subList\"\n class=\"in-cascading-menu__item-chevron\"\n name=\"line-chevron-small-down\"\n :size=\"24\" />\n </button>\n </template>\n </template>\n </div>\n </div>\n\n <div\n v-if=\"showChildPanel && activeSubList\"\n ref=\"listRef\"\n class=\"in-cascading-list\"\n role=\"dialog\"\n :data-testid=\"listTestId ?? activeSubList.testId\"\n :style=\"[listFloatingStyles, listSizeStyle, listStyle as Record<string, string>]\">\n <div\n v-if=\"activeSubList.searchable\"\n class=\"in-cascading-menu__search\">\n <InBasicTextInput\n :id=\"childSearchInputId\"\n right-icon-status\n name=\"cascading-menu-child-search\"\n right-icon-name=\"line-search\"\n type=\"text\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"childSearchQuery\"\n :placeholder-text=\"activeSubList.searchPlaceholder || 'Search'\"\n @update:model-value=\"handleChildSearchUpdate\" />\n </div>\n <div class=\"in-cascading-list__body\">\n <div\n v-if=\"activeSubList.loading\"\n class=\"in-cascading-menu__state in-cascading-menu__state--loading\">\n <Icon\n class=\"in-cascading-menu__spinner-icon\"\n name=\"line-spinner\"\n :size=\"24\" />\n <span\n v-if=\"loadingText\"\n class=\"in-cascading-menu__state-text\">\n {{ loadingText }}\n </span>\n </div>\n <div\n v-else-if=\"activeSubList.error\"\n class=\"in-cascading-menu__state in-cascading-menu__state--error\">\n <span class=\"in-cascading-menu__state-text in-cascading-menu__state-text--error\">\n {{ activeSubList.error }}\n </span>\n </div>\n <div\n v-else-if=\"childListItems.length === 0 && childSearchQuery\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-no-search-result\"\n :size=\"40\" />\n <span class=\"in-cascading-menu__state-text\">\n {{ activeSubList.noResultText || 'No Search Result' }}\n </span>\n </div>\n <div\n v-else-if=\"childListItems.length === 0\"\n class=\"in-cascading-menu__state in-cascading-menu__state--empty\">\n <Icon\n name=\"line-empty-box\"\n :size=\"40\" />\n <span\n v-if=\"activeSubList.emptyText\"\n class=\"in-cascading-menu__state-text\">\n {{ activeSubList.emptyText }}\n </span>\n </div>\n <ul\n v-else\n class=\"in-cascading-list__items\"\n role=\"listbox\">\n <li\n v-for=\"listItem in childListItems\"\n :key=\"listItem.id\"\n class=\"in-cascading-menu__list-item\"\n role=\"option\"\n :class=\"{\n 'is-disabled': listItem.disabled,\n 'is-selected': selectedSubItemId === listItem.id,\n }\"\n :data-testid=\"listItem.testId\"\n @click=\"handleChildListItemClick(listItem)\"\n @mousedown.prevent>\n <span class=\"in-cascading-menu__list-item-content\">\n <span class=\"in-cascading-menu__list-item-label\">{{ listItem.label }}</span>\n <span\n v-if=\"listItem.subtitle\"\n class=\"in-cascading-menu__list-item-subtitle\">\n {{ listItem.subtitle }}\n </span>\n </span>\n <span\n v-if=\"listItem.meta\"\n class=\"in-cascading-menu__list-item-meta\">\n {{ listItem.meta }}\n </span>\n </li>\n </ul>\n </div>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\" scoped>\n$elevation: 0 4px 12px 0 rgba(57, 57, 57, 0.15);\n$radius: 4px;\n$text-default: #292929;\n$text-muted: #666666;\n$primary: #0a2ecc;\n$selected-bg: #f1f3fe;\n$selected-bg-hover: #dae1fb;\n$hover-bg: #f5f5f5;\n$error: #dc2a2a;\n$focus-shadow: #b5c1f1;\n\n.in-cascading-menu {\n z-index: 2147483647;\n background: #ffffff;\n border-radius: $radius;\n box-shadow: $elevation;\n font-family: 'Figtree', sans-serif;\n color: $text-default;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n &__search {\n flex-shrink: 0;\n padding: 8px;\n background: #ffffff;\n position: sticky;\n top: 0;\n z-index: 1;\n\n :deep(.in-basic-text-input-wrapper__input-field) {\n box-shadow: none !important;\n\n &:hover {\n border-color: #dcdee6 !important;\n }\n\n &:focus,\n &:focus-within,\n &:focus-visible {\n border-color: $primary !important;\n }\n }\n\n :deep(.in-basic-text-input-wrapper:focus-within .in-basic-text-input-wrapper__input-field) {\n border-color: $primary !important;\n }\n }\n\n &__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 8px 0;\n\n &.is-flat-search {\n padding-top: 0;\n }\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(57, 57, 57, 0.25);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(57, 57, 57, 0.4);\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n scrollbar-width: thin;\n scrollbar-color: rgba(57, 57, 57, 0.25) transparent;\n }\n\n &__item {\n display: flex;\n align-items: center;\n width: 100%;\n border: none;\n background: transparent;\n padding: var(--in-cascading-menu-item-padding, 4px 16px);\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n color: $text-default;\n transition:\n background 0.15s,\n color 0.15s;\n\n &:hover,\n &.is-active {\n background: $hover-bg;\n }\n\n &.is-selected,\n &.is-selected:hover,\n &.is-selected.is-active {\n color: $primary;\n }\n\n &.is-selected {\n background: $selected-bg;\n }\n\n &.is-selected:hover,\n &.is-selected.is-active {\n background: $selected-bg-hover;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px $focus-shadow;\n }\n }\n\n &__item.is-selected &__item-label,\n &__item.is-selected &__item-chevron {\n color: $primary !important;\n }\n\n &__item-label {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__item-chevron {\n flex: 0 0 auto;\n margin-left: 8px;\n margin-right: -8px;\n transform: rotate(-90deg);\n color: #666 !important;\n }\n\n &__group-header {\n margin: 0;\n padding: 8px 16px;\n background: #ffffff;\n font-family: 'Figtree', sans-serif;\n font-size: 13px;\n font-weight: 600;\n color: $text-muted;\n line-height: 20px;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n &__flat {\n display: flex;\n flex-direction: column;\n }\n\n &__flat-group + &__flat-group {\n padding-top: 0;\n }\n\n &__list-item {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 12px;\n width: 100%;\n border: none;\n background: transparent;\n padding: var(--in-cascading-menu-list-item-padding, 4px 16px);\n cursor: pointer;\n font-family: inherit;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n color: $text-default;\n text-align: left;\n transition: background 0.15s;\n\n &:hover:not(.is-disabled):not(:disabled) {\n background: $hover-bg;\n }\n\n &.is-selected,\n &.is-selected:hover:not(.is-disabled):not(:disabled) {\n color: $primary;\n }\n\n &.is-selected {\n background: $selected-bg;\n }\n\n &.is-selected:hover:not(.is-disabled):not(:disabled) {\n background: $selected-bg-hover;\n }\n\n &.is-disabled,\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px $focus-shadow;\n }\n }\n\n &__list-item.is-selected &__list-item-content,\n &__list-item.is-selected &__list-item-label,\n &__list-item.is-selected &__list-item-meta,\n &__list-item.is-selected &__list-item-subtitle {\n color: $primary;\n }\n\n &__list-item-content {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n &__list-item-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__list-item-meta {\n flex: 0 0 auto;\n font-size: 13px;\n line-height: 20px;\n color: inherit;\n opacity: 0.75;\n white-space: nowrap;\n }\n\n .is-selected .in-cascading-menu__list-item-meta {\n opacity: 1;\n }\n\n &__list-item-subtitle {\n font-size: 13px;\n line-height: 16px;\n color: $text-muted;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .is-selected .in-cascading-menu__list-item-subtitle {\n color: $primary;\n opacity: 0.85;\n }\n\n &__state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: $text-muted;\n\n :deep(svg) {\n color: $text-muted;\n fill: $text-muted;\n }\n }\n\n &__state-text {\n font-family: 'Figtree', sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: $text-muted;\n line-height: 20px;\n text-align: center;\n\n &--error {\n color: $error;\n }\n }\n\n &__state--error {\n :deep(svg) {\n color: $error;\n fill: $error;\n }\n }\n\n &__spinner-icon {\n animation: in-cascading-menu-spin 0.8s linear infinite;\n }\n}\n\n.in-cascading-list {\n z-index: 2147483647;\n background: #ffffff;\n border-radius: $radius;\n box-shadow: $elevation;\n display: flex;\n flex-direction: column;\n font-family: 'Figtree', sans-serif;\n color: $text-default;\n overflow: hidden;\n\n &__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 8px 0;\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(57, 57, 57, 0.25);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(57, 57, 57, 0.4);\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n scrollbar-width: thin;\n scrollbar-color: rgba(57, 57, 57, 0.25) transparent;\n }\n\n &__items {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n}\n\n@keyframes in-cascading-menu-spin {\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","export function useUid (prefix = 'ui'): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 10)}`;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport { useUid } from '@/utils/uid';\nimport styles from './SearchInput.module.scss';\n\nexport interface SearchInputProps {\n modelValue?: string;\n placeholder?: string;\n size?: 'small' | 'medium';\n clearable?: boolean;\n id?: string;\n name?: string;\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'escape'): void;\n (e: 'clear'): void;\n}\n\nconst props = withDefaults(defineProps<SearchInputProps>(), {\n modelValue: '',\n placeholder: 'Search',\n size: 'small',\n clearable: true,\n id: '',\n name: '',\n});\n\nconst emit = defineEmits<Emits>();\nconst autoUid = useUid('search');\nconst fieldId = computed(() => props.id || autoUid);\nconst fieldName = computed(() => props.name || fieldId.value);\nconst inputRef = ref<InstanceType<typeof InBasicTextInput> | null>(null);\nconst hasValue = computed(() => props.modelValue.length > 0);\n// eslint-disable-next-line @cspell/spellchecker\nconst clearIconName: IconNames = 'line-close-netural';\nconst rightIcon = computed<IconNames>(() => (\n props.clearable && hasValue.value ? clearIconName : 'line-search'\n));\n\nfunction onUpdate (value: string | number): void {\n emit('update:modelValue', String(value));\n}\n\nfunction onKeydown (event: KeyboardEvent): void {\n if (event.key !== 'Escape') {\n return;\n }\n\n event.stopPropagation();\n\n if (props.modelValue) {\n emit('update:modelValue', '');\n emit('clear');\n\n return;\n }\n\n emit('escape');\n}\n\nfunction onRightIconClick (): void {\n if (!props.clearable || !hasValue.value) {\n return;\n }\n\n emit('update:modelValue', '');\n emit('clear');\n}\n\nfunction focus (): void {\n const native = inputRef.value?.$el?.querySelector('input');\n\n native?.focus();\n}\n\ndefineExpose({ focus });\n</script>\n\n<template>\n <div\n :class=\"[styles.root, size === 'medium' && styles.sizeMedium]\"\n @keydown=\"onKeydown\">\n <InBasicTextInput\n :id=\"fieldId\"\n ref=\"inputRef\"\n right-icon-status\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"modelValue\"\n :name=\"fieldName\"\n :placeholder-text=\"placeholder\"\n :right-icon-name=\"rightIcon\"\n @right-icon-click=\"onRightIconClick\"\n @update:model-value=\"onUpdate\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport styles from './Typography.module.scss';\n\nexport type TypographyVariant =\n | 'heading'\n | 'title'\n | 'body'\n | 'body-default'\n | 'body-muted'\n | 'label'\n | 'detail'\n | 'detail-muted'\n | 'detail-danger'\n | 'section';\n\nexport interface TypographyProps {\n variant?: TypographyVariant;\n as?: string;\n}\n\nconst variantClass: Record<TypographyVariant, string> = {\n heading: styles.heading,\n title: styles.title,\n body: styles.body,\n 'body-default': styles.bodyDefault,\n 'body-muted': styles.bodyMuted,\n label: styles.label,\n detail: styles.detail,\n 'detail-muted': styles.detailMuted,\n 'detail-danger': styles.detailDanger,\n section: styles.section,\n};\n\nwithDefaults(defineProps<TypographyProps>(), {\n variant: 'body',\n as: 'span',\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n :class=\"[styles.root, variantClass[variant]]\">\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport { Typography } from '@/components/Typography';\nimport { useUid } from '@/utils/uid';\nimport styles from './SelectField.module.scss';\n\nexport interface SelectFieldProps {\n label?: string;\n placeholder?: string;\n value?: string;\n isOpen?: boolean;\n error?: string;\n helperText?: string;\n disabled?: boolean;\n}\n\ninterface Emits {\n (e: 'toggle'): void;\n}\n\nconst props = withDefaults(defineProps<SelectFieldProps>(), {\n label: '',\n placeholder: '',\n value: '',\n isOpen: false,\n error: '',\n helperText: '',\n disabled: false,\n});\n\nconst emit = defineEmits<Emits>();\nconst uid = useUid('select-field');\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst showError = computed(() => Boolean(props.error));\nconst showPlaceholder = computed(() => !props.value);\nconst displayText = computed(() => props.value || props.placeholder);\n\nfunction handleClick (): void {\n if (props.disabled) {\n return;\n }\n\n emit('toggle');\n}\n\ndefineExpose({ triggerRef });\n</script>\n\n<template>\n <fieldset :class=\"styles.root\">\n <Typography\n v-if=\"label\"\n as=\"label\"\n variant=\"label\"\n :for=\"`${uid}-trigger`\">\n {{ label }}\n </Typography>\n <button\n :id=\"`${uid}-trigger`\"\n ref=\"triggerRef\"\n type=\"button\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-invalid=\"showError\"\n :class=\"[\n styles.trigger,\n {\n [styles.isOpen]: isOpen,\n [styles.hasError]: showError,\n [styles.isDisabled]: disabled,\n },\n ]\"\n :disabled=\"disabled\"\n @click=\"handleClick\">\n <Typography\n :class=\"styles.triggerText\"\n :variant=\"showPlaceholder ? 'body-muted' : 'body-default'\">\n {{ displayText }}\n </Typography>\n <span :class=\"[styles.chevron, { [styles.isOpen]: isOpen }]\">\n <Icon\n color=\"#666666\"\n name=\"dropdown-arrow\"\n :size=\"24\" />\n </span>\n </button>\n <div\n v-if=\"showError\"\n role=\"alert\"\n :class=\"styles.message\">\n <Icon\n name=\"filled-error-box-colored\"\n :size=\"16\" />\n <Typography variant=\"label\">\n {{ error }}\n </Typography>\n </div>\n <div\n v-else-if=\"helperText\"\n :class=\"styles.message\">\n <Typography variant=\"detail\">\n {{ helperText }}\n </Typography>\n </div>\n </fieldset>\n</template>\n","<script setup lang=\"ts\">\nimport type { Placement, Strategy } from '@floating-ui/vue';\nimport { autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/vue';\nimport { ref, watch, computed, nextTick, onMounted } from 'vue';\nimport { InBox } from '@/components/InBox';\nimport clickOutside from '@/directives/clickOutside';\n\nconst vClickOutside = clickOutside;\n\ninterface PopoverProps {\n modelValue?: boolean;\n align?: 'left' | 'center' | 'right' | 'left-side' | 'right-side';\n position?: 'bottom' | 'top';\n width?: number;\n positionStrategy?: 'fixed' | 'absolute';\n closeOnClickOutside?: boolean;\n elevated?: boolean;\n // Absolute mode only: opt out of the default `width: 100%` (matching the\n // wrapper). Set when the popover content has its own width and shouldn't\n // be constrained to the trigger element's width.\n fitContent?: boolean;\n gap?: number;\n // CSS selector resolved within the popover wrapper to find the actual measurement anchor.\n // Use when the trigger slot wraps extra chrome (labels, helper text) and the popover should\n // open from a specific child (e.g. just the `<input>`). Defaults to `firstElementChild`.\n anchorSelector?: string;\n}\n\ninterface PopoverEmits {\n (e: 'update:modelValue', value: boolean): void;\n (e: 'open'): void;\n (e: 'close'): void;\n}\n\nconst DEFAULT_GAP = 4;\nconst SHIFT_PADDING = 8;\n\nconst props = withDefaults(defineProps<PopoverProps>(), {\n modelValue: false,\n align: 'left',\n position: 'bottom',\n positionStrategy: 'fixed',\n closeOnClickOutside: false,\n elevated: false,\n fitContent: false,\n gap: DEFAULT_GAP,\n anchorSelector: undefined,\n});\n\nconst emit = defineEmits<PopoverEmits>();\nconst popoverRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\nconst anchorRef = ref<HTMLElement | null>(null);\nconst isOpen = ref(props.modelValue);\n\n// floating-ui measures from this element. Defaults to the trigger root; `anchorSelector` narrows it to a\n// child (e.g. the bare `<input>` inside a labelled trigger) so the popover opens from the field, not the chrome.\nfunction resolveAnchor (): HTMLElement | null {\n const root = popoverRef.value;\n\n if (!root) {\n return null;\n }\n\n const triggerRoot = (root.firstElementChild as HTMLElement | null) ?? root;\n\n if (props.anchorSelector) {\n return triggerRoot.querySelector<HTMLElement>(props.anchorSelector) ?? triggerRoot;\n }\n\n return triggerRoot;\n}\n\n// `position` is the preferred side; `flip()` overrides it when there isn't room. `align` maps to floating-ui\n// alignment (`-start`/`-end`); `*-side` opens the popover beside the trigger with bottom edges aligned.\nconst placement = computed<Placement>(() => {\n if (props.align === 'left-side') {\n return 'left-end';\n }\n\n if (props.align === 'right-side') {\n return 'right-end';\n }\n\n const side = props.position === 'top' ? 'top' : 'bottom';\n\n if (props.align === 'center') {\n return side;\n }\n\n if (props.align === 'right') {\n return `${side}-end`;\n }\n\n return `${side}-start`;\n});\n\nconst strategy = computed<Strategy>(() => (props.positionStrategy === 'fixed' ? 'fixed' : 'absolute'));\nconst middleware = computed(() => [offset(props.gap), flip(), shift({ padding: SHIFT_PADDING })]);\n\nconst { floatingStyles, isPositioned } = useFloating(anchorRef, contentRef, {\n placement,\n strategy,\n middleware,\n whileElementsMounted: autoUpdate,\n});\n\n// Width is independent of placement: absolute mode defaults to the trigger width (`100%`) unless `fitContent`;\n// an explicit `width` always wins. Fixed mode has no implicit width (content sizes itself).\nconst sizeStyle = computed<Record<string, string>>(() => {\n const styles: Record<string, string> = {};\n\n if (props.positionStrategy === 'absolute' && !props.fitContent) {\n styles.width = '100%';\n }\n\n if (props.width) {\n styles.width = `${props.width}px`;\n styles.minWidth = `${props.width}px`;\n }\n\n return styles;\n});\n\nonMounted(() => {\n anchorRef.value = resolveAnchor();\n});\n\nwatch(\n () => props.modelValue,\n newValue => {\n isOpen.value = newValue;\n\n if (newValue) {\n nextTick(() => {\n anchorRef.value = resolveAnchor();\n });\n }\n }\n);\n\nconst toggle = () => {\n isOpen.value = !isOpen.value;\n emit('update:modelValue', isOpen.value);\n\n if (isOpen.value) {\n emit('open');\n nextTick(() => {\n anchorRef.value = resolveAnchor();\n });\n } else {\n emit('close');\n }\n};\n\nconst close = () => {\n isOpen.value = false;\n\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst clickOutsideTarget = computed(() => ({\n handler: close,\n exclude: [popoverRef, contentRef],\n capture: props.closeOnClickOutside,\n}));\n\ndefineExpose({\n isOpen,\n toggle,\n close,\n});\n</script>\n\n<template>\n <div\n ref=\"popoverRef\"\n class=\"popover\">\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :toggle=\"toggle\" />\n <div\n v-if=\"isOpen\"\n ref=\"contentRef\"\n class=\"popover__content\"\n :class=\"{\n 'popover__content--visible': isPositioned,\n 'popover__content--elevated': elevated,\n }\"\n :style=\"[floatingStyles, sizeStyle]\"\n v-click-outside=\"clickOutsideTarget\"\n @click.prevent>\n <InBox>\n <slot />\n </InBox>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.popover {\n position: relative;\n display: inline-block;\n\n &__content {\n z-index: 10000;\n visibility: hidden;\n\n &--visible {\n visibility: visible;\n }\n\n &--elevated {\n background: $overlay_color_background_default;\n border: $border_solid;\n border-radius: $radius_container_medium;\n box-shadow: $shadow_elevation;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { MenuItem } from '../DropdownMenu/types';\nimport { ref, watch, onMounted } from 'vue';\nimport InBasicTextInput from '@/components/InBasicTextInput/InBasicTextInput.vue';\nimport { Popover } from '@/components/Popover';\nimport { Button } from '@/index';\nimport { fuzzySearch } from '@/utils/search';\n\ninterface InDropdownMenuProps {\n modelValue?: string;\n items: MenuItem[];\n searchable?: boolean;\n searchPlaceholder?: string;\n addable?: boolean;\n addButtonText?: string;\n validateAddItem?: (item: string, items: MenuItem[]) => string | null;\n showSelectedIcon?: boolean;\n rotateArrow?: boolean;\n // Used in CSS via v-bind for max-height calculation\n // eslint-disable-next-line vue/no-unused-properties\n menuHeight?: number;\n width?: number;\n mode?: 'primary' | 'smart';\n anchorSelector?: string;\n position?: 'bottom' | 'top';\n}\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'add-error', error: string): void;\n (e: 'item-added', item: MenuItem): void;\n (e: 'select-item', item: MenuItem): void;\n}\n\nconst props = withDefaults(defineProps<InDropdownMenuProps>(), {\n menuHeight: 154,\n searchable: false,\n addable: false,\n modelValue: '',\n searchPlaceholder: 'Search',\n addButtonText: 'Add',\n validateAddItem: () => null,\n showSelectedIcon: false,\n rotateArrow: false,\n mode: 'primary',\n anchorSelector: undefined,\n position: 'bottom',\n});\n\nconst emit = defineEmits<Emits>();\nconst isOpen = ref(false);\nconst selectedItem = ref<MenuItem | null>(null);\nconst searchQuery = ref('');\nconst errorMessage = ref<string | null>(null);\nconst filteredItems = ref<MenuItem[]>([...props.items]);\nconst allItems = ref<MenuItem[]>([...props.items]);\n\nconst handleToggle = () => {\n isOpen.value = !isOpen.value;\n};\n\nconst resetSettings = () => {\n errorMessage.value = null;\n searchQuery.value = '';\n filteredItems.value = [...allItems.value];\n};\n\nwatch(\n () => isOpen.value,\n newValue => {\n if (!newValue) {\n resetSettings();\n }\n }\n);\n\nconst closeMenu = () => {\n isOpen.value = false;\n resetSettings();\n};\n\nconst selectItem = (item: MenuItem) => {\n selectedItem.value = item;\n\n emit('select-item', item);\n emit('update:modelValue', item.value);\n\n closeMenu();\n};\n\nconst addItem = () => {\n const query = searchQuery.value.trim();\n const error = props.validateAddItem(query, allItems.value);\n\n if (error) {\n errorMessage.value = error;\n emit('add-error', error);\n\n return;\n }\n\n const newItem: MenuItem = {\n text: query,\n value: query,\n };\n\n allItems.value.push(newItem);\n resetSettings();\n\n emit('item-added', newItem);\n};\n\nconst onSearch = (value: string | number) => {\n searchQuery.value = String(value);\n\n const results = fuzzySearch<MenuItem>(allItems.value, 'text', searchQuery.value);\n\n filteredItems.value = results;\n};\n\nconst onFocusSearch = () => {\n errorMessage.value = null;\n};\n\nonMounted(() => {\n if (props.modelValue) {\n const defaultItem = allItems.value.find(item => item.value === props.modelValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n }\n }\n});\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (selectedItem.value?.value !== newValue) {\n const defaultItem = allItems.value.find(item => item.value === newValue);\n\n if (defaultItem) {\n selectedItem.value = defaultItem;\n } else {\n // Clear selection if no matching item found\n selectedItem.value = null;\n }\n }\n }\n);\n\nwatch(\n () => props.items,\n newItems => {\n allItems.value = [...newItems];\n filteredItems.value = [...newItems];\n },\n { deep: true }\n);\n\ndefineExpose({\n isOpen,\n toggleMenu: handleToggle,\n closeMenu,\n selectedItem,\n});\n</script>\n\n<template>\n <Popover\n class=\"in-dropdown-menu\"\n position-strategy=\"absolute\"\n :position=\"props.position\"\n :anchor-selector=\"anchorSelector\"\n :class=\"{\n 'in-dropdown-menu--open': isOpen,\n 'in-dropdown-menu--rotate-arrow': props.rotateArrow,\n [`in-dropdown-menu--${props.mode}`]: true,\n }\"\n :width=\"props.width\"\n v-model=\"isOpen\">\n <template #trigger=\"{ isOpen: popoverIsOpen }\">\n <slot\n name=\"trigger\"\n :is-open=\"popoverIsOpen\"\n :toggle=\"handleToggle\" />\n </template>\n\n <div\n class=\"in-dropdown-menu__menu\"\n :class=\"[`in-dropdown-menu__menu--${props.mode}`]\"\n @click.prevent>\n <div\n v-if=\"searchable\"\n class=\"in-dropdown-menu__search-container\">\n <InBasicTextInput\n id=\"dropdown-search-input\"\n right-icon-status\n name=\"dropdown-search-input\"\n right-icon-name=\"line-search\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :placeholder-text=\"searchPlaceholder\"\n :state-message=\"errorMessage || ''\"\n :states=\"errorMessage ? 'error' : 'default'\"\n v-model=\"searchQuery\"\n @focus=\"onFocusSearch\"\n @input=\"onSearch\" />\n <Button\n v-if=\"addable\"\n color=\"primary\"\n left-icon-name=\"line-plus-netural\"\n size=\"small\"\n variant=\"text\"\n :label=\"addButtonText\"\n @click=\"addItem\" />\n </div>\n <slot\n v-if=\"filteredItems.length === 0 && searchable\"\n name=\"no-results\" />\n <ul\n v-else\n class=\"in-dropdown-menu__item-container\">\n <li\n v-for=\"(item, index) in filteredItems\"\n :key=\"`${item.value}-${index}`\"\n class=\"in-dropdown-menu__item\">\n <template v-if=\"$slots.item\">\n <div\n class=\"in-dropdown-menu__item-content\"\n :class=\"[\n {\n 'in-dropdown-menu__item--active':\n selectedItem && item.value === selectedItem.value,\n },\n ]\"\n @click=\"selectItem(item)\">\n <slot\n name=\"item\"\n :is-selected=\"selectedItem?.value === item.value\"\n :item=\"item\" />\n </div>\n </template>\n <Button\n v-else\n fill\n class=\"in-dropdown-menu__item-button\"\n color=\"secondary\"\n size=\"small\"\n variant=\"ghost\"\n :class=\"[\n {\n 'in-dropdown-menu__item-button--active':\n selectedItem && item.value === selectedItem.value,\n },\n ]\"\n :label=\"item.text\"\n :right-icon-name=\"\n props.showSelectedIcon && selectedItem?.value === item.value\n ? 'line-check-natural'\n : undefined\n \"\n @click=\"selectItem(item)\" />\n </li>\n </ul>\n </div>\n </Popover>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-dropdown-menu__menu {\n display: flex;\n flex-direction: column;\n background-color: $color_blackAndWhite_white;\n box-shadow: 0px 4px 12px 0px rgba(57, 57, 57, 0.15);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.in-dropdown-menu__search-container {\n border-bottom: 1px solid $color_neutral_100;\n flex-shrink: 0;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.in-dropdown-menu__item-container {\n all: unset;\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: auto;\n flex-grow: 0;\n list-style: none;\n padding: 8px 0;\n margin: 0;\n max-height: v-bind('`${props.menuHeight}px`');\n}\n\n.in-dropdown-menu__item {\n all: unset;\n list-style: none;\n display: block;\n}\n\n.in-dropdown-menu__item-button,\n.in-dropdown-menu__item-content {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 4px 8px !important;\n border-radius: 0 !important;\n min-height: 26px;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s;\n color: $color_gray_800;\n font-family: 'Figtree', sans-serif;\n\n &:hover {\n background-color: $color_gray_100 !important;\n }\n}\n\n.in-dropdown-menu__item-button {\n width: 100%;\n justify-content: flex-start;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:hover {\n background-color: $color_gray_100 !important;\n }\n}\n\n.in-dropdown-menu__menu--primary {\n .in-dropdown-menu__item--active,\n .in-dropdown-menu__item-button--active {\n background-color: #F1F3FE !important;\n color: #0A2ECC !important;\n\n :deep(svg) {\n fill: #0A2ECC;\n }\n }\n}\n\n.in-dropdown-menu__menu--smart {\n .in-dropdown-menu__item--active,\n .in-dropdown-menu__item-button--active {\n background-color: #F0EBFA !important;\n color: #5F24AF !important;\n\n :deep(svg) {\n fill: #5F24AF;\n }\n }\n}\n\n/* Arrow rotation for custom Icon triggers (class=\"dropdown-arrow\") */\n.in-dropdown-menu :deep(.dropdown-arrow) {\n transition: transform 0.2s ease;\n}\n\n.in-dropdown-menu--open :deep(.dropdown-arrow) {\n transform: rotate(180deg);\n}\n\n/* Arrow rotation for InBasicTextInput triggers (opt-in via rotateArrow prop) */\n.in-dropdown-menu--rotate-arrow {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__icon-right) {\n transition: transform 0.2s ease;\n }\n\n &.in-dropdown-menu--open {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__icon-right) {\n transform: rotate(180deg);\n }\n }\n}\n\n/* Focus state for InBasicTextInput triggers when dropdown is open */\n.in-dropdown-menu--open.in-dropdown-menu--primary {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__input-field) {\n border-color: $color_primary_500;\n box-shadow: $shadow_primary;\n }\n}\n\n.in-dropdown-menu--open.in-dropdown-menu--smart {\n :deep(> :not(.popover__content) .in-basic-text-input-wrapper__input-field) {\n border-color: $color_purple_500;\n box-shadow: $shadow_create;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\n\nexport interface TabItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface InTabsProps {\n tabs: TabItem[];\n modelValue?: string;\n disabled?: boolean;\n}\n\ninterface InTabsEmits {\n (e: 'update:modelValue', value: string): void;\n (e: 'change', value: string): void;\n}\n\nconst props = withDefaults(defineProps<InTabsProps>(), {\n modelValue: '',\n disabled: false,\n});\n\nconst emit = defineEmits<InTabsEmits>();\nconst selectedValue = ref<string>(props.modelValue || (props.tabs.length > 0 ? props.tabs[0].value : ''));\n\nconst selectTab = (tab: TabItem) => {\n if (props.disabled || tab.disabled) {\n return;\n }\n\n selectedValue.value = tab.value;\n emit('update:modelValue', tab.value);\n emit('change', tab.value);\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (newValue !== undefined && newValue !== selectedValue.value) {\n selectedValue.value = newValue;\n }\n }\n);\n\nwatch(\n () => props.tabs,\n newTabs => {\n if (newTabs.length > 0 && !newTabs.some(tab => tab.value === selectedValue.value)) {\n selectedValue.value = newTabs[0].value;\n emit('update:modelValue', newTabs[0].value);\n }\n },\n { deep: true }\n);\n</script>\n\n<template>\n <div class=\"in-tabs\">\n <button\n v-for=\"(tab, index) in tabs\"\n :key=\"`${tab.value}-${index}`\"\n class=\"in-tabs__tab\"\n :class=\"[\n {\n 'in-tabs__tab--active': selectedValue === tab.value,\n },\n ]\"\n :data-value=\"tab.value\"\n :disabled=\"disabled || tab.disabled\"\n @click=\"selectTab(tab)\">\n {{ tab.label }}\n </button>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.in-tabs {\n display: flex;\n align-items: flex-start;\n background-color: transparent;\n height: 34px;\n gap: 0;\n border-bottom: 1px solid #dcdee6;\n border-top: 1px solid #dcdee6;\n width: 100%;\n position: relative;\n\n &__tab {\n list-style-type: none;\n font-family: Figtree, sans-serif;\n font-weight: 400;\n font-size: 13px;\n line-height: 16px;\n letter-spacing: 0px;\n color: #5d6980;\n text-decoration: none;\n cursor: pointer;\n background: transparent;\n border: none;\n border-top: 1px solid transparent;\n border-right: 1px solid #dcdee6;\n padding: 0 16px;\n height: 34px;\n white-space: nowrap;\n transition: color 0.2s, border-color 0.2s;\n position: relative;\n margin-left: -1px;\n margin-top: -1px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n\n &:first-child {\n margin-left: 0;\n }\n\n &:hover:not(:disabled) {\n color: #0a2ecc;\n }\n\n &--active {\n color: #0a2ecc;\n border-top: 2px solid #0a2ecc;\n position: relative;\n z-index: 1;\n padding: 0 16px 0px;\n height: 34px;\n align-items: center;\n margin-top: -1px;\n padding-top: 1px;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0px;\n left: 1px;\n right: 0;\n height: 1px;\n background-color: #ffffff;\n z-index: 2;\n }\n\n &:first-child::after {\n left: 0;\n }\n }\n\n &:disabled {\n pointer-events: none;\n color: #91949f;\n cursor: not-allowed;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ref, computed, withDefaults, defineProps, defineEmits } from 'vue';\nimport styles from './InTextArea.module.scss';\n\nexport interface InTextAreaProps {\n id: string;\n name: string;\n modelValue: string;\n label?: string;\n withLabel?: boolean;\n placeholder: string;\n disabled?: boolean;\n invalid?: boolean;\n invalidMessage?: string;\n theme?: 'grey' | 'white';\n type?: 'default' | 'smart';\n rowLength?: number;\n preventXss?: boolean;\n maxLength?: number;\n width?: string;\n height?: string;\n padding?: string;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nconst props = withDefaults(defineProps<InTextAreaProps>(), {\n label: '',\n withLabel: true,\n disabled: false,\n invalid: false,\n invalidMessage: '',\n theme: 'grey',\n type: 'default',\n rowLength: 2,\n preventXss: true,\n});\n\nconst textareaStyle = computed(() => {\n const style: Record<string, string> = {};\n\n if (props.width) {\n style.width = props.width;\n }\n\n if (props.height) {\n style.height = props.height;\n }\n\n if (props.padding) {\n style.padding = props.padding;\n }\n\n if (props.resize) {\n style.resize = props.resize;\n }\n\n return style;\n});\n\ninterface Emits {\n (e: 'update:modelValue', value: string): void;\n (e: 'keyup', event: KeyboardEvent): void;\n (e: 'keypress', event: KeyboardEvent): void;\n (e: 'click', event: MouseEvent): void;\n (e: 'cut', event: ClipboardEvent): void;\n (e: 'paste', event: ClipboardEvent): void;\n (e: 'blur', event: FocusEvent): void;\n}\n\nconst emit = defineEmits<Emits>();\nconst textareaRef = ref<HTMLTextAreaElement>();\n\nconst preventXSS = (html = '') => {\n if (typeof html === 'string') {\n return html.replace(/<\\/style>/gi, '')\n .replace(/<(.*?) on(.*?)=['\"](.*?)>/gi, '')\n .replace(/(<meta |<style|<\\/*script)(.*?)>/gi, '')\n .replace(/(<([^>]+)>)/ig, '')\n .replace(/<(.*?) (href|src)=\"j(.*)a(.*)v(.*)a(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*):(.*?)>/gi, '');\n }\n\n return html;\n};\n\nconst computedValue = computed(() => {\n if (props.preventXss) {\n return preventXSS(props.modelValue);\n }\n\n return props.modelValue;\n});\n\nconst handleKeyup = (event: KeyboardEvent) => {\n fixValue();\n emit('keyup', event);\n};\n\nconst handleKeypress = (event: KeyboardEvent) => {\n fixValue();\n emit('keypress', event);\n};\n\nconst handleClick = (event: MouseEvent) => {\n fixValue();\n emit('click', event);\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n\n fixValue();\n emit('update:modelValue', target.value);\n};\n\nconst handleCut = (event: ClipboardEvent) => {\n fixValue();\n emit('cut', event);\n};\n\nconst handlePaste = (event: ClipboardEvent) => {\n fixValue();\n emit('paste', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n fixValue();\n emit('blur', event);\n};\n\nconst fixValue = () => {\n if (props.preventXss && textareaRef.value) {\n textareaRef.value.value = preventXSS(textareaRef.value.value);\n }\n};\n\ndefineExpose({\n textareaRef,\n});\n</script>\n\n<template>\n <fieldset\n :class=\"[\n styles['in-form-item'],\n styles['in-textarea-wrapper'],\n { [styles['in-form-item_invalid']]: invalid },\n ]\">\n <label\n v-if=\"withLabel\"\n :class=\"[\n styles['in-textarea-wrapper__label'],\n { [styles['in-textarea-wrapper__label_disable']]: disabled },\n ]\"\n :for=\"id\">\n {{ label }}\n </label>\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n :class=\"[\n styles['in-textarea-wrapper__textarea'],\n { [styles['in-textarea-wrapper__textarea_disable']]: disabled },\n { [styles['in-textarea-wrapper__textarea_smart']]: type === 'smart' },\n styles[`in-textarea-wrapper__textarea_${theme}`],\n ]\"\n :disabled=\"disabled\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :rows=\"rowLength\"\n :style=\"textareaStyle\"\n :value=\"computedValue\"\n @blur=\"handleBlur\"\n @click=\"handleClick\"\n @cut=\"handleCut\"\n @input=\"handleInput\"\n @keypress=\"handleKeypress\"\n @keyup=\"handleKeyup\"\n @paste=\"handlePaste\" />\n <p\n v-if=\"invalid\"\n :class=\"[styles['in-textarea-wrapper__error-message']]\">\n {{ invalidMessage }}\n </p>\n </fieldset>\n</template>\n","<script setup lang=\"ts\">\ninterface InRadioButtonProps {\n id: string;\n name: string;\n value: string | number | boolean;\n selected: string | number | boolean;\n label?: string;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<InRadioButtonProps>(), {\n label: '',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [value: string | number | boolean];\n}>();\n\nconst onClick = () => {\n if (!props.disabled) {\n emit('click', props.value);\n }\n};\n</script>\n\n<template>\n <fieldset class=\"in-form-item in-radio-button-wrapper\">\n <input\n :id=\"id\"\n class=\"in-radio-button-wrapper__input\"\n type=\"radio\"\n :checked=\"value === selected\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @click=\"onClick\">\n <label\n class=\"in-radio-button-wrapper__label\"\n :class=\"{ 'in-radio-button-wrapper__label_disable': disabled }\"\n :for=\"id\">\n {{ label }}\n </label>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n$color-base-4: #ffffff;\n$color-base-6: #dcdee6;\n$color-base-7: #0a2ecc;\n$color-base-36: #91949f;\n\n.in-radio-button-wrapper {\n border: none;\n padding: 0;\n margin: 0;\n display: inline-flex;\n align-items: center;\n\n &__input:not(:checked),\n &__input:checked {\n opacity: 0;\n position: absolute;\n margin: 0;\n z-index: -1;\n overflow: hidden;\n left: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n }\n\n &__input ~ &__label {\n position: relative;\n cursor: pointer;\n padding-left: 28px;\n font-size: 15px;\n line-height: 24px;\n color: #2C3546;\n user-select: none;\n font-family: Figtree;\n font-style: normal;\n font-weight: 400;\n\n &:after,\n &:before {\n position: absolute;\n content: '';\n border-radius: 50%;\n transition: all 0.2s ease;\n }\n\n &:before {\n width: 6px;\n height: 6px;\n top: 50%;\n left: 7px;\n transform: translateY(-50%);\n background-color: $color-base-4;\n }\n\n &:after {\n width: 20px;\n height: 20px;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n }\n }\n\n &__input:not(:checked) ~ &__label {\n &:before {\n transform: translateY(-50%) scale(0);\n }\n\n &:after {\n border: 1px solid $color-base-6;\n }\n }\n\n &__input:checked ~ &__label {\n &:before {\n z-index: 1;\n border: 1px solid $color-base-4;\n background-color: $color-base-4;\n transform: translateY(-50%) scale(1);\n }\n\n &:after {\n border: 1px solid $color-base-7;\n background-color: $color-base-7;\n }\n }\n\n &__input:not(:checked) ~ &__label_disable {\n &:after {\n background-color: $color-base-6 !important;\n }\n }\n\n &__input:checked ~ &__label_disable {\n &:before {\n border-color: $color-base-36 !important;\n background-color: $color-base-36 !important;\n }\n\n &:after {\n border-color: $color-base-6 !important;\n background-color: $color-base-6 !important;\n }\n }\n\n &__label_disable {\n cursor: default !important;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Icon } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\nconst ACTIVE_ICON_NAME: IconNames = 'line-check-netural';\nconst DISABLE_ICON_NAME: IconNames = 'line-close-netural';\n\ninterface InToggleProps {\n id: string;\n name: string;\n checked?: boolean;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<InToggleProps>(), {\n checked: false,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [checked: boolean];\n 'update:modelValue': [value: boolean];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst iconName = computed(() => (props.checked ? ACTIVE_ICON_NAME : DISABLE_ICON_NAME));\n\nconst onChange = (event: Event) => {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n\n emit('click', newValue);\n emit('update:modelValue', newValue);\n};\n\nconst handleLabelClick = (event: MouseEvent) => {\n if (props.disabled) {\n event.preventDefault();\n\n return;\n }\n\n if (inputRef.value && !inputRef.value.disabled) {\n inputRef.value.checked = !inputRef.value.checked;\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }));\n }\n};\n</script>\n\n<template>\n <fieldset\n class=\"in-form-item in-toggle-wrapper\"\n :class=\"[\n {\n 'in-toggle-wrapper_disable': disabled,\n 'in-toggle-wrapper_checked': checked,\n },\n ]\">\n <input\n :id=\"id\"\n ref=\"inputRef\"\n class=\"in-toggle-wrapper__input\"\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :name=\"name\"\n @change=\"onChange\">\n <label\n class=\"in-toggle-wrapper__label\"\n :for=\"id\"\n @click=\"handleLabelClick\">\n <Icon\n :name=\"iconName\"\n :size=\"28\" />\n </label>\n </fieldset>\n</template>\n\n<style lang=\"scss\" scoped>\n// Color variables from design-tokens/_variables.scss\n$color-base-4: #ffffff;\n$color-base-6: #dcdee6;\n$color-base-7: #0a2ecc;\n$color-base-36: #eff2f4;\n\n.in-toggle-wrapper {\n &__input:not(:checked),\n &__input:checked {\n opacity: 0;\n position: absolute;\n margin: 0;\n z-index: -1;\n overflow: hidden;\n left: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n }\n\n &__input {\n ~ label {\n position: relative;\n display: block;\n width: 52px;\n height: 28px;\n background-color: $color-base-4;\n border-radius: 100px;\n cursor: pointer;\n border: 1px solid $color-base-6;\n pointer-events: auto;\n\n svg {\n position: absolute;\n z-index: 1;\n top: -1px;\n left: 3px;\n fill: $color-base-6;\n transition-property: color, left;\n transition: color 0.3s, left 0.5s;\n transition-timing-function: ease;\n pointer-events: none;\n }\n }\n\n ~ label:after {\n content: '';\n position: absolute;\n top: -1px;\n left: -1px;\n display: block;\n width: 36px;\n height: 28px;\n border-radius: 100px;\n background-color: $color-base-4;\n border: 1px solid $color-base-6;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: all 0.5s ease;\n box-sizing: border-box;\n pointer-events: none;\n }\n }\n\n &_checked {\n label {\n border-color: $color-base-7;\n background: $color-base-7;\n\n svg {\n left: 20px;\n fill: $color-base-7;\n }\n\n &:after {\n left: 16px;\n border-color: $color-base-7;\n background-color: $color-base-4;\n }\n }\n }\n\n &_disable {\n cursor: initial;\n\n label {\n background-color: $color-base-6 !important;\n border-color: $color-base-6 !important;\n cursor: initial !important;\n\n svg {\n fill: $color-base-6 !important;\n }\n\n &:after {\n border-color: $color-base-36 !important;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport Icon from '@/components/Icon/Icon.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './InputButton.module.scss';\n\ninterface InputButtonProps {\n variant: 'solid' | 'ghost' | 'text' | 'outline';\n color: 'primary' | 'subtle-primary' | 'secondary' | 'neutral' | 'danger' | 'warning' | 'smart';\n size?: 'default' | 'small';\n rightIconName?: IconNames;\n iconSize?: 16 | 24;\n loadingStatus?: boolean;\n successStatus?: boolean;\n disabled?: boolean;\n fill?: boolean;\n customClass?: string;\n inputValue?: string;\n inputPlaceholder?: string;\n inputType?: 'text' | 'number';\n}\n\nconst props = withDefaults(defineProps<InputButtonProps>(), {\n loadingStatus: false,\n successStatus: false,\n disabled: false,\n fill: false,\n iconSize: 16,\n size: 'default',\n inputValue: '',\n inputPlaceholder: '',\n inputType: 'text',\n});\n\nconst emit = defineEmits<{\n click: [event: MouseEvent];\n 'input-change': [value: string];\n}>();\n\nconst onClick = (event: MouseEvent) => {\n if (props.disabled) {\n return;\n }\n\n emit('click', event);\n};\n\nconst handleInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n\n emit('input-change', target.value);\n};\n\nconst handleInputKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n (event.target as HTMLInputElement).blur();\n } else if (event.key === 'Escape') {\n event.preventDefault();\n (event.target as HTMLInputElement).value = props.inputValue || '';\n (event.target as HTMLInputElement).blur();\n }\n};\n\nconst leftIcon = computed<IconNames | undefined>(() => {\n if (props.loadingStatus) {\n return 'loading-circle';\n } else if (props.successStatus) {\n return 'line-check-natural';\n }\n\n return undefined;\n});\n\nconst buttonClasses = computed(() => {\n const classes = [\n styles.inputButton,\n styles[`inputButton__${props.variant}`],\n styles[`inputButton__${props.variant}-${props.color}`],\n styles[`inputButton__size_${props.size}`],\n ];\n\n if (props.fill) {\n classes.push(styles.fill);\n }\n\n if (props.customClass) {\n classes.push(props.customClass);\n }\n\n return classes;\n});\n</script>\n\n<template>\n <button\n :class=\"buttonClasses\"\n :disabled=\"props.disabled\"\n @click=\"onClick\">\n <Icon\n v-if=\"leftIcon\"\n :name=\"leftIcon\"\n :size=\"iconSize\" />\n <input\n :class=\"styles.inputButton__input\"\n :disabled=\"props.disabled\"\n :placeholder=\"inputPlaceholder\"\n :type=\"inputType\"\n :value=\"inputValue\"\n @click.stop\n @input=\"handleInputChange\"\n @keydown=\"handleInputKeydown\">\n <Icon\n v-if=\"rightIconName\"\n :name=\"rightIconName\"\n :size=\"iconSize\" />\n </button>\n</template>\n","export function debounce<Args extends unknown[]> (\n fn: (...args: Args) => unknown,\n wait: number,\n): (...args: Args) => void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n return (...args: Args): void => {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(() => {\n fn(...args);\n }, wait);\n };\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nconst dedent = createDedent({});\nexport default dedent;\nfunction createDedent(options) {\n dedent.withOptions = newOptions => createDedent(_objectSpread(_objectSpread({}, options), newOptions));\n return dedent;\n function dedent(strings, ...values) {\n const raw = typeof strings === \"string\" ? [strings] : strings.raw;\n const {\n escapeSpecialCharacters = Array.isArray(strings)\n } = options;\n\n // first, perform interpolation\n let result = \"\";\n for (let i = 0; i < raw.length; i++) {\n let next = raw[i];\n if (escapeSpecialCharacters) {\n // handle escaped newlines, backticks, and interpolation characters\n next = next.replace(/\\\\\\n[ \\t]*/g, \"\").replace(/\\\\`/g, \"`\").replace(/\\\\\\$/g, \"$\").replace(/\\\\\\{/g, \"{\");\n }\n result += next;\n if (i < values.length) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n result += values[i];\n }\n }\n\n // now strip indentation\n const lines = result.split(\"\\n\");\n let mindent = null;\n for (const l of lines) {\n const m = l.match(/^(\\s+)\\S+/);\n if (m) {\n const indent = m[1].length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n }\n if (mindent !== null) {\n const m = mindent; // appease TypeScript\n result = lines\n // https://github.com/typescript-eslint/typescript-eslint/issues/7140\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n .map(l => l[0] === \" \" || l[0] === \"\\t\" ? l.slice(m) : l).join(\"\\n\");\n }\n\n // dedent eats leading and trailing whitespace too\n result = result.trim();\n if (escapeSpecialCharacters) {\n // handle escaped newlines at the end to ensure they don't get stripped too\n result = result.replace(/\\\\n/g, \"\\n\");\n }\n return result;\n }\n}\n","export default \"<!DOCTYPE html>\\n<html lang=\\\"en\\\">\\n\\n<head>\\n <meta charset=\\\"UTF-8\\\">\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">\\n <title>Code Editor</title>\\n <link rel=\\\"stylesheet\\\" data-name=\\\"vs/editor/editor.main\\\" href=\\\"{vsPath}/editor/editor.main.css\\\">\\n <style>\\n html,\\n body,\\n .editor {\\n width: 100%;\\n height: 100%;\\n padding: 0;\\n margin: 0;\\n }\\n </style>\\n</head>\\n\\n<body>\\n <div class=\\\"editor\\\"></div>\\n <script src=\\\"{vsPath}/loader.js\\\"></script>\\n <script>\\n require.config({\\n paths: { 'vs': '{vsPath}' }\\n });\\n window.editorPromise = new Promise((resolve, reject) => {\\n require([\\\"vs/editor/editor.main\\\"], resolve, reject);\\n })\\n </script>\\n</body>\\n\\n</html>\\n\"","import dd from 'dedent';\nimport iframeContent from './iframeContent.html?raw';\n\n/**\n * Builds the iframe document that hosts the Monaco editor.\n *\n * Monaco's `vs` assets (loader.js, editor.main.css, ...) are loaded over HTTP\n * from `{vsBaseUrl}`. As a published library this component cannot serve those\n * assets itself — the consuming app must host them and pass the base URL.\n *\n * @param vsBaseUrl Absolute URL to the served `vs` directory. When omitted it\n * falls back to the current module origin + `/vs` (works when the consumer\n * serves `vs` at its own origin, e.g. skeleton-design-bundle).\n */\nexport function generateIframeContent (vsBaseUrl?: string) {\n const vsPath = vsBaseUrl ?? `${new URL(import.meta.url).origin}/vs`;\n\n return dd(iframeContent.replace(/\\{vsPath\\}/g, vsPath));\n}\n","import type * as Monaco from 'monaco-editor';\n\ntype MonacoApi = typeof import('monaco-editor/esm/vs/editor/editor.api');\n\nexport interface LiquidVariable {\n key: string;\n displayName?: string;\n}\n\n// Register once per Monaco instance. Each MonacoEditor mounts its own iframe\n// (its own `monaco`), so this guards against a double `createEditorInstance`.\nconst registered = new WeakSet<object>();\n\n// HTML-embedded Liquid grammar: tokenizes HTML loosely and switches into\n// dedicated states for `{{ output }}` and `{% tag %}`. Liquid inside HTML\n// attributes works too, since `{{`/`{%` are matched from the root regardless of\n// tag context. Token names are standard so the default theme colors them.\n//\n// IMPORTANT: patterns are STRINGS, not RegExp literals. Monaco runs in the\n// editor iframe (a separate realm); a RegExp created here would fail Monarch's\n// `instanceof RegExp` check inside the iframe (\"rules must start with a match\n// string or regular expression\"). Strings are realm-agnostic — Monarch compiles\n// them to RegExp in its own realm.\nconst liquidMonarch: Monaco.languages.IMonarchLanguage = {\n defaultToken: '',\n tokenizer: {\n root: [\n ['\\\\{\\\\{', { token: 'delimiter.curly', next: '@liquidOutput' }],\n ['\\\\{%', { token: 'delimiter.curly', next: '@liquidTag' }],\n ['<!--', { token: 'comment', next: '@htmlComment' }],\n ['</?[a-zA-Z][\\\\w-]*', 'tag'],\n ['>', 'tag'],\n ],\n liquidOutput: [\n ['\\\\}\\\\}', { token: 'delimiter.curly', next: '@pop' }],\n { include: '@liquidInner' },\n ],\n liquidTag: [\n ['%\\\\}', { token: 'delimiter.curly', next: '@pop' }],\n { include: '@liquidInner' },\n ],\n liquidInner: [\n ['\\\\b(?:if|elsif|else|endif|unless|endunless|for|endfor|case|when|endcase|assign|capture|endcapture|include|render|raw|endraw|comment|endcomment|break|continue|cycle|increment|decrement|tablerow|endtablerow|liquid|echo)\\\\b', 'keyword'],\n ['\\\\b(?:and|or|contains|in|with|as|empty|nil|null|blank|true|false|by)\\\\b', 'keyword'],\n ['\\\\|', 'operator'],\n ['[a-zA-Z_][\\\\w.]*', 'variable'],\n ['\"[^\"]*\"', 'string'],\n [\"'[^']*'\", 'string'],\n ['\\\\d+(?:\\\\.\\\\d+)?', 'number'],\n ['[=!<>]=?|[:.,?-]', 'operator'],\n ],\n htmlComment: [\n ['-->', { token: 'comment', next: '@pop' }],\n ['.', 'comment'],\n ],\n },\n};\n\nfunction registerLanguage (monaco: MonacoApi): void {\n monaco.languages.register({ id: 'liquid' });\n\n // Highlight/config failures must never block editor creation — the language\n // is registered above, so the editor still mounts (as plain text) if either\n // of these throws.\n try {\n monaco.languages.setLanguageConfiguration('liquid', {\n autoClosingPairs: [\n { open: '{{', close: ' }}' },\n { open: '{%', close: ' %}' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid language configuration failed', error);\n }\n\n try {\n monaco.languages.setMonarchTokensProvider('liquid', liquidMonarch);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid tokenizer registration failed', error);\n }\n}\n\nfunction registerCompletion (monaco: MonacoApi, getVariables: () => LiquidVariable[]): void {\n monaco.languages.registerCompletionItemProvider('liquid', {\n triggerCharacters: ['{', '.', ' ', '|'],\n provideCompletionItems (model, position) {\n const lineText = model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: 1,\n endLineNumber: position.lineNumber,\n endColumn: position.column,\n });\n\n // Only suggest variables inside an open `{{ … }}` / `{% … %}`.\n const open = Math.max(lineText.lastIndexOf('{{'), lineText.lastIndexOf('{%'));\n const close = Math.max(lineText.lastIndexOf('}}'), lineText.lastIndexOf('%}'));\n\n if (open === -1 || open <= close) {\n return { suggestions: [] };\n }\n\n const word = model.getWordUntilPosition(position);\n const range: Monaco.IRange = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n\n const suggestions = getVariables().map(variable => ({\n label: variable.key,\n kind: monaco.languages.CompletionItemKind.Variable,\n insertText: variable.key,\n detail: variable.displayName ?? '',\n range,\n }));\n\n return { suggestions };\n },\n });\n}\n\n/**\n * Registers the `liquid` language (HTML-embedded highlight) and a completion\n * provider that suggests dynamic variables inside `{{ }}` / `{% %}`.\n *\n * @param monaco The Monaco API from the editor iframe's contentWindow.\n * @param getVariables Lazily read the current variable list (kept reactive).\n */\nexport function registerLiquid (monaco: MonacoApi, getVariables: () => LiquidVariable[]): void {\n if (registered.has(monaco)) {\n return;\n }\n\n registered.add(monaco);\n\n registerLanguage(monaco);\n\n try {\n registerCompletion(monaco, getVariables);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] liquid completion registration failed', error);\n }\n}\n","// Monaco renders inside a fixed-size blob iframe, so wheel events never reach the\n// host page and Monaco consumes them at its own scroll boundaries. These helpers\n// let the component forward a wheel gesture to the nearest scrollable ancestor of\n// the iframe once the editor itself can't scroll further, so a surrounding\n// scrollable container (e.g. a drawer) keeps scrolling.\n\n/**\n * The nearest ancestor of `element` that can actually scroll vertically, or\n * `null` when none exists (e.g. the editor isn't inside a scroll container).\n */\nexport function findScrollableParent(element: HTMLElement | null): HTMLElement | null {\n let node = element?.parentElement ?? null;\n\n while (node) {\n const { overflowY } = window.getComputedStyle(node);\n const canScroll = (overflowY === 'auto' || overflowY === 'scroll') && node.scrollHeight > node.clientHeight;\n\n if (canScroll) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return null;\n}\n\n/**\n * True when the editor cannot scroll further in the wheel's direction — either\n * its content fits entirely, or it is already pinned to the top (scrolling up)\n * or bottom (scrolling down). At that point the gesture should chain to the\n * parent.\n */\nexport function isAtScrollEdge(deltaY: number, scrollTop: number, scrollHeight: number, visibleHeight: number): boolean {\n if (scrollHeight <= visibleHeight) {\n return true;\n }\n\n if (deltaY < 0) {\n return scrollTop <= 0;\n }\n\n if (deltaY > 0) {\n return Math.ceil(scrollTop + visibleHeight) >= scrollHeight;\n }\n\n return false;\n}\n\n/** Normalise a wheel delta to pixels (some devices report line/page units). */\nexport function normalizeWheelDeltaY(deltaY: number, deltaMode: number): number {\n if (deltaMode === 1) {\n return deltaY * 16;\n }\n\n return deltaY;\n}\n\n/**\n * The pixel amount to chain onto the parent scroller for a wheel event, or `null`\n * when the gesture should stay with the editor (a zero delta, or the editor can\n * still scroll further in that direction). Combines the edge test with unit\n * normalisation so the component's wheel handler is a thin DOM shim over logic\n * that is covered by unit tests (the editor-in-iframe itself is not).\n */\nexport function resolveChainedScrollDelta(\n deltaY: number,\n deltaMode: number,\n scrollTop: number,\n scrollHeight: number,\n visibleHeight: number\n): number | null {\n if (deltaY === 0) {\n return null;\n }\n\n if (!isAtScrollEdge(deltaY, scrollTop, scrollHeight, visibleHeight)) {\n return null;\n }\n\n return normalizeWheelDeltaY(deltaY, deltaMode);\n}\n","// The custom error tooltip is anchored to the error LINE, not the pointer, so it\n// stays put while the cursor moves over the glyph. These pure helpers hold the\n// re-anchor gate and the vertical placement so they can be unit tested — the\n// surrounding Monaco/iframe wiring in MonacoEditor.vue cannot.\n\n/** Gap in pixels between the error line and the tooltip. */\nexport const TOOLTIP_GAP = 3;\n\n/**\n * True when the tooltip should be re-positioned: only when the hovered error line\n * differs from the line it is already anchored to (`null` when hidden). Moving the\n * pointer within the same line's glyph must NOT re-anchor it.\n */\nexport function shouldReanchorTooltip(hoveredLine: number, anchoredLine: number | null): boolean {\n return hoveredLine !== anchoredLine;\n}\n\n/**\n * The tooltip's `top` (px). Placed just below the error line, but flipped above it\n * when placing it below would spill past the viewport bottom (errors on the last\n * lines would otherwise be clipped by the iframe's overflow). Clamped to 4px so it\n * never leaves the top edge when flipped.\n */\nexport function resolveTooltipTop(\n lineTop: number,\n lineHeight: number,\n tooltipHeight: number,\n viewportHeight: number\n): number {\n const below = lineTop + lineHeight + TOOLTIP_GAP;\n\n if (below + tooltipHeight > viewportHeight) {\n return Math.max(4, lineTop - tooltipHeight - TOOLTIP_GAP);\n }\n\n return below;\n}\n","import type cssValidator from './css';\nimport type htmlValidator from './html';\nimport type jsValidator from './js';\nimport type liquidValidator from './liquid';\n\nconst validator: {\n javascript?: typeof jsValidator;\n html?: typeof htmlValidator;\n css?: typeof cssValidator;\n liquid?: typeof liquidValidator;\n} = {};\n\nexport function useValidators () {\n return {\n async javascript (...params: Parameters<typeof jsValidator>) {\n if (!validator.javascript) {\n validator.javascript = (await import('./js')).default;\n }\n\n return validator.javascript(...params);\n },\n async html (...params: Parameters<typeof htmlValidator>) {\n if (!validator.html) {\n validator.html = (await import('./html')).default;\n }\n\n return validator.html(...params);\n },\n async css (...params: Parameters<typeof cssValidator>) {\n if (!validator.css) {\n validator.css = (await import('./css')).default;\n }\n\n return validator.css(...params);\n },\n async liquid (...params: Parameters<typeof liquidValidator>) {\n if (!validator.liquid) {\n validator.liquid = (await import('./liquid')).default;\n }\n\n return validator.liquid(...params);\n },\n };\n}\n","<script setup lang=\"ts\">\nimport type { editor as Editor, IDisposable } from 'monaco-editor';\nimport { ref, onUnmounted, watch, withDefaults } from 'vue';\nimport { debounce } from '@/utils/debounce';\nimport { generateIframeContent } from './generateIframeContent';\nimport { registerLiquid, type LiquidVariable } from './liquid/registerLiquid';\nimport styles from './MonacoEditor.module.scss';\nimport { findScrollableParent, resolveChainedScrollDelta } from './scrollChaining';\nimport { resolveTooltipTop, shouldReanchorTooltip } from './tooltipPosition';\nimport { useValidators } from './validators/useValidators';\n\nexport type { LiquidVariable };\n\nexport interface MonacoEditorProps {\n language?: keyof ReturnType<typeof useValidators>;\n code?: string;\n disableValidation?: boolean;\n /**\n * Absolute URL to the served Monaco `vs` directory. The consuming app must\n * host these assets. When omitted, falls back to the current origin + `/vs`.\n */\n monacoVsPath?: string;\n /**\n * Dynamic variables suggested by autocomplete when `language` is `liquid`.\n */\n liquidVariables?: LiquidVariable[];\n /**\n * Per-consumer Monaco options merged over the shared defaults (e.g. disabling\n * the minimap). `language`/`value` are always owned by the component.\n */\n editorOptions?: Editor.IStandaloneEditorConstructionOptions;\n /** Render the custom error icon (gutter) + hover infobox. Off by default. */\n errorGlyph?: boolean;\n /** Dimmed text shown over the editor while it is empty. */\n placeholder?: string;\n}\n\ninterface Emits {\n (e: 'update:codeEditorLength', length: number): void;\n (e: 'update:shouldShowLengthError', show: boolean): void;\n (e: 'update:valid', valid: boolean): void;\n (e: 'ready', editor: Editor.IStandaloneCodeEditor): void;\n (e: 'destroyed'): void;\n}\n\nconst emit = defineEmits<Emits>();\n\nconst props = withDefaults(defineProps<MonacoEditorProps>(), {\n language: 'javascript',\n code: '',\n disableValidation: false,\n liquidVariables: () => [],\n editorOptions: () => ({}),\n errorGlyph: false,\n placeholder: '',\n});\n\nlet editor: Editor.IStandaloneCodeEditor;\nlet markersListener: IDisposable | undefined;\nlet removeWheelForwarding: (() => void) | undefined;\nconst iframe = ref<HTMLIFrameElement | null>(null);\nconst blob = new Blob([generateIframeContent(props.monacoVsPath)], { type: 'text/html' });\nconst src = URL.createObjectURL(blob);\nconst validators = useValidators();\n\nconst validateCode = async () => {\n const monaco = iframe.value?.contentWindow?.monaco;\n\n if (!monaco) {\n return false;\n }\n\n return (await validators[props.language](editor, monaco)).valid || false;\n};\n\nasync function createEditorInstance () {\n const frame = iframe.value;\n\n if (!frame?.contentWindow || !frame.contentDocument) {\n return;\n }\n\n const { contentDocument, contentWindow } = frame;\n\n await contentWindow.editorPromise;\n\n const { monaco } = contentWindow;\n const container = contentDocument.querySelector<HTMLDivElement>('.editor');\n\n if (!container) {\n return;\n }\n\n contentDocument.body.appendChild(container);\n\n if (props.language === 'liquid') {\n try {\n registerLiquid(monaco, () => props.liquidVariables);\n } catch (error) {\n // Never let liquid registration block editor creation.\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] registerLiquid failed', error);\n }\n }\n\n try {\n editor = monaco.editor.create(container, {\n wordWrap: 'on',\n // Error icon renders in the line-decorations margin (to the RIGHT of the\n // line number) via the marker listener; reserve width for it + the gutter.\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 29,\n // Hide the overview ruler and its marker decorations (both consumers).\n overviewRulerLanes: 0,\n // Per-consumer overrides (e.g. design-editor disables the minimap) merge\n // over the shared defaults. language/value stay owned by the component.\n ...props.editorOptions,\n language: props.language,\n value: props.code,\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`[MonacoEditor] monaco.editor.create failed (language=${props.language})`, error);\n\n return;\n }\n\n emit('update:codeEditorLength', props.code.length);\n\n emit('ready', editor);\n\n // Monaco lives in a fixed-size iframe and consumes wheel events at its own\n // scroll boundary, so a surrounding scroll container (e.g. the DEF drawer)\n // stops scrolling once the pointer is over the editor. Forward the gesture to\n // the nearest scrollable ancestor once the editor itself can't scroll further.\n const forwardWheelAtEdge = (event: WheelEvent): void => {\n if (!editor) {\n return;\n }\n\n const delta = resolveChainedScrollDelta(\n event.deltaY,\n event.deltaMode,\n editor.getScrollTop(),\n editor.getScrollHeight(),\n editor.getLayoutInfo().height\n );\n\n if (delta === null) {\n return;\n }\n\n const scrollable = findScrollableParent(iframe.value);\n\n if (scrollable) {\n scrollable.scrollTop += delta;\n }\n };\n\n contentDocument.addEventListener('wheel', forwardWheelAtEdge, { capture: true, passive: true });\n removeWheelForwarding = () => contentDocument.removeEventListener('wheel', forwardWheelAtEdge, { capture: true });\n\n // Fire-and-forget: validators set Monaco markers when they resolve, which\n // drives the error tint + `update:valid` via the marker listener below.\n const runValidation = (): void => {\n if (props.disableValidation) {\n return;\n }\n\n if (props.language === 'html') {\n void validators.html(editor, monaco);\n\n return;\n }\n\n if (props.language === 'liquid') {\n void validators.liquid(editor, monaco, props.liquidVariables.map(item => item.key));\n\n return;\n }\n\n if (props.language === 'javascript') {\n void validators.javascript(editor, monaco);\n }\n };\n\n editor.onDidChangeModelContent(debounce(() => {\n emit('update:codeEditorLength', editor.getValue().length);\n runValidation();\n }, 300));\n\n editor.onMouseDown(debounce(async () => {\n emit('update:shouldShowLengthError', false);\n }, 100));\n\n // Tint the whole line behind any error marker. Driven by Monaco markers, so\n // it works for every language/validator and looks identical across all\n // consumers (SDB popups + the DEF liquid editor). The CSS lives in the\n // editor iframe document, where Monaco renders. Wrapped so a decoration API\n // hiccup can never disable validation (registered above).\n try {\n const errorStyle = contentDocument.createElement('style');\n\n // Gray-blue gutter is part of the design-editor look (errorGlyph) only;\n // other consumers (SDB popups) keep Monaco's default white gutter.\n const gutterThemeCss = props.errorGlyph\n ? '.monaco-editor .margin { background-color: #dcdee6 !important; }'\n + ' .monaco-editor .line-numbers { color: #91949f !important; text-align: center !important;'\n + ' font-family: Figtree, sans-serif !important; font-size: 15px !important; }'\n + ' .monaco-editor .view-overlays .current-line {'\n + ' border: none !important; background-color: transparent !important; }'\n + ' .monaco-editor .lines-content { left: 16px !important; }'\n + ' .monaco-editor .monaco-scrollable-element { background-color: #ffffff !important; }'\n : '';\n\n // Monaco does NOT render an icon in the glyph margin for markers (only a\n // squiggle + overview ruler), so we paint our own red circle-X there.\n // cspell:ignore Csvg Ccircle Cpath infobox posx posy Figtree\n errorStyle.textContent = `\n ${gutterThemeCss}\n .decorationsOverviewRuler { display: none !important; }\n .monaco-error-glyph {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23dc2626'/%3E%3Cpath d='M5.5 5.5l5 5M10.5 5.5l-5 5' stroke='white' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: left center;\n background-size: 14px 14px;\n cursor: pointer;\n }\n .monaco-error-tooltip {\n position: absolute;\n z-index: 1000;\n max-width: 160px;\n max-height: 120px;\n overflow-y: auto;\n padding: 8px 10px;\n background: #ffffff;\n border-top: 4px solid #dc2626;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.16);\n font-family: 'JetBrains Mono', monospace;\n font-size: 13px;\n line-height: 16px;\n color: #292929;\n white-space: pre-wrap;\n word-break: break-word;\n pointer-events: none;\n }\n .monaco-placeholder {\n pointer-events: none;\n color: #91949f;\n white-space: pre;\n }\n `;\n contentDocument.head.appendChild(errorStyle);\n\n const errorDecorations = editor.createDecorationsCollection();\n const markerModel = editor.getModel();\n\n markersListener = monaco.editor.onDidChangeMarkers(() => {\n if (!markerModel) {\n return;\n }\n\n const errorMarkers = monaco.editor\n .getModelMarkers({ resource: markerModel.uri })\n .filter(marker => marker.severity === monaco.MarkerSeverity.Error);\n\n if (props.errorGlyph) {\n errorDecorations.set(errorMarkers.map(marker => ({\n range: new monaco.Range(marker.startLineNumber, 1, marker.startLineNumber, 1),\n options: {\n isWholeLine: true,\n firstLineDecorationClassName: 'monaco-error-glyph',\n },\n })));\n }\n\n emit('update:valid', errorMarkers.length === 0);\n });\n\n // Custom infobox shown when hovering the error icon (the line-decorations\n // gutter on an error line). Only for consumers that opt into the custom\n // error UI (design-editor) and turn Monaco's native hover off.\n if (props.errorGlyph) {\n const errorTooltip = contentDocument.createElement('div');\n\n errorTooltip.className = 'monaco-error-tooltip';\n errorTooltip.style.display = 'none';\n contentDocument.body.appendChild(errorTooltip);\n\n let tooltipLine: number | null = null;\n\n const hideErrorTooltip = (): void => {\n errorTooltip.style.display = 'none';\n tooltipLine = null;\n };\n\n editor.onMouseMove(event => {\n if (event.target.type !== monaco.editor.MouseTargetType.GUTTER_LINE_DECORATIONS\n || !event.target.position\n || !markerModel) {\n hideErrorTooltip();\n\n return;\n }\n\n const line = event.target.position.lineNumber;\n const lineMarkers = monaco.editor\n .getModelMarkers({ resource: markerModel.uri })\n .filter(item => item.severity === monaco.MarkerSeverity.Error && item.startLineNumber === line);\n\n if (lineMarkers.length === 0) {\n hideErrorTooltip();\n\n return;\n }\n\n // Re-anchor only when the hovered error line changes — otherwise the\n // tooltip would jump around as the pointer moves within the same glyph.\n if (!shouldReanchorTooltip(line, tooltipLine)) {\n return;\n }\n\n tooltipLine = line;\n\n const grouped = new Map<string, Set<string> | null>();\n\n lineMarkers.forEach(item => {\n const separator = item.message.indexOf(': ');\n\n if (separator > -1) {\n const prefix = item.message.slice(0, separator);\n const values = grouped.get(prefix) ?? new Set<string>();\n\n values.add(item.message.slice(separator + 2));\n grouped.set(prefix, values);\n } else if (!grouped.has(item.message)) {\n grouped.set(item.message, null);\n }\n });\n\n const entries: string[] = [];\n\n grouped.forEach((values, key) => {\n entries.push(values ? `${key}: ${[...values].join(', ')}` : key);\n });\n\n const message = entries.length > 1\n ? entries.map(entry => `• ${entry}`).join('\\n')\n : entries[0];\n\n errorTooltip.textContent = message;\n errorTooltip.style.display = 'block';\n\n // Anchor to the error LINE (not the pointer / hovered element rect) so\n // the tooltip stays put while the pointer moves over the glyph.\n const linePosition = editor.getScrolledVisiblePosition({ lineNumber: line, column: 1 });\n\n if (linePosition) {\n const containerRect = container.getBoundingClientRect();\n const glyphLeft = containerRect.left + editor.getLayoutInfo().decorationsLeft;\n const lineTop = containerRect.top + linePosition.top;\n const top = resolveTooltipTop(\n lineTop,\n linePosition.height,\n errorTooltip.offsetHeight,\n contentDocument.documentElement.clientHeight\n );\n\n errorTooltip.style.left = `${glyphLeft}px`;\n errorTooltip.style.top = `${top}px`;\n }\n });\n\n editor.onMouseLeave(hideErrorTooltip);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] error-line highlight setup failed', error);\n }\n\n // Monaco 0.48 has no native placeholder — anchor a content widget at line 1 /\n // column 1 so it renders exactly where typed text begins. A content widget is\n // positioned by Monaco itself, so it stays aligned with the first line's font\n // metrics + padding (a hand-placed absolute overlay drifts below the line).\n if (props.placeholder) {\n try {\n const placeholderEl = contentDocument.createElement('div');\n const fontInfo = editor.getOption(monaco.editor.EditorOption.fontInfo);\n\n placeholderEl.className = 'monaco-placeholder';\n placeholderEl.textContent = props.placeholder;\n placeholderEl.style.fontFamily = fontInfo.fontFamily;\n placeholderEl.style.fontSize = `${fontInfo.fontSize}px`;\n placeholderEl.style.lineHeight = `${fontInfo.lineHeight}px`;\n\n editor.addContentWidget({\n getId: () => 'monaco.placeholder.widget',\n getDomNode: () => placeholderEl,\n getPosition: () => ({\n position: { lineNumber: 1, column: 1 },\n preference: [monaco.editor.ContentWidgetPositionPreference.EXACT],\n }),\n });\n\n const updatePlaceholder = (): void => {\n placeholderEl.style.display = editor.getValue().length === 0 ? 'block' : 'none';\n };\n\n updatePlaceholder();\n editor.onDidChangeModelContent(updatePlaceholder);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[MonacoEditor] placeholder setup failed', error);\n }\n }\n\n // Validate the initial content so markers / error tint / `update:valid`\n // reflect a template that opens with an existing (possibly invalid) value.\n runValidation();\n}\n\n// Re-validate when the dynamic-content variables arrive (they load async), so an\n// already-rendered liquid editor flags unknown variables once the list is known.\nwatch(\n () => props.liquidVariables,\n () => {\n const monaco = iframe.value?.contentWindow?.monaco;\n\n if (editor && monaco && props.language === 'liquid' && !props.disableValidation) {\n void validators.liquid(editor, monaco, props.liquidVariables.map(item => item.key));\n }\n }\n);\n\nonUnmounted(() => {\n removeWheelForwarding?.();\n markersListener?.dispose();\n editor?.dispose();\n\n emit('destroyed');\n});\n\nconst getCode = async () => {\n const valid = props.disableValidation ? true : await validateCode();\n\n return {\n code: editor.getValue(),\n valid,\n };\n};\n\ndefineExpose({ getCode });\n</script>\n\n<template>\n <iframe\n ref=\"iframe\"\n sandbox=\"allow-same-origin allow-scripts allow-forms allow-modals allow-popups\"\n :class=\"styles['monaco-editor-iframe']\"\n :src=\"src\"\n @load=\"createEditorInstance\" />\n</template>\n","/*\n * liquidjs@10.27.1, https://github.com/harttle/liquidjs\n * (c) 2016-2026 harttle\n * Released under the MIT License.\n */\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass Drop {\r\n liquidMethodMissing(key, context) {\r\n return undefined;\r\n }\r\n}\n\nconst toString$1 = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\nconst hasOwnProperty = Object.hasOwnProperty;\r\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction isPromise(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n if (isString(value))\r\n return value;\r\n if (isNil(value))\r\n return '';\r\n if (isArray(value))\r\n return value.map(x => stringify(x)).join('');\r\n return String(value);\r\n}\r\nfunction toEnumerable(val) {\r\n val = toValue(val);\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isIterable(val))\r\n return Array.from(val);\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n val = toValue(val);\r\n if (isNil(val))\r\n return [];\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\r\nfunction toValue(value) {\r\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value;\r\n}\r\nfunction toNumber(value) {\r\n return +toValue(value) || 0;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value == null;\r\n}\r\nfunction isUndefined(value) {\r\n return value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toString$1.call(value) === '[object Array]';\r\n}\r\nfunction isArrayLike(value) {\r\n return value && isNumber(value.length);\r\n}\r\nfunction isIterable(value) {\r\n return isObject(value) && Symbol.iterator in value;\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(obj, iteratee) {\r\n obj = obj || {};\r\n for (const k in obj) {\r\n if (hasOwnProperty.call(obj, k)) {\r\n if (iteratee(obj[k], k, obj) === false)\r\n break;\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n const n = length - str.length;\r\n if (n <= 0)\r\n return str;\r\n return add(str, ch.repeat(n));\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.slice(0, N - 3) + '...' : str;\r\n}\r\nfunction orderedCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (isNil(a) && isNil(b))\r\n return 0;\r\n if (isNil(a))\r\n return 1;\r\n if (isNil(b))\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\nfunction argumentsToValue(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toValue)); };\r\n}\r\nfunction argumentsToNumber(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toNumber)); };\r\n}\r\n/** Return an array containing unique elements from _array_. Works with nested arrays and objects. */\r\nfunction* strictUniq(array) {\r\n const seen = new Set();\r\n for (const element of array) {\r\n const key = JSON.stringify(element);\r\n if (!seen.has(key)) {\r\n seen.add(key);\r\n yield element;\r\n }\r\n }\r\n}\n\n/**\r\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\r\n */\r\nconst TRAIT = '__liquidClass__';\r\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n /**\r\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\r\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\r\n */\r\n super(typeof err === 'string' ? err : err.message);\r\n this.context = '';\r\n if (typeof err !== 'string')\r\n Object.defineProperty(this, 'originalError', { value: err, enumerable: false });\r\n Object.defineProperty(this, 'token', { value: token, enumerable: false });\r\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false });\r\n }\r\n update() {\r\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false });\r\n this.message = mkMessage(this.message, this.token);\r\n this.stack = this.message + '\\n' + this.context +\r\n '\\n' + this.stack;\r\n if (this.originalError)\r\n this.stack += '\\nFrom ' + this.originalError.stack;\r\n }\r\n static is(obj) {\r\n return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError';\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(message, token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'RenderError';\r\n }\r\n}\r\nclass LiquidErrors extends LiquidError {\r\n constructor(errors) {\r\n super(errors[0], errors[0].token);\r\n this.errors = errors;\r\n this.name = 'LiquidErrors';\r\n const s = errors.length > 1 ? 's' : '';\r\n this.message = `${errors.length} error${s} found`;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'LiquidErrors';\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line, col] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const rowIndicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n let text = `${rowIndicator}${num}| `;\r\n const colIndicator = lineNumber === line\r\n ? '\\n' + padStart('^', col + text.length)\r\n : '';\r\n text += lines[lineNumber - 1];\r\n text += colIndicator;\r\n return text;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst WORD = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nconst PUNCTUATION = 128;\r\nfunction isWord(char) {\r\n const code = char.charCodeAt(0);\r\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD);\r\n}\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\r\nTYPES[8220] = TYPES[8221] = PUNCTUATION;\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = typeof message === 'function'\r\n ? message()\r\n : (message || `expect ${predicate} to be true`);\r\n throw new AssertionError(msg);\r\n }\r\n}\r\nfunction assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) {\r\n assert(!predicate, message);\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value));\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (value instanceof EmptyDrop)\r\n return false;\r\n value = toValue(value);\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n static is(value) {\r\n return value instanceof EmptyDrop;\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n static is(value) {\r\n return value instanceof BlankDrop;\r\n }\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length, collection, variable) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n this.name = `${variable}-${collection}`;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nclass SimpleEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n this.buffer += stringify(html);\r\n }\r\n}\n\nclass StreamedEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n this.stream = null;\r\n throw new Error('streaming not supported in browser');\r\n }\r\n}\n\nclass KeepingTypeEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n html = toValue(html);\r\n // This will only preserve the type if the value is isolated.\r\n // I.E:\r\n // {{ my-port }} -> 42\r\n // {{ my-host }}:{{ my-port }} -> 'host:42'\r\n if (typeof html !== 'string' && this.buffer === '') {\r\n this.buffer = html;\r\n }\r\n else {\r\n this.buffer = stringify(this.buffer) + stringify(html);\r\n }\r\n }\r\n}\n\nclass BlockDrop extends Drop {\r\n constructor(\r\n // the block render from layout template\r\n superBlockRender = () => '') {\r\n super();\r\n this.superBlockRender = superBlockRender;\r\n }\r\n /**\r\n * Provide parent access in child block by\r\n * {{ block.super }}\r\n */\r\n *super() {\r\n const emitter = new SimpleEmitter();\r\n yield this.superBlockRender(emitter);\r\n return emitter.buffer;\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return (arg &&\r\n isFunction(arg.equals) &&\r\n isFunction(arg.gt) &&\r\n isFunction(arg.geq) &&\r\n isFunction(arg.lt) &&\r\n isFunction(arg.leq));\r\n}\n\nconst nil = new NullDrop();\r\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': nil,\r\n 'null': nil,\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\n// Tries are built once per input object and reused: the Tokenizer rebuilds them\r\n// on every instantiation, but `input` (operators/literalValues) is a stable\r\n// reference. WeakMap-keying by `input` lets short-lived operator objects (and\r\n// their tries) be garbage collected. The returned trie is treated as read-only\r\n// by callers (matchTrie only reads it); do not mutate it.\r\nconst trieCache = new WeakMap();\r\nfunction createTrie(input) {\r\n const cached = trieCache.get(input);\r\n if (cached)\r\n return cached;\r\n const trie = {};\r\n for (const [name, data] of Object.entries(input)) {\r\n let node = trie;\r\n for (let i = 0; i < name.length; i++) {\r\n const c = name[i];\r\n node[c] = node[c] || {};\r\n if (i === name.length - 1 && isWord(name[i])) {\r\n node[c].needBoundary = true;\r\n }\r\n node = node[c];\r\n }\r\n node.data = data;\r\n node.end = true;\r\n }\r\n trieCache.set(input, trie);\r\n return trie;\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nfunction toLiquidAsync(asyncFn, syncFn) {\r\n const syncImpl = syncFn || asyncFn;\r\n return (sync, ...args) => {\r\n return sync ? syncImpl(...args) : asyncFn(...args);\r\n };\r\n}\r\n// convert an async iterator to a Promise\r\nfunction toPromise(val) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = !!state.done;\r\n value = state.value;\r\n next = 'next';\r\n try {\r\n if (isIterator(value))\r\n value = toPromise(value);\r\n if (isPromise(value))\r\n value = yield value;\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n } while (!done);\r\n return value;\r\n });\r\n}\r\n// convert an async iterator to a value in a synchronous manner\r\nfunction toValueSync(val) {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = !!state.done;\r\n value = state.value;\r\n next = 'next';\r\n if (isIterator(value)) {\r\n try {\r\n value = toValueSync(value);\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n }\r\n } while (!done);\r\n return value;\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction ordinal(d) {\r\n const date = d.getDate();\r\n if ([11, 12, 13].includes(date))\r\n return 'th';\r\n switch (date % 10) {\r\n case 1: return 'st';\r\n case 2: return 'nd';\r\n case 3: return 'rd';\r\n default: return 'th';\r\n }\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\nconst padSpaceChars = new Set('aAbBceklpP');\r\nfunction getTimezoneOffset(d, opts) {\r\n const nOffset = Math.abs(d.getTimezoneOffset());\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n}\r\nconst formatCodes = {\r\n a: (d) => d.getShortWeekdayName(),\r\n A: (d) => d.getLongWeekdayName(),\r\n b: (d) => d.getShortMonthName(),\r\n B: (d) => d.getLongMonthName(),\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n var _a;\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).slice(0, width);\r\n (_a = opts.memoryLimit) === null || _a === void 0 ? void 0 : _a.use(width - str.length);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => ordinal(d),\r\n s: (d) => Math.round(d.getTime() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().slice(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: getTimezoneOffset,\r\n Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime(d, formatStr, memoryLimit) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match, memoryLimit);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match, memoryLimit) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier, memoryLimit }));\r\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0';\r\n let padWidth = Number(width) || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n memoryLimit === null || memoryLimit === void 0 ? void 0 : memoryLimit.use(Number(padWidth) - ret.length);\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction getDateTimeFormat() {\r\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined);\r\n}\n\n// one minute in milliseconds\r\nconst OneMinute = 60000;\r\n/**\r\n * Need support both ISO8601 and RFC2822 as in major browsers & NodeJS\r\n * RFC2822: https://datatracker.ietf.org/doc/html/rfc2822#section-3.3\r\n */\r\nconst TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):?(\\d{2}))$/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3));\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3));\r\n/**\r\n * A date implementation with timezone info, just like Ruby date\r\n *\r\n * Implementation:\r\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\r\n * - rewrite getTimezoneOffset() to trick strftime\r\n */\r\nclass LiquidDate {\r\n constructor(init, locale, timezone) {\r\n this.locale = locale;\r\n this.DateTimeFormat = getDateTimeFormat();\r\n this.date = new Date(init);\r\n this.timezoneFixed = timezone !== undefined;\r\n if (timezone === undefined) {\r\n timezone = this.date.getTimezoneOffset();\r\n }\r\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone;\r\n this.timezoneName = isString(timezone) ? timezone : '';\r\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute;\r\n const time = this.date.getTime() + diff;\r\n this.displayDate = new Date(time);\r\n }\r\n getTime() {\r\n return this.displayDate.getTime();\r\n }\r\n getMilliseconds() {\r\n return this.displayDate.getMilliseconds();\r\n }\r\n getSeconds() {\r\n return this.displayDate.getSeconds();\r\n }\r\n getMinutes() {\r\n return this.displayDate.getMinutes();\r\n }\r\n getHours() {\r\n return this.displayDate.getHours();\r\n }\r\n getDay() {\r\n return this.displayDate.getDay();\r\n }\r\n getDate() {\r\n return this.displayDate.getDate();\r\n }\r\n getMonth() {\r\n return this.displayDate.getMonth();\r\n }\r\n getFullYear() {\r\n return this.displayDate.getFullYear();\r\n }\r\n toLocaleString(locale, init) {\r\n if (init === null || init === void 0 ? void 0 : init.timeZone) {\r\n return this.date.toLocaleString(locale, init);\r\n }\r\n return this.displayDate.toLocaleString(locale, init);\r\n }\r\n toLocaleTimeString(locale) {\r\n return this.displayDate.toLocaleTimeString(locale);\r\n }\r\n toLocaleDateString(locale) {\r\n return this.displayDate.toLocaleDateString(locale);\r\n }\r\n getTimezoneOffset() {\r\n return this.timezoneOffset;\r\n }\r\n getTimeZoneName() {\r\n if (this.timezoneFixed)\r\n return this.timezoneName;\r\n if (!this.DateTimeFormat)\r\n return;\r\n return this.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n getLongMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()];\r\n }\r\n getShortMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()];\r\n }\r\n getLongWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()];\r\n }\r\n getShortWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()];\r\n }\r\n valid() {\r\n return !isNaN(this.getTime());\r\n }\r\n format(options) {\r\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate);\r\n }\r\n /**\r\n * Create a Date object fixed to it's declared Timezone. Both\r\n * - 2021-08-06T02:29:00.000Z and\r\n * - 2021-08-06T02:29:00.000+08:00\r\n * will always be displayed as\r\n * - 2021-08-06 02:29:00\r\n * regardless timezoneOffset in JavaScript realm\r\n *\r\n * The implementation hack:\r\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\r\n * we create a different Date to trick strftime, it's both simpler and more performant.\r\n * Given that a template is expected to be parsed fewer times than rendered.\r\n */\r\n static createDateFixedToTimezone(dateString, locale) {\r\n const m = dateString.match(TIMEZONE_PATTERN);\r\n // representing a UTC timestamp\r\n if (m && m[1] === 'Z') {\r\n return new LiquidDate(+new Date(dateString), locale, 0);\r\n }\r\n // has a timezone specified\r\n if (m && m[2] && m[3] && m[4]) {\r\n const [, , sign, hours, minutes] = m;\r\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10));\r\n return new LiquidDate(+new Date(dateString), locale, offset);\r\n }\r\n return new LiquidDate(dateString, locale);\r\n }\r\n static getTimezoneOffset(timezoneName, date) {\r\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName });\r\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' });\r\n const localDate = new Date(localDateString);\r\n const utcDate = new Date(utcDateString);\r\n return (+utcDate - +localDate) / (60 * 1000);\r\n }\r\n}\n\nclass Limiter {\r\n constructor(resource, limit) {\r\n this.base = 0;\r\n this.message = `${resource} limit exceeded`;\r\n this.limit = limit;\r\n }\r\n use(count) {\r\n if (+count > 0) {\r\n assert(this.base + +count <= this.limit, this.message);\r\n this.base += +count;\r\n }\r\n }\r\n check(count) {\r\n if (+count > 0) {\r\n assert(+count <= this.limit, this.message);\r\n }\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n const tl = input[contentBegin] === '-';\r\n const tr = input[contentEnd - 1] === '-';\r\n let l = tl ? contentBegin + 1 : contentBegin;\r\n let r = tr ? contentEnd - 1 : contentEnd;\r\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK))\r\n l++;\r\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK))\r\n r--;\r\n this.contentRange = [l, r];\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n get content() {\r\n return this.input.slice(this.contentRange[0], this.contentRange[1]);\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length];\r\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`);\r\n this.tokenizer.skipBlank();\r\n this.args = this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length];\r\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Number, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = Number(this.getText());\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n}\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n this.content = literalValues[this.literal];\r\n }\r\n}\n\nconst operatorPrecedences = {\r\n '==': 2,\r\n '!=': 2,\r\n '>': 2,\r\n '<': 2,\r\n '>=': 2,\r\n '<=': 2,\r\n 'contains': 2,\r\n 'not': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nconst operatorTypes = {\r\n '==': 0 /* OperatorType.Binary */,\r\n '!=': 0 /* OperatorType.Binary */,\r\n '>': 0 /* OperatorType.Binary */,\r\n '<': 0 /* OperatorType.Binary */,\r\n '>=': 0 /* OperatorType.Binary */,\r\n '<=': 0 /* OperatorType.Binary */,\r\n 'contains': 0 /* OperatorType.Binary */,\r\n 'not': 1 /* OperatorType.Unary */,\r\n 'and': 0 /* OperatorType.Binary */,\r\n 'or': 0 /* OperatorType.Binary */\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n return this.operator in operatorPrecedences ? operatorPrecedences[this.operator] : 1;\r\n }\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, input, begin, end, file) {\r\n super(TokenKind.PropertyAccess, input, begin, end, file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = parseStringLiteral(this.getText());\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\n/**\r\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\r\n */\r\nclass LiquidTagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax');\r\n this.tokenizer.skipBlank();\r\n }\r\n get args() {\r\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\n/**\r\n * value expression with optional filters\r\n * e.g.\r\n * {% assign foo=\"bar\" | append: \"coo\" %}\r\n */\r\nclass FilteredValueToken extends Token {\r\n constructor(initial, filters, input, begin, end, file) {\r\n super(TokenKind.FilteredValue, input, begin, end, file);\r\n this.initial = initial;\r\n this.filters = filters;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nconst polyfill = {\r\n now: () => Date.now()\r\n};\r\nfunction getPerformance() {\r\n return (typeof global === 'object' && global.performance) ||\r\n (typeof window === 'object' && window.performance) ||\r\n polyfill;\r\n}\n\nclass Render {\r\n renderTemplatesToNodeStream(templates, ctx) {\r\n const emitter = new StreamedEmitter();\r\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\r\n .then(() => emitter.end(), err => emitter.error(err));\r\n return emitter.stream;\r\n }\r\n *renderTemplates(templates, ctx, emitter) {\r\n if (!emitter) {\r\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter();\r\n }\r\n ctx.renderLimit.check(getPerformance().now());\r\n const errors = [];\r\n for (const tpl of templates) {\r\n ctx.renderLimit.check(getPerformance().now());\r\n try {\r\n // if tpl.render supports emitter, it'll return empty `html`\r\n const html = yield tpl.render(ctx, emitter);\r\n // if not, it'll return an `html`, write to the emitter for it\r\n html && emitter.write(html);\r\n if (ctx.breakCalled || ctx.continueCalled)\r\n break;\r\n }\r\n catch (e) {\r\n const err = LiquidError.is(e) ? e : new RenderError(e, tpl);\r\n if (ctx.opts.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length) {\r\n throw new LiquidErrors(errors);\r\n }\r\n return emitter.buffer;\r\n }\r\n}\n\nclass Expression {\r\n constructor(tokens) {\r\n this.postfix = [...toPostfix(tokens)];\r\n }\r\n *evaluate(ctx, lenient) {\r\n assert(ctx, 'unable to evaluate: context not defined');\r\n const operands = [];\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = operands.pop();\r\n let result;\r\n if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) {\r\n result = yield ctx.opts.operators[token.operator](r, ctx);\r\n }\r\n else {\r\n const l = operands.pop();\r\n result = yield ctx.opts.operators[token.operator](l, r, ctx);\r\n }\r\n operands.push(result);\r\n }\r\n else {\r\n operands.push(yield evalToken(token, ctx, lenient));\r\n }\r\n }\r\n return operands[0];\r\n }\r\n valid() {\r\n return !!this.postfix.length;\r\n }\r\n}\r\nfunction* evalToken(token, ctx, lenient = false) {\r\n if (!token)\r\n return;\r\n if ('content' in token)\r\n return token.content;\r\n if (isPropertyAccessToken(token))\r\n return yield evalPropertyAccessToken(token, ctx, lenient);\r\n if (isRangeToken(token))\r\n return yield evalRangeToken(token, ctx);\r\n}\r\nfunction* evalPropertyAccessToken(token, ctx, lenient) {\r\n const props = [];\r\n for (const prop of token.props) {\r\n props.push((yield evalToken(prop, ctx, false)));\r\n }\r\n try {\r\n if (token.variable) {\r\n const variable = yield evalToken(token.variable, ctx, lenient);\r\n return yield ctx._getFromScope(variable, props);\r\n }\r\n else {\r\n return yield ctx._get(props);\r\n }\r\n }\r\n catch (e) {\r\n if (lenient && e.name === 'InternalUndefinedVariableError')\r\n return null;\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n}\r\nfunction evalQuotedToken(token) {\r\n return token.content;\r\n}\r\nfunction* evalRangeToken(token, ctx) {\r\n const low = yield evalToken(token.lhs, ctx);\r\n const high = yield evalToken(token.rhs, ctx);\r\n ctx.memoryLimit.use(high - low + 1);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n val = toValue(val);\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst defaultOperators = {\r\n '==': equals,\r\n '!=': (l, r) => !equals(l, r),\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return toValue(l) > toValue(r);\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return toValue(l) < toValue(r);\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return toValue(l) >= toValue(r);\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return toValue(l) <= toValue(r);\r\n },\r\n 'contains': (l, r) => {\r\n l = toValue(l);\r\n if (isArray(l))\r\n return l.some((i) => equals(i, r));\r\n if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf))\r\n return l.indexOf(toValue(r)) > -1;\r\n return false;\r\n },\r\n 'not': (v, ctx) => isFalsy(toValue(v), ctx),\r\n 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\r\n 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\r\n};\r\nfunction equals(lhs, rhs) {\r\n if (isComparable(lhs))\r\n return lhs.equals(rhs);\r\n if (isComparable(rhs))\r\n return rhs.equals(lhs);\r\n lhs = toValue(lhs);\r\n rhs = toValue(rhs);\r\n if (isArray(lhs)) {\r\n return isArray(rhs) && arrayEquals(lhs, rhs);\r\n }\r\n return lhs === rhs;\r\n}\r\nfunction arrayEquals(lhs, rhs) {\r\n if (lhs.length !== rhs.length)\r\n return false;\r\n return !lhs.some((value, i) => !equals(value, rhs[i]));\r\n}\r\nfunction arrayIncludes(arr, item) {\r\n return arr.some(value => equals(value, item));\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nfunction readFile(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nfunction exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return true;\r\n });\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\r\nfunction dirname(filepath) {\r\n return domResolve(filepath, '.');\r\n}\r\nconst sep = '/';\n\nvar fs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync,\n dirname: dirname,\n sep: sep\n});\n\nfunction defaultFilter(value, defaultValue, ...args) {\r\n value = toValue(value);\r\n if (isArray(value) || isString(value))\r\n return value.length ? value : defaultValue;\r\n if (value === false && (new Map(args)).get('allow_false'))\r\n return false;\r\n return isFalsy(value, this.context) ? defaultValue : value;\r\n}\r\nfunction json(value, space = 0) {\r\n return JSON.stringify(value, null, space);\r\n}\r\nfunction inspect(value, space = 0) {\r\n const ancestors = [];\r\n return JSON.stringify(value, function (_key, value) {\r\n if (typeof value !== 'object' || value === null)\r\n return value;\r\n // `this` is the object that value is contained in, i.e., its direct parent.\r\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this)\r\n ancestors.pop();\r\n if (ancestors.includes(value))\r\n return '[Circular]';\r\n ancestors.push(value);\r\n return value;\r\n }, space);\r\n}\r\nfunction to_integer(value) {\r\n return Number(value);\r\n}\r\nconst raw = {\r\n raw: true,\r\n handler: identify\r\n};\r\nvar misc = {\r\n default: defaultFilter,\r\n raw,\r\n jsonify: json,\r\n to_integer,\r\n json,\r\n inspect\r\n};\n\nconst escapeMap = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&#34;',\r\n \"'\": '&#39;'\r\n};\r\nconst unescapeMap = {\r\n '&amp;': '&',\r\n '&lt;': '<',\r\n '&gt;': '>',\r\n '&#34;': '\"',\r\n '&#39;': \"'\"\r\n};\r\nfunction escape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction xml_escape(str) {\r\n return escape.call(this, str);\r\n}\r\nfunction unescape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escape_once(str) {\r\n return escape.call(this, unescape.call(this, str));\r\n}\r\nfunction newline_to_br(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '<br />\\n');\r\n}\r\n// Raw-text blocks (HTML5) plus '<...>' as the catch-all kind; a regex\r\n// equivalent is O(n^2) in V8 on unclosed openers.\r\nfunction strip_html(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const blocks = new Map([['<script', '</script>'], ['<style', '</style>'], ['<!--', '-->'], ['<', '>']]);\r\n let out = '';\r\n let i = 0;\r\n while (i < str.length) {\r\n const lt = str.indexOf('<', i);\r\n if (lt < 0)\r\n return out + str.slice(i);\r\n out += str.slice(i, lt);\r\n for (const [opener, closer] of blocks) {\r\n if (!str.startsWith(opener, lt))\r\n continue;\r\n const e = str.indexOf(closer, lt + opener.length);\r\n if (e >= 0) {\r\n i = e + closer.length;\r\n break;\r\n }\r\n blocks.delete(opener);\r\n }\r\n if (i <= lt)\r\n return out + str.slice(lt);\r\n }\r\n return out;\r\n}\n\nvar htmlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n escape: escape,\n xml_escape: xml_escape,\n escape_once: escape_once,\n newline_to_br: newline_to_br,\n strip_html: strip_html\n});\n\nclass MapFS {\r\n constructor(mapping) {\r\n this.mapping = mapping;\r\n this.sep = '/';\r\n }\r\n exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.existsSync(filepath);\r\n });\r\n }\r\n existsSync(filepath) {\r\n return !isNil(this.mapping[filepath]);\r\n }\r\n readFile(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.readFileSync(filepath);\r\n });\r\n }\r\n readFileSync(filepath) {\r\n const content = this.mapping[filepath];\r\n if (isNil(content))\r\n throw new Error(`ENOENT: ${filepath}`);\r\n return content;\r\n }\r\n dirname(filepath) {\r\n const segments = filepath.split(this.sep);\r\n segments.pop();\r\n return segments.join(this.sep);\r\n }\r\n resolve(dir, file, ext) {\r\n file += ext;\r\n if (dir === '.')\r\n return file;\r\n const segments = dir.split(/\\/+/);\r\n for (const segment of file.split(this.sep)) {\r\n if (segment === '.' || segment === '')\r\n continue;\r\n else if (segment === '..') {\r\n if (segments.length > 1 || segments[0] !== '')\r\n segments.pop();\r\n }\r\n else\r\n segments.push(segment);\r\n }\r\n return segments.join(this.sep);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n layouts: ['.'],\r\n partials: ['.'],\r\n relativeReference: true,\r\n jekyllInclude: false,\r\n keyValueSeparator: ':',\r\n cache: undefined,\r\n extname: '',\r\n fs: fs,\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\r\n locale: '',\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n preserveTimezones: false,\r\n strictFilters: false,\r\n strictVariables: false,\r\n ownPropertyOnly: true,\r\n lenientIf: false,\r\n globals: {},\r\n keepOutputType: false,\r\n operators: defaultOperators,\r\n memoryLimit: Infinity,\r\n parseLimit: Infinity,\r\n renderLimit: Infinity\r\n};\r\nfunction normalize(options) {\r\n var _a, _b;\r\n if (options.hasOwnProperty('root')) {\r\n if (!options.hasOwnProperty('partials'))\r\n options.partials = options.root;\r\n if (!options.hasOwnProperty('layouts'))\r\n options.layouts = options.root;\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options);\r\n if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) {\r\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning');\r\n options.relativeReference = false;\r\n }\r\n options.root = normalizeDirectoryList(options.root);\r\n options.partials = normalizeDirectoryList(options.partials);\r\n options.layouts = normalizeDirectoryList(options.layouts);\r\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape);\r\n if (!options.locale) {\r\n options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US';\r\n }\r\n if (options.templates) {\r\n options.fs = new MapFS(options.templates);\r\n options.relativeReference = true;\r\n options.root = options.partials = options.layouts = '.';\r\n }\r\n return options;\r\n}\r\nfunction getOutputEscapeFunction(nameOrFunction) {\r\n if (nameOrFunction === 'escape')\r\n return escape;\r\n if (nameOrFunction === 'json')\r\n return misc.json;\r\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');\r\n return nameOrFunction;\r\n}\r\nfunction normalizeDirectoryList(value) {\r\n let list = [];\r\n if (isArray(value))\r\n list = value;\r\n if (isString(value))\r\n list = [value];\r\n return list;\r\n}\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Tokenizer {\r\n constructor(input, operators = defaultOptions.operators, file, range) {\r\n this.input = input;\r\n this.file = file;\r\n this.rawBeginAt = -1;\r\n this.p = range ? range[0] : 0;\r\n this.N = range ? range[1] : input.length;\r\n this.opTrie = createTrie(operators);\r\n this.literalTrie = createTrie(literalValues);\r\n }\r\n readExpression() {\r\n return new Expression(this.readExpressionTokens());\r\n }\r\n *readExpressionTokens() {\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (operator) {\r\n yield operator;\r\n continue;\r\n }\r\n const operand = this.readValue();\r\n if (operand) {\r\n yield operand;\r\n continue;\r\n }\r\n return;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.opTrie);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n matchTrie(trie) {\r\n let node = trie;\r\n let i = this.p;\r\n let info;\r\n while (node[this.input[i]] && i < this.N) {\r\n node = node[this.input[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && isWord(this.peek(i - this.p)))\r\n return -1;\r\n return i;\r\n }\r\n readFilteredValue() {\r\n const begin = this.p;\r\n const initial = this.readExpression();\r\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`);\r\n const filters = this.readFilters();\r\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n this.assert(this.read() === '|', `expected \"|\" before filter`);\r\n const name = this.readIdentifier();\r\n if (!name.size()) {\r\n this.assert(this.end(), `expected filter name`);\r\n return null;\r\n }\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n this.skipBlank();\r\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`);\r\n } while (this.peek() === ',');\r\n }\r\n else if (this.peek() === '|' || this.end()) ;\r\n else {\r\n throw this.error('expected \":\" after filter name');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]);\r\n }\r\n readHTMLToken(stopStrings) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n if (stopStrings.some(str => this.match(str)))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const begin = this.p;\r\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\r\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readToDelimiter(delimiter, respectQuoted = false) {\r\n this.skipBlank();\r\n while (this.p < this.N) {\r\n if (respectQuoted && (this.peekType() & QUOTE)) {\r\n this.readQuoted();\r\n continue;\r\n }\r\n ++this.p;\r\n if (this.rmatch(delimiter))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readOutputToken(options = defaultOptions) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\r\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n readLiquidTagTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readLiquidTagToken(options);\r\n token && tokens.push(token);\r\n }\r\n return tokens;\r\n }\r\n readLiquidTagToken(options) {\r\n this.skipBlank();\r\n if (this.end())\r\n return;\r\n const begin = this.p;\r\n this.readToDelimiter('\\n');\r\n const end = this.p;\r\n return new LiquidTagToken(this.input, begin, end, options, this.file);\r\n }\r\n error(msg, pos = this.p) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file));\r\n }\r\n assert(pred, msg, pos) {\r\n if (!pred)\r\n throw this.error(typeof msg === 'function' ? msg() : msg, pos);\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32));\r\n }\r\n /**\r\n * @deprecated use #readIdentifier instead\r\n */\r\n readWord() {\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (!this.end() && isWord(this.peek()))\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readNonEmptyIdentifier() {\r\n const id = this.readIdentifier();\r\n return id.size() ? id : undefined;\r\n }\r\n readTagName() {\r\n this.skipBlank();\r\n // Handle inline comment tags\r\n if (this.input[this.p] === '#')\r\n return this.input.slice(this.p, ++this.p);\r\n return this.readIdentifier().getText();\r\n }\r\n readHashes(jekyllStyle) {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash(jekyllStyle);\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash(jekyllStyle) {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readNonEmptyIdentifier();\r\n if (!name)\r\n return;\r\n let value;\r\n this.skipBlank();\r\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':');\r\n if (this.peek() === sep) {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p, this.N);\r\n }\r\n advance(step = 1) {\r\n this.p += step;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n read() {\r\n return this.input[this.p++];\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const variable = this.readLiteral() || this.readQuoted() || this.readRange() || this.readNumber();\r\n const props = this.readProperties(!variable);\r\n if (!props.length)\r\n return variable;\r\n return new PropertyAccessToken(variable, props, this.input, begin, this.p);\r\n }\r\n readScopeValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const props = this.readProperties();\r\n if (!props.length)\r\n return undefined;\r\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p);\r\n }\r\n readProperties(isBegin = true) {\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.assert(this.readTo(']') !== -1, '[ not closed');\r\n props.push(prop);\r\n continue;\r\n }\r\n if (isBegin && !props.length) {\r\n const prop = this.readNonEmptyIdentifier();\r\n if (prop) {\r\n props.push(prop);\r\n continue;\r\n }\r\n }\r\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readNonEmptyIdentifier();\r\n if (!prop)\r\n break;\r\n props.push(prop);\r\n continue;\r\n }\r\n break;\r\n }\r\n return props;\r\n }\r\n readNumber() {\r\n this.skipBlank();\r\n let decimalFound = false;\r\n let digitFound = false;\r\n let n = 0;\r\n if (this.peekType() & SIGN)\r\n n++;\r\n while (this.p + n <= this.N) {\r\n if (this.peekType(n) & NUMBER) {\r\n digitFound = true;\r\n n++;\r\n }\r\n else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\r\n if (decimalFound || !digitFound)\r\n return;\r\n decimalFound = true;\r\n n++;\r\n }\r\n else\r\n break;\r\n }\r\n if (digitFound && !isWord(this.peek(n))) {\r\n const num = new NumberToken(this.input, this.p, this.p + n, this.file);\r\n this.advance(n);\r\n return num;\r\n }\r\n }\r\n readLiteral() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.literalTrie);\r\n if (end === -1)\r\n return;\r\n const literal = new LiteralToken(this.input, this.p, end, this.file);\r\n this.p = end;\r\n return literal;\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === '.' && this.read() === '.', 'invalid range syntax');\r\n const rhs = this.readValueOrThrow();\r\n this.skipBlank();\r\n this.assert(this.read() === ')', 'invalid range syntax');\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n *readFileNameTemplate(options) {\r\n const { outputDelimiterLeft } = options;\r\n const htmlStopStrings = [',', ' ', '\\r', '\\n', '\\t', outputDelimiterLeft];\r\n const htmlStopStringSet = new Set(htmlStopStrings);\r\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\r\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\r\n yield this.match(outputDelimiterLeft)\r\n ? this.readOutputToken(options)\r\n : this.readHTMLToken(htmlStopStrings);\r\n }\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.p + n >= this.N ? '' : this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h.call(this, arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, remainTokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n this.liquid = liquid;\r\n this.tokenizer = token.tokenizer;\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(input, jekyllStyle) {\r\n this.hash = {};\r\n const tokenizer = input instanceof Tokenizer ? input : new Tokenizer(input, {});\r\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createTagClass(options) {\r\n return class extends Tag {\r\n constructor(token, tokens, liquid) {\r\n super(token, tokens, liquid);\r\n if (isFunction(options.parse)) {\r\n options.parse.call(this, token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx));\r\n return yield options.render.call(this, ctx, emitter, hash);\r\n }\r\n };\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(token, options, liquid) {\r\n this.token = token;\r\n this.name = token.name;\r\n this.handler = isFunction(options)\r\n ? options\r\n : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify);\r\n this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw);\r\n this.args = token.args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(input, liquid) {\r\n this.filters = [];\r\n const token = typeof input === 'string'\r\n ? new Tokenizer(input, liquid.options.operators).readFilteredValue()\r\n : input;\r\n this.initial = token.initial;\r\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid));\r\n }\r\n *value(ctx, lenient) {\r\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default');\r\n let val = yield this.initial.evaluate(ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n getFilter(liquid, name) {\r\n const impl = liquid.filters[name];\r\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, liquid) {\r\n var _a;\r\n super(token);\r\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange);\r\n this.value = new Value(tokenizer.readFilteredValue(), liquid);\r\n const filters = this.value.filters;\r\n const outputEscape = liquid.options.outputEscape;\r\n if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) {\r\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0);\r\n filters.push(new Filter(token, outputEscape, liquid));\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\n/**\r\n * A variable's segments and location, which can be coerced to a string.\r\n */\r\nclass Variable {\r\n constructor(segments, location) {\r\n this.segments = segments;\r\n this.location = location;\r\n }\r\n toString() {\r\n return segmentsString(this.segments, true);\r\n }\r\n /** Return this variable's segments as an array, possibly with nested arrays for nested paths. */\r\n toArray() {\r\n function* _visit(...segments) {\r\n for (const segment of segments) {\r\n if (segment instanceof Variable) {\r\n yield Array.from(_visit(...segment.segments));\r\n }\r\n else {\r\n yield segment;\r\n }\r\n }\r\n }\r\n return Array.from(_visit(...this.segments));\r\n }\r\n}\r\n/**\r\n * Group variables by the string representation of their root segment.\r\n */\r\nclass VariableMap {\r\n constructor() {\r\n this.map = new Map();\r\n }\r\n get(key) {\r\n const k = segmentsString([key.segments[0]]);\r\n if (!this.map.has(k)) {\r\n this.map.set(k, []);\r\n }\r\n return this.map.get(k);\r\n }\r\n has(key) {\r\n return this.map.has(segmentsString([key.segments[0]]));\r\n }\r\n push(variable) {\r\n this.get(variable).push(variable);\r\n }\r\n asObject() {\r\n return Object.fromEntries(this.map);\r\n }\r\n}\r\nconst defaultStaticAnalysisOptions = {\r\n partials: true\r\n};\r\nfunction* _analyze(templates, partials, sync) {\r\n const variables = new VariableMap();\r\n const globals = new VariableMap();\r\n const locals = new VariableMap();\r\n const rootScope = new DummyScope(new Set());\r\n // Names of partial templates that we've already analyzed.\r\n const seen = new Set();\r\n function updateVariables(variable, scope) {\r\n variables.push(variable);\r\n const aliased = scope.alias(variable);\r\n if (aliased !== undefined) {\r\n const root = aliased.segments[0];\r\n // TODO: What if a a template renders a rendered template? Do we need scope.parent?\r\n if (isString(root) && !rootScope.has(root)) {\r\n globals.push(aliased);\r\n }\r\n }\r\n else {\r\n const root = variable.segments[0];\r\n if (isString(root) && !scope.has(root)) {\r\n globals.push(variable);\r\n }\r\n }\r\n // Recurse for nested Variables\r\n for (const segment of variable.segments) {\r\n if (segment instanceof Variable) {\r\n updateVariables(segment, scope);\r\n }\r\n }\r\n }\r\n function* visit(template, scope) {\r\n if (template.arguments) {\r\n for (const arg of template.arguments()) {\r\n for (const variable of extractVariables(arg)) {\r\n updateVariables(variable, scope);\r\n }\r\n }\r\n }\r\n if (template.localScope) {\r\n for (const ident of template.localScope()) {\r\n scope.add(ident.content);\r\n scope.deleteAlias(ident.content);\r\n const [row, col] = ident.getPosition();\r\n locals.push(new Variable([ident.content], { row, col, file: ident.file }));\r\n }\r\n }\r\n if (template.children) {\r\n if (template.partialScope) {\r\n const partial = template.partialScope();\r\n if (partial === undefined) {\r\n // Layouts, for example, can have children that are not partials.\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n return;\r\n }\r\n if (seen.has(partial.name))\r\n return;\r\n const partialScopeNames = new Set();\r\n const partialScope = partial.isolated\r\n ? new DummyScope(partialScopeNames)\r\n : scope.push(partialScopeNames);\r\n for (const name of partial.scope) {\r\n if (isString(name)) {\r\n partialScopeNames.add(name);\r\n }\r\n else {\r\n const [alias, argument] = name;\r\n partialScopeNames.add(alias);\r\n const variables = Array.from(extractVariables(argument));\r\n if (variables.length) {\r\n partialScope.setAlias(alias, variables[0].segments);\r\n }\r\n }\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, partialScope);\r\n seen.add(partial.name);\r\n }\r\n partialScope.pop();\r\n }\r\n else {\r\n if (template.blockScope) {\r\n scope.push(new Set(template.blockScope()));\r\n }\r\n for (const child of (yield template.children(partials, sync))) {\r\n yield visit(child, scope);\r\n }\r\n if (template.blockScope) {\r\n scope.pop();\r\n }\r\n }\r\n }\r\n }\r\n for (const template of templates) {\r\n yield visit(template, rootScope);\r\n }\r\n return {\r\n variables: variables.asObject(),\r\n globals: globals.asObject(),\r\n locals: locals.asObject()\r\n };\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyze(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toPromise(_analyze(template, opts.partials, false));\r\n}\r\n/**\r\n * Statically analyze a template and report variable usage.\r\n */\r\nfunction analyzeSync(template, options = {}) {\r\n const opts = Object.assign(Object.assign({}, defaultStaticAnalysisOptions), options);\r\n return toValueSync(_analyze(template, opts.partials, true));\r\n}\r\n/**\r\n * A stack to manage scopes while traversing templates during static analysis.\r\n */\r\nclass DummyScope {\r\n constructor(globals) {\r\n this.stack = [{ names: globals, aliases: new Map() }];\r\n }\r\n /** Return true if `name` is in scope. */\r\n has(name) {\r\n for (const scope of this.stack) {\r\n if (scope.names.has(name)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n push(scope) {\r\n this.stack.push({ names: scope, aliases: new Map() });\r\n return this;\r\n }\r\n pop() {\r\n var _a;\r\n return (_a = this.stack.pop()) === null || _a === void 0 ? void 0 : _a.names;\r\n }\r\n // Add a name to the template scope.\r\n add(name) {\r\n this.stack[0].names.add(name);\r\n }\r\n /** Return the variable that `variable` aliases, or `variable` if it doesn't alias anything. */\r\n alias(variable) {\r\n const root = variable.segments[0];\r\n if (!isString(root))\r\n return undefined;\r\n const alias = this.getAlias(root);\r\n if (alias === undefined)\r\n return undefined;\r\n return new Variable([...alias, ...variable.segments.slice(1)], variable.location);\r\n }\r\n // TODO: `from` could be a path with multiple segments, like `include.x`.\r\n setAlias(from, to) {\r\n this.stack[this.stack.length - 1].aliases.set(from, to);\r\n }\r\n deleteAlias(name) {\r\n this.stack[this.stack.length - 1].aliases.delete(name);\r\n }\r\n getAlias(name) {\r\n for (const scope of this.stack) {\r\n if (scope.aliases.has(name)) {\r\n return scope.aliases.get(name);\r\n }\r\n // If a scope has defined `name`, then it masks aliases in parent scopes.\r\n if (scope.names.has(name)) {\r\n return undefined;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\nfunction* extractVariables(value) {\r\n if (isValueToken(value)) {\r\n yield* extractValueTokenVariables(value);\r\n }\r\n else if (value instanceof Value) {\r\n yield* extractFilteredValueVariables(value);\r\n }\r\n}\r\nfunction* extractFilteredValueVariables(value) {\r\n for (const token of value.initial.postfix) {\r\n if (isValueToken(token)) {\r\n yield* extractValueTokenVariables(token);\r\n }\r\n }\r\n for (const filter of value.filters) {\r\n for (const arg of filter.args) {\r\n if (isKeyValuePair(arg) && arg[1]) {\r\n yield* extractValueTokenVariables(arg[1]);\r\n }\r\n else if (isValueToken(arg)) {\r\n yield* extractValueTokenVariables(arg);\r\n }\r\n }\r\n }\r\n}\r\nfunction* extractValueTokenVariables(token) {\r\n if (isRangeToken(token)) {\r\n yield* extractValueTokenVariables(token.lhs);\r\n yield* extractValueTokenVariables(token.rhs);\r\n }\r\n else if (isPropertyAccessToken(token)) {\r\n yield extractPropertyAccessVariable(token);\r\n }\r\n}\r\nfunction extractPropertyAccessVariable(token) {\r\n const segments = [];\r\n // token is not guaranteed to have `file` set. We'll try to get it from a prop if not.\r\n let file = token.file;\r\n // Here we're flattening the first segment of a path if it is a nested path.\r\n const root = token.props[0];\r\n file = file || root.file;\r\n if (isQuotedToken(root) || isNumberToken(root) || isWordToken(root)) {\r\n segments.push(root.content);\r\n }\r\n else if (isPropertyAccessToken(root)) {\r\n // Flatten paths that start with a nested path.\r\n segments.push(...extractPropertyAccessVariable(root).segments);\r\n }\r\n for (const prop of token.props.slice(1)) {\r\n file = file || prop.file;\r\n if (isQuotedToken(prop) || isNumberToken(prop) || isWordToken(prop)) {\r\n segments.push(prop.content);\r\n }\r\n else if (isPropertyAccessToken(prop)) {\r\n segments.push(extractPropertyAccessVariable(prop));\r\n }\r\n }\r\n const [row, col] = token.getPosition();\r\n return new Variable(segments, {\r\n row,\r\n col,\r\n file\r\n });\r\n}\r\n// This is used to detect segments that can be represented with dot notation\r\n// when creating a string representation of VariableSegments.\r\nconst RE_PROPERTY = /^[\\u0080-\\uFFFFa-zA-Z_][\\u0080-\\uFFFFa-zA-Z0-9_-]*$/;\r\n/**\r\n * Return a string representation of segments using dot notation where possible.\r\n * @param segments - The property names and array indices that make up a path to a variable.\r\n * @param bracketedRoot - If false (the default), don't surround the root segment with square brackets.\r\n */\r\nfunction segmentsString(segments, bracketedRoot = false) {\r\n const buf = [];\r\n const root = segments[0];\r\n if (isString(root)) {\r\n if (!bracketedRoot || root.match(RE_PROPERTY)) {\r\n buf.push(`${root}`);\r\n }\r\n else {\r\n buf.push(`['${root}']`);\r\n }\r\n }\r\n for (const segment of segments.slice(1)) {\r\n if (segment instanceof Variable) {\r\n buf.push(`[${segmentsString(segment.segments)}]`);\r\n }\r\n else if (isString(segment)) {\r\n if (segment.match(RE_PROPERTY)) {\r\n buf.push(`.${segment}`);\r\n }\r\n else {\r\n buf.push(`['${segment}']`);\r\n }\r\n }\r\n else {\r\n buf.push(`[${segment}]`);\r\n }\r\n }\r\n return buf.join('');\r\n}\n\nvar LookupType;\r\n(function (LookupType) {\r\n LookupType[\"Partials\"] = \"partials\";\r\n LookupType[\"Layouts\"] = \"layouts\";\r\n LookupType[\"Root\"] = \"root\";\r\n})(LookupType || (LookupType = {}));\r\nclass Loader {\r\n constructor(options) {\r\n var _a, _b, _c, _d;\r\n this.options = options;\r\n if (options.relativeReference) {\r\n const sep = options.fs.sep;\r\n assert(sep, '`fs.sep` is required for relative reference');\r\n const prefixes = ['.' + sep, '..' + sep, './', '../'];\r\n this.shouldLoadRelative = (referencedFile) => prefixes.some(prefix => referencedFile.startsWith(prefix));\r\n }\r\n else {\r\n this.shouldLoadRelative = (_referencedFile) => false;\r\n }\r\n const fs = options.fs;\r\n this.contains = toLiquidAsync(((_a = fs.contains) === null || _a === void 0 ? void 0 : _a.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return true; })), ((_b = fs.containsSync) === null || _b === void 0 ? void 0 : _b.bind(fs)) || (() => true));\r\n this.exists = toLiquidAsync(((_c = fs.exists) === null || _c === void 0 ? void 0 : _c.bind(fs)) || (() => __awaiter(this, void 0, void 0, function* () { return false; })), (_d = fs.existsSync) === null || _d === void 0 ? void 0 : _d.bind(fs));\r\n }\r\n *lookup(file, type, sync, currentFile) {\r\n const dirs = this.options[type];\r\n for (const filepath of this.candidates(file, dirs, currentFile)) {\r\n let allowed = false;\r\n for (const dir of dirs) {\r\n if (yield this.contains(!!sync, dir, filepath)) {\r\n allowed = true;\r\n break;\r\n }\r\n }\r\n if (!allowed)\r\n continue;\r\n if (yield this.exists(!!sync, filepath))\r\n return filepath;\r\n }\r\n throw this.lookupError(file, dirs);\r\n }\r\n *candidates(file, dirs, currentFile) {\r\n const { fs, extname } = this.options;\r\n if (this.shouldLoadRelative(file) && currentFile) {\r\n const referenced = fs.resolve(this.dirname(currentFile), file, extname);\r\n yield referenced;\r\n }\r\n for (const dir of dirs) {\r\n const referenced = fs.resolve(dir, file, extname);\r\n yield referenced;\r\n }\r\n if (fs.fallback !== undefined) {\r\n const filepath = fs.fallback(file);\r\n if (filepath !== undefined)\r\n yield filepath;\r\n }\r\n }\r\n dirname(path) {\r\n const fs = this.options.fs;\r\n assert(fs.dirname, '`fs.dirname` is required for relative reference');\r\n return fs.dirname(path);\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n var _a, _b;\r\n this.liquid = liquid;\r\n this.cache = this.liquid.options.cache;\r\n this.fs = this.liquid.options.fs;\r\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile;\r\n this.loader = new Loader(this.liquid.options);\r\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit);\r\n this.readFile = toLiquidAsync(((_a = this.fs.readFile) === null || _a === void 0 ? void 0 : _a.bind(this.fs)) || (() => __awaiter(this, void 0, void 0, function* () { throw new Error('readFile not implemented'); })), (_b = this.fs.readFileSync) === null || _b === void 0 ? void 0 : _b.bind(this.fs));\r\n }\r\n parse(html, filepath) {\r\n html = String(html);\r\n this.parseLimit.use(html.length);\r\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options);\r\n return this.parseTokens(tokens);\r\n }\r\n parseTokens(tokens) {\r\n let token;\r\n const templates = [];\r\n const errors = [];\r\n while ((token = tokens.shift())) {\r\n try {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n catch (err) {\r\n if (this.liquid.options.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length)\r\n throw new LiquidErrors(errors);\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n const TagClass = this.liquid.tags[token.name];\r\n assert(TagClass, `tag \"${token.name}\" not found`);\r\n return new TagClass(token, remainTokens, this.liquid, this);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n if (LiquidError.is(e))\r\n throw e;\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n *_parseFileCached(file, sync, type = LookupType.Root, currentFile) {\r\n const cache = this.cache;\r\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file;\r\n const tpls = yield cache.read(key);\r\n if (tpls)\r\n return tpls;\r\n const task = this._parseFile(file, sync, type, currentFile);\r\n // sync mode: exec the task and cache the result\r\n // async mode: cache the task before exec\r\n const taskOrTpl = sync ? yield task : toPromise(task);\r\n cache.write(key, taskOrTpl);\r\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\r\n try {\r\n return yield taskOrTpl;\r\n }\r\n catch (err) {\r\n cache.remove(key);\r\n throw err;\r\n }\r\n }\r\n *_parseFile(file, sync, type = LookupType.Root, currentFile) {\r\n const filepath = yield this.loader.lookup(file, type, sync, currentFile);\r\n return this.parse(yield this.readFile(!!sync, filepath), filepath);\r\n }\r\n}\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"FilteredValue\"] = 4096] = \"FilteredValue\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction isValueToken(val) {\r\n // valueTokenBitMask = TokenKind.Number | TokenKind.Literal | TokenKind.Quoted | TokenKind.PropertyAccess | TokenKind.Range\r\n return (getKind(val) & 1667) > 0;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken,\n isValueToken: isValueToken\n});\n\nfunction createScope(from) {\r\n const scope = Object.create(null);\r\n if (from)\r\n Object.assign(scope, from);\r\n return scope;\r\n}\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit } = {}) {\r\n var _a, _b, _c, _d, _e;\r\n /**\r\n * insert a Context-level empty scope,\r\n * for tags like `{% capture %}` `{% assign %}` to operate\r\n */\r\n this.scopes = [createScope()];\r\n this.registers = {};\r\n this.breakCalled = false;\r\n this.continueCalled = false;\r\n this.sync = !!renderOptions.sync;\r\n this.opts = opts;\r\n this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals;\r\n this.environments = isObject(env) ? env : Object(env);\r\n this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables;\r\n this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly;\r\n this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit);\r\n this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit));\r\n }\r\n getRegister(key, defaultValue = undefined) {\r\n return (this.registers[key] = this.registers[key] || defaultValue);\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n /**\r\n * @deprecated use `_get()` or `getSync()` instead\r\n */\r\n get(paths) {\r\n return this.getSync(paths);\r\n }\r\n getSync(paths) {\r\n return toValueSync(this._get(paths));\r\n }\r\n *_get(paths) {\r\n const scope = this.findScope(paths[0]); // first prop should always be a string\r\n return yield this._getFromScope(scope, paths);\r\n }\r\n /**\r\n * @deprecated use `_get()` instead\r\n */\r\n getFromScope(scope, paths) {\r\n return toValueSync(this._getFromScope(scope, paths));\r\n }\r\n *_getFromScope(scope, paths, strictVariables = this.strictVariables) {\r\n if (isString(paths))\r\n paths = paths.split('.');\r\n for (let i = 0; i < paths.length; i++) {\r\n scope = yield this.readProperty(scope, paths[i]);\r\n if (strictVariables && isUndefined(scope)) {\r\n throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.'));\r\n }\r\n }\r\n return scope;\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n spawn(scope = {}) {\r\n return new Context(scope, this.opts, {\r\n sync: this.sync,\r\n globals: this.globals,\r\n strictVariables: this.strictVariables,\r\n ownPropertyOnly: this.ownPropertyOnly\r\n }, {\r\n renderLimit: this.renderLimit,\r\n memoryLimit: this.memoryLimit\r\n });\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n readProperty(obj, key) {\r\n obj = toLiquid(obj);\r\n key = toValue(key);\r\n if (isNil(obj))\r\n return obj;\r\n if (isArray(obj) && key < 0)\r\n return obj[obj.length + +key];\r\n const value = readJSProperty(obj, key, this.ownPropertyOnly);\r\n if (value === undefined && obj instanceof Drop)\r\n return obj.liquidMethodMissing(key, this);\r\n if (isFunction(value))\r\n return value.call(obj);\r\n if (key === 'size')\r\n return readSize(obj);\r\n else if (key === 'first')\r\n return readFirst(obj);\r\n else if (key === 'last')\r\n return readLast(obj);\r\n return value;\r\n }\r\n}\r\nfunction readJSProperty(obj, key, ownPropertyOnly) {\r\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop))\r\n return undefined;\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined)\r\n return obj['size'];\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n if (typeof obj === 'object')\r\n return Object.keys(obj).length;\r\n}\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\n\nconst abs = argumentsToNumber(Math.abs);\r\nconst at_least = argumentsToNumber(Math.max);\r\nconst at_most = argumentsToNumber(Math.min);\r\nconst ceil = argumentsToNumber(Math.ceil);\r\nconst divided_by = argumentsToNumber((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor);\r\nconst floor = argumentsToNumber(Math.floor);\r\nconst minus = argumentsToNumber((v, arg) => v - arg);\r\nconst plus = argumentsToNumber((lhs, rhs) => lhs + rhs);\r\nconst modulo = argumentsToNumber((v, arg) => v % arg);\r\nconst times = argumentsToNumber((v, arg) => v * arg);\r\nfunction round(v, arg = 0) {\r\n v = toNumber(v);\r\n arg = toNumber(arg);\r\n const amp = Math.pow(10, arg);\r\n const scaled = (v * amp) * (1 + Number.EPSILON);\r\n return Math.round(scaled) / amp;\r\n}\n\nvar mathFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n abs: abs,\n at_least: at_least,\n at_most: at_most,\n ceil: ceil,\n divided_by: divided_by,\n floor: floor,\n minus: minus,\n plus: plus,\n modulo: modulo,\n times: times,\n round: round\n});\n\nconst url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ');\r\nconst url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+');\r\nconst cgi_escape = (x) => encodeURIComponent(stringify(x))\r\n .replace(/%20/g, '+')\r\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());\r\nconst uri_escape = (x) => encodeURI(stringify(x))\r\n .replace(/%5B/g, '[')\r\n .replace(/%5D/g, ']');\r\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug;\r\nconst rSlugifyReplacers = {\r\n 'raw': /\\s+/g,\r\n 'default': rSlugifyDefault,\r\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\r\n 'ascii': /[^A-Za-z0-9]+/g,\r\n 'latin': rSlugifyDefault,\r\n 'none': null\r\n};\r\nfunction slugify(str, mode = 'default', cased = false) {\r\n str = stringify(str);\r\n const replacer = rSlugifyReplacers[mode];\r\n if (replacer) {\r\n if (mode === 'latin')\r\n str = removeAccents(str);\r\n str = str.replace(replacer, '-').replace(/^-|-$/g, '');\r\n }\r\n return cased ? str : str.toLowerCase();\r\n}\r\nfunction removeAccents(str) {\r\n return str.replace(/[àáâãäå]/g, 'a')\r\n .replace(/[æ]/g, 'ae')\r\n .replace(/[ç]/g, 'c')\r\n .replace(/[èéêë]/g, 'e')\r\n .replace(/[ìíîï]/g, 'i')\r\n .replace(/[ð]/g, 'd')\r\n .replace(/[ñ]/g, 'n')\r\n .replace(/[òóôõöø]/g, 'o')\r\n .replace(/[ùúûü]/g, 'u')\r\n .replace(/[ýÿ]/g, 'y')\r\n .replace(/[ß]/g, 'ss')\r\n .replace(/[œ]/g, 'oe')\r\n .replace(/[þ]/g, 'th')\r\n .replace(/[ẞ]/g, 'SS')\r\n .replace(/[Œ]/g, 'OE')\r\n .replace(/[Þ]/g, 'TH');\r\n}\n\nvar urlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n url_decode: url_decode,\n url_encode: url_encode,\n cgi_escape: cgi_escape,\n uri_escape: uri_escape,\n slugify: slugify\n});\n\nconst join = argumentsToValue(function (v, arg) {\r\n const array = toArray(v);\r\n const sep = isNil(arg) ? ' ' : stringify(arg);\r\n const complexity = array.length * (1 + sep.length);\r\n this.context.memoryLimit.use(complexity);\r\n return array.join(sep);\r\n});\r\nconst last$1 = argumentsToValue((v) => isArrayLike(v) ? last(v) : '');\r\nconst first = argumentsToValue((v) => isArrayLike(v) ? v[0] : '');\r\nconst reverse = argumentsToValue(function (v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].reverse();\r\n});\r\nfunction* sortBy(arr, property, comparator) {\r\n const values = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n values.push([\r\n item,\r\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\r\n ]);\r\n }\r\n return values.sort((lhs, rhs) => comparator(lhs[1], rhs[1])).map(tuple => tuple[0]);\r\n}\r\nfunction* sort(arr, property) {\r\n return yield* sortBy.call(this, arr, property, orderedCompare);\r\n}\r\nfunction* sort_natural(arr, property) {\r\n return yield* sortBy.call(this, arr, property, caseInsensitiveCompare);\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction* map(arr, property) {\r\n const results = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n results.push(yield this.context._getFromScope(item, stringify(property), false));\r\n }\r\n return results;\r\n}\r\nfunction* sum(arr, property) {\r\n let sum = 0;\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item);\r\n sum += Number.isNaN(data) ? 0 : data;\r\n }\r\n return sum;\r\n}\r\nfunction compact(arr) {\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n return array.filter(x => !isNil(toValue(x)));\r\n}\r\nfunction concat(v, arg = []) {\r\n const lhs = toArray(v);\r\n const rhs = toArray(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs.concat(rhs);\r\n}\r\nfunction push(v, arg) {\r\n return concat.call(this, v, [arg]);\r\n}\r\nfunction unshift(v, arg) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.unshift(arg);\r\n return clone;\r\n}\r\nfunction pop(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.pop();\r\n return clone;\r\n}\r\nfunction shift(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.shift();\r\n return clone;\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n begin = begin < 0 ? v.length + begin : begin;\r\n this.context.memoryLimit.use(length);\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction expectedMatcher(expected) {\r\n if (this.context.opts.jekyllWhere) {\r\n return (v) => EmptyDrop.is(expected) ? equals(v, expected) : (isArray(v) ? arrayIncludes(v, expected) : equals(v, expected));\r\n }\r\n else if (expected === undefined) {\r\n return (v) => isTruthy(v, this.context);\r\n }\r\n else {\r\n return (v) => equals(v, expected);\r\n }\r\n}\r\nfunction* filter(include, arr, property, expected) {\r\n const values = [];\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n for (const item of arr) {\r\n values.push(yield evalToken(token, this.context.spawn(item)));\r\n }\r\n const matcher = expectedMatcher.call(this, expected);\r\n return arr.filter((_, i) => matcher(values[i]) === include);\r\n}\r\nfunction* filter_exp(include, arr, itemName, exp) {\r\n const filtered = [];\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n this.context.push({ [itemName]: item });\r\n const value = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (value === include)\r\n filtered.push(item);\r\n }\r\n return filtered;\r\n}\r\nfunction* where(arr, property, expected) {\r\n return yield* filter.call(this, true, arr, property, expected);\r\n}\r\nfunction* reject(arr, property, expected) {\r\n return yield* filter.call(this, false, arr, property, expected);\r\n}\r\nfunction* where_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, true, arr, itemName, exp);\r\n}\r\nfunction* reject_exp(arr, itemName, exp) {\r\n return yield* filter_exp.call(this, false, arr, itemName, exp);\r\n}\r\nfunction* group_by(arr, property) {\r\n const map = new Map();\r\n arr = toEnumerable(arr);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield evalToken(token, this.context.spawn(item));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* group_by_exp(arr, itemName, exp) {\r\n const map = new Map();\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n arr = toEnumerable(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n this.context.push({ [itemName]: item });\r\n const key = yield keyTemplate.value(this.context);\r\n this.context.pop();\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* search(arr, property, expected) {\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n const array = toArray(arr);\r\n const matcher = expectedMatcher.call(this, expected);\r\n for (let index = 0; index < array.length; index++) {\r\n const value = yield evalToken(token, this.context.spawn(array[index]));\r\n if (matcher(value))\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* search_exp(arr, itemName, exp) {\r\n const predicate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n for (let index = 0; index < array.length; index++) {\r\n this.context.push({ [itemName]: array[index] });\r\n const value = yield predicate.value(this.context);\r\n this.context.pop();\r\n if (value)\r\n return [index, array[index]];\r\n }\r\n}\r\nfunction* has(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return !!result;\r\n}\r\nfunction* has_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return !!result;\r\n}\r\nfunction* find_index(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find_index_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[0] : undefined;\r\n}\r\nfunction* find(arr, property, expected) {\r\n const result = yield* search.call(this, arr, property, expected);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction* find_exp(arr, itemName, exp) {\r\n const result = yield* search_exp.call(this, arr, itemName, exp);\r\n return result ? result[1] : undefined;\r\n}\r\nfunction uniq(arr) {\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n return [...new Set(arr)];\r\n}\r\nfunction sample(v, count = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n this.context.memoryLimit.use(v.length);\r\n const shuffled = [...v].sort(() => Math.random() - 0.5);\r\n if (count === 1)\r\n return shuffled[0];\r\n return shuffled.slice(0, count);\r\n}\n\nvar arrayFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n sort_natural: sort_natural,\n size: size,\n map: map,\n sum: sum,\n compact: compact,\n concat: concat,\n push: push,\n unshift: unshift,\n pop: pop,\n shift: shift,\n slice: slice,\n where: where,\n reject: reject,\n where_exp: where_exp,\n reject_exp: reject_exp,\n group_by: group_by,\n group_by_exp: group_by_exp,\n has: has,\n has_exp: has_exp,\n find_index: find_index,\n find_index_exp: find_index_exp,\n find: find,\n find_exp: find_exp,\n uniq: uniq,\n sample: sample\n});\n\nfunction date(v, format, timezoneOffset) {\r\n var _a, _b;\r\n const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _b !== void 0 ? _b : 0);\r\n this.context.memoryLimit.use(size);\r\n const date = parseDate(v, this.context.opts, timezoneOffset);\r\n if (!date)\r\n return v;\r\n format = toValue(format);\r\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format);\r\n this.context.memoryLimit.use(format.length);\r\n return strftime(date, format, this.context.memoryLimit);\r\n}\r\nfunction date_to_xmlschema(v) {\r\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z');\r\n}\r\nfunction date_to_rfc822(v) {\r\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z');\r\n}\r\nfunction date_to_string(v, type, style) {\r\n return stringify_date.call(this, v, '%b', type, style);\r\n}\r\nfunction date_to_long_string(v, type, style) {\r\n return stringify_date.call(this, v, '%B', type, style);\r\n}\r\nfunction stringify_date(v, month_type, type, style) {\r\n const date = parseDate(v, this.context.opts);\r\n if (!date)\r\n return v;\r\n const ml = this.context.memoryLimit;\r\n if (type === 'ordinal') {\r\n const d = date.getDate();\r\n return style === 'US'\r\n ? strftime(date, `${month_type} ${d}%q, %Y`, ml)\r\n : strftime(date, `${d}%q ${month_type} %Y`, ml);\r\n }\r\n return strftime(date, `%d ${month_type} %Y`, ml);\r\n}\r\nfunction parseDate(v, opts, timezoneOffset) {\r\n let date;\r\n const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset;\r\n const locale = opts.locale;\r\n v = toValue(v);\r\n if (isNil(v)) {\r\n return undefined;\r\n }\r\n else if (v === 'now' || v === 'today') {\r\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset);\r\n }\r\n else if (isNumber(v)) {\r\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (isString(v)) {\r\n if (/^\\d+$/.test(v)) {\r\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (opts.preserveTimezones && timezoneOffset === undefined) {\r\n date = LiquidDate.createDateFixedToTimezone(v, locale);\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n return date.valid() ? date : undefined;\r\n}\n\nvar dateFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n date: date,\n date_to_xmlschema: date_to_xmlschema,\n date_to_rfc822: date_to_rfc822,\n date_to_string: date_to_string,\n date_to_long_string: date_to_long_string\n});\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu;\r\n// Word boundary followed by word characters (for detecting words)\r\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu;\r\nfunction append(v, arg) {\r\n assert(arguments.length === 2, 'append expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs + rhs;\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arguments.length === 2, 'prepend expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return rhs + lhs;\r\n}\r\nfunction lstrip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = 0, set = new Set(chars); i < str.length; i++) {\r\n if (!set.has(str[i]))\r\n return str.slice(i);\r\n }\r\n return '';\r\n }\r\n return str.trimStart();\r\n}\r\nfunction downcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.toLowerCase();\r\n}\r\nfunction upcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n const str = stringify(v);\r\n arg = stringify(arg);\r\n this.context.memoryLimit.use(str.length + arg.length);\r\n return str.split(arg).join('');\r\n}\r\nfunction remove_first(v, l) {\r\n const str = stringify(v);\r\n l = stringify(l);\r\n this.context.memoryLimit.use(str.length + l.length);\r\n return str.replace(l, '');\r\n}\r\nfunction remove_last(v, l) {\r\n const str = stringify(v);\r\n const pattern = stringify(l);\r\n this.context.memoryLimit.use(str.length + pattern.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + str.substring(index + pattern.length);\r\n}\r\nfunction rstrip(str, chars) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = stringify(chars);\r\n this.context.memoryLimit.use(chars.length);\r\n for (let i = str.length - 1, set = new Set(chars); i >= 0; i--) {\r\n if (!set.has(str[i]))\r\n return str.slice(0, i + 1);\r\n }\r\n return '';\r\n }\r\n return str.trimEnd();\r\n}\r\nfunction split(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(stringify(arg));\r\n // align to ruby split, which is the behavior of shopify/liquid\r\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\r\n while (arr.length && arr[arr.length - 1] === '')\r\n arr.pop();\r\n return arr;\r\n}\r\nfunction strip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n const set = new Set(stringify(chars));\r\n this.context.memoryLimit.use(set.size);\r\n let i = 0;\r\n let j = str.length - 1;\r\n while (set.has(str[i]))\r\n i++;\r\n while (j >= i && set.has(str[j]))\r\n j--;\r\n return str.slice(i, j + 1);\r\n }\r\n return str.trim();\r\n}\r\nfunction strip_newlines(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n const str = stringify(v);\r\n pattern = stringify(pattern);\r\n replacement = stringify(replacement);\r\n const parts = str.split(pattern);\r\n const outputSize = str.length + (parts.length - 1) * (replacement.length - pattern.length);\r\n this.context.memoryLimit.use(outputSize);\r\n return parts.join(replacement);\r\n}\r\nfunction replace_first(v, arg1, arg2) {\r\n const str = stringify(v);\r\n arg1 = stringify(arg1);\r\n arg2 = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + arg1.length + arg2.length);\r\n return str.replace(arg1, () => arg2);\r\n}\r\nfunction replace_last(v, arg1, arg2) {\r\n const str = stringify(v);\r\n const pattern = stringify(arg1);\r\n const replacement = stringify(arg2);\r\n this.context.memoryLimit.use(str.length + pattern.length + replacement.length);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + replacement + str.substring(index + pattern.length);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n if (str.length <= l)\r\n return v;\r\n return str.substring(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, words = 15, o = '...') {\r\n const str = stringify(v);\r\n o = stringify(o);\r\n this.context.memoryLimit.use(str.length + o.length);\r\n const arr = str.split(/\\s+/);\r\n if (words <= 0)\r\n words = 1;\r\n let ret = arr.slice(0, words).join(' ');\r\n if (arr.length >= words)\r\n ret += o;\r\n return ret;\r\n}\r\nfunction normalize_whitespace(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\s+/g, ' ');\r\n}\r\nfunction number_of_words(input, mode) {\r\n const str = stringify(input);\r\n this.context.memoryLimit.use(str.length);\r\n input = str.trim();\r\n if (!input)\r\n return 0;\r\n switch (mode) {\r\n case 'cjk':\r\n // Count CJK characters and words\r\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length;\r\n case 'auto':\r\n // Count CJK characters, if none, count words\r\n return rCJKWord.test(input)\r\n ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length\r\n : input.split(/\\s+/).length;\r\n default:\r\n // Count words only\r\n return input.split(/\\s+/).length;\r\n }\r\n}\r\nfunction array_to_sentence_string(array, connector = 'and') {\r\n connector = stringify(connector);\r\n this.context.memoryLimit.use(array.length + connector.length);\r\n switch (array.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return array[0];\r\n case 2:\r\n return `${array[0]} ${connector} ${array[1]}`;\r\n default:\r\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`;\r\n }\r\n}\n\nvar stringFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n remove_first: remove_first,\n remove_last: remove_last,\n rstrip: rstrip,\n split: split,\n strip: strip,\n strip_newlines: strip_newlines,\n capitalize: capitalize,\n replace: replace,\n replace_first: replace_first,\n replace_last: replace_last,\n truncate: truncate,\n truncatewords: truncatewords,\n normalize_whitespace: normalize_whitespace,\n number_of_words: number_of_words,\n array_to_sentence_string: array_to_sentence_string\n});\n\nfunction base64Encode(str) {\r\n return btoa(String.fromCharCode(...new TextEncoder().encode(str)));\r\n}\r\nfunction base64Decode(str) {\r\n return new TextDecoder().decode(Uint8Array.from(atob(str), c => c.charCodeAt(0)));\r\n}\n\n/**\r\n * Base64 related filters\r\n *\r\n * Implements base64_encode and base64_decode filters for Shopify compatibility\r\n */\r\nfunction base64_encode(value) {\r\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\r\n this.context.memoryLimit.use(value.byteLength);\r\n return value.toString('base64');\r\n }\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Encode(str);\r\n}\r\nfunction base64_decode(value) {\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return base64Decode(str);\r\n}\n\nvar base64Filters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n base64_encode: base64_encode,\n base64_decode: base64_decode\n});\n\nfunction bufferToHex(buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let hex = '';\r\n for (let i = 0; i < bytes.length; i++) {\r\n hex += bytes[i].toString(16).padStart(2, '0');\r\n }\r\n return hex;\r\n}\r\nfunction sha256(str) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const data = new TextEncoder().encode(str);\r\n const digest = yield crypto.subtle.digest('SHA-256', data);\r\n return bufferToHex(digest);\r\n });\r\n}\r\nfunction hmacSha256(str, key) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const encoder = new TextEncoder();\r\n const cryptoKey = yield crypto.subtle.importKey('raw', encoder.encode(key), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\r\n const signature = yield crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(str));\r\n return bufferToHex(signature);\r\n });\r\n}\n\n/**\r\n * Crypto related filters\r\n *\r\n * Implements sha256 and hmac_sha256 filters for Shopify compatibility\r\n */\r\nfunction sha256$1(value) {\r\n const str = stringify(value);\r\n this.context.memoryLimit.use(str.length);\r\n return sha256(str);\r\n}\r\nfunction hmac_sha256(value, key) {\r\n const str = stringify(value);\r\n const keyStr = stringify(key);\r\n this.context.memoryLimit.use(str.length + keyStr.length);\r\n return hmacSha256(str, keyStr);\r\n}\n\nvar cryptoFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n sha256: sha256$1,\n hmac_sha256: hmac_sha256\n});\n\nconst filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), base64Filters), cryptoFilters), misc);\n\nclass AssignTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.key = this.identifier.content;\r\n this.tokenizer.assert(this.key, 'expected variable name');\r\n this.tokenizer.skipBlank();\r\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"');\r\n this.tokenizer.advance();\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n *render(ctx) {\r\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf);\r\n }\r\n *arguments() {\r\n yield this.value;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nconst MODIFIERS = ['offset', 'limit', 'reversed'];\r\nclass ForTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n const inStr = this.tokenizer.readIdentifier();\r\n const collection = this.tokenizer.readValue();\r\n if (!variable.size() || inStr.content !== 'in' || !collection) {\r\n throw new Error(`illegal tag: ${token.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; })\r\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText();\r\n ctx.push(createScope({ continue: ctx.getRegister(continueKey, {}) }));\r\n const hash = (yield this.hash.render(ctx));\r\n ctx.pop();\r\n const modifiers = this.liquid.options.orderedFilterParameters\r\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\r\n : MODIFIERS.filter(x => hash[x] !== undefined);\r\n collection = modifiers.reduce((collection, modifier) => {\r\n if (modifier === 'offset')\r\n return offset(collection, hash['offset']);\r\n if (modifier === 'limit')\r\n return limit(collection, hash['limit']);\r\n return reversed(collection);\r\n }, collection);\r\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length);\r\n const scope = createScope({ forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) });\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (ctx.breakCalled)\r\n break;\r\n scope.forloop.next();\r\n }\r\n ctx.continueCalled = ctx.breakCalled = false;\r\n ctx.pop();\r\n }\r\n *children() {\r\n const templates = this.templates.slice();\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'forloop'];\r\n }\r\n}\r\nfunction reversed(arr) {\r\n return [...arr].reverse();\r\n}\r\nfunction offset(arr, count) {\r\n return arr.slice(count);\r\n}\r\nfunction limit(arr, count) {\r\n return arr.slice(0, count);\r\n}\n\nclass CaptureTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.templates = [];\r\n this.identifier = this.readVariable();\r\n this.variable = this.identifier.content;\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcapture')\r\n return;\r\n this.templates.push(parser.parseToken(token, remainTokens));\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n readVariable() {\r\n let ident = this.tokenizer.readIdentifier();\r\n if (ident.content)\r\n return ident;\r\n ident = this.tokenizer.readQuoted();\r\n if (ident)\r\n return ident;\r\n throw this.tokenizer.error('invalid capture name');\r\n }\r\n *render(ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CaseTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n if (elseCount > 0) {\r\n return;\r\n }\r\n p = [];\r\n const values = [];\r\n while (!token.tokenizer.end()) {\r\n values.push(token.tokenizer.readValueOrThrow());\r\n token.tokenizer.skipBlank();\r\n if (token.tokenizer.peek() === ',') {\r\n token.tokenizer.readTo(',');\r\n }\r\n else {\r\n token.tokenizer.readTo('or');\r\n }\r\n }\r\n this.branches.push({\r\n values,\r\n templates: p\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\r\n let branchHit = false;\r\n for (const branch of this.branches) {\r\n for (const valueToken of branch.values) {\r\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\r\n if (equals(target, value)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n branchHit = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!branchHit) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n }\r\n *arguments() {\r\n yield this.value;\r\n yield* this.branches.flatMap(b => b.values);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n}\n\nclass CommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcomment')\r\n return;\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() { }\r\n}\n\nclass RenderTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokenizer = this.tokenizer;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n // can be normal key/value pair, like \"with: true\"\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n // can be normal key, like \"with,\"\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n const binding = { value, alias: alias && alias.content };\r\n if (keyword.content === 'with')\r\n this.with = binding;\r\n else\r\n this.forBinding = binding;\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue; // matched!\r\n }\r\n }\r\n }\r\n /**\r\n * restore cursor if with/for not matched\r\n */\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer, liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash } = this;\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const childCtx = ctx.spawn();\r\n const scope = childCtx.bottom();\r\n __assign(scope, yield hash.render(ctx));\r\n if (this.with) {\r\n const { value, alias } = this.with;\r\n scope[alias || filepath] = yield evalToken(value, ctx);\r\n }\r\n if (this.forBinding) {\r\n const { value, alias } = this.forBinding;\r\n const collection = toEnumerable(yield evalToken(value, ctx));\r\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n scope['forloop'].next();\r\n }\r\n }\r\n else {\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this.currentFile));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this.file)) {\r\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n const names = Object.keys(this.hash.hash);\r\n if (this.with) {\r\n const { value, alias } = this.with;\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n if (this.forBinding) {\r\n const { value, alias } = this.forBinding;\r\n if (isString(alias)) {\r\n names.push([alias, value]);\r\n }\r\n else if (isString(this.file)) {\r\n names.push([this.file, value]);\r\n }\r\n }\r\n return { name: this.file, isolated: true, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.hash.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (this.with) {\r\n const { value } = this.with;\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n if (this.forBinding) {\r\n const { value } = this.forBinding;\r\n if (isValueToken(value)) {\r\n yield value;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @return null for \"none\",\r\n * @return Template[] for quoted with tags and/or filters\r\n * @return Token for expression (not quoted)\r\n * @throws TypeError if cannot read next token\r\n */\r\nfunction parseFilePath(tokenizer, liquid, parser) {\r\n if (liquid.options.dynamicPartials) {\r\n const file = tokenizer.readValue();\r\n tokenizer.assert(file, 'illegal file path');\r\n if (file.getText() === 'none')\r\n return;\r\n if (isQuotedToken(file)) {\r\n // for filenames like \"files/{{file}}\", eval as liquid template\r\n const templates = parser.parse(evalQuotedToken(file));\r\n return optimize(templates);\r\n }\r\n return file;\r\n }\r\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)];\r\n const templates = optimize(parser.parseTokens(tokens));\r\n return templates === 'none' ? undefined : templates;\r\n}\r\nfunction optimize(templates) {\r\n // for filenames like \"files/file.liquid\", extract the string directly\r\n if (templates.length === 1 && isHTMLToken(templates[0].token))\r\n return templates[0].token.getContent();\r\n return templates;\r\n}\r\nfunction* renderFilePath(file, ctx, liquid) {\r\n if (typeof file === 'string')\r\n return file;\r\n if (Array.isArray(file))\r\n return liquid.renderer.renderTemplates(file, ctx);\r\n return yield evalToken(file, ctx);\r\n}\n\nclass IncludeTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const { tokenizer } = token;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer, liquid.options.jekyllInclude || liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash, withVar } = this;\r\n const { renderer } = liquid;\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n const scope = createScope((yield hash.render(ctx)));\r\n if (withVar)\r\n scope[filepath] = yield evalToken(withVar, ctx);\r\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this.currentFile));\r\n ctx.push(ctx.opts.jekyllInclude ? createScope({ include: scope }) : scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n *children(partials, sync) {\r\n if (partials && isString(this.file)) {\r\n return (yield this.liquid._parsePartialFile(this.file, sync, this.currentFile));\r\n }\r\n return [];\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n let names;\r\n if (this.liquid.options.jekyllInclude) {\r\n names = ['include'];\r\n }\r\n else {\r\n names = Object.keys(this.hash.hash);\r\n if (this.withVar) {\r\n names.push([this.file, this.withVar]);\r\n }\r\n }\r\n return { name: this.file, isolated: false, scope: names };\r\n }\r\n }\r\n *arguments() {\r\n yield* Object.values(this.hash.hash).filter(isValueToken);\r\n if (isValueToken(this.file)) {\r\n yield this.file;\r\n }\r\n if (isValueToken(this.withVar)) {\r\n yield this.withVar;\r\n }\r\n }\r\n}\n\nclass DecrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass CycleTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.candidates = [];\r\n const group = this.tokenizer.readValue();\r\n this.tokenizer.skipBlank();\r\n if (group) {\r\n if (this.tokenizer.peek() === ':') {\r\n this.group = group;\r\n this.tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!this.tokenizer.end()) {\r\n const value = this.tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n this.tokenizer.readTo(',');\r\n }\r\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`);\r\n }\r\n *render(ctx, emitter) {\r\n const group = (yield evalToken(this.group, ctx));\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle', {});\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n return yield evalToken(candidate, ctx);\r\n }\r\n *arguments() {\r\n yield* this.candidates;\r\n if (this.group) {\r\n yield this.group;\r\n }\r\n }\r\n}\n\nclass IfTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n let p = [];\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n assert(!this.elseTemplates, 'unexpected elsif after else');\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', tag => {\r\n assertEmpty(tag.args);\r\n assert(!this.elseTemplates, 'duplicated else');\r\n p = this.elseTemplates = [];\r\n })\r\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (isTruthy(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\r\n }\r\n *children() {\r\n const templates = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n templates.push(...this.elseTemplates);\r\n }\r\n return templates;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass IncrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.identifier = this.tokenizer.readIdentifier();\r\n this.variable = this.identifier.content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n *localScope() {\r\n yield this.identifier;\r\n }\r\n}\n\nclass LayoutTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.file = parseFilePath(this.tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = parser.parseTokens(remainTokens);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, args, file } = this;\r\n const { renderer } = liquid;\r\n if (file === undefined) {\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n yield renderer.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this.currentFile));\r\n // render remaining contents and store rendered results\r\n ctx.setRegister('blockMode', BlockMode.STORE);\r\n const html = yield renderer.renderTemplates(this.templates, ctx);\r\n const blocks = ctx.getRegister('blocks', {});\r\n // set whole content to anonymous block if anonymous doesn't specified\r\n if (blocks[''] === undefined)\r\n blocks[''] = (parent, emitter) => emitter.write(html);\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n // render the layout file use stored blocks\r\n ctx.push(createScope((yield args.render(ctx))));\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n }\r\n *children(partials) {\r\n const templates = this.templates.slice();\r\n if (partials && isString(this.file)) {\r\n templates.push(...(yield this.liquid._parsePartialFile(this.file, true, this.currentFile)));\r\n }\r\n return templates;\r\n }\r\n *arguments() {\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n if (isValueToken(this.file)) {\r\n yield this.file;\r\n }\r\n }\r\n partialScope() {\r\n if (isString(this.file)) {\r\n return { name: this.file, isolated: false, scope: Object.keys(this.args.hash) };\r\n }\r\n }\r\n}\n\nclass BlockTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.templates = [];\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endblock')\r\n return;\r\n const template = parser.parseToken(token, remainTokens);\r\n this.templates.push(template);\r\n }\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n }\r\n *render(ctx, emitter) {\r\n const blockRender = this.getBlockRender(ctx);\r\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\r\n ctx.getRegister('blocks', {})[this.block] = blockRender;\r\n }\r\n else {\r\n yield blockRender(new BlockDrop(), emitter);\r\n }\r\n }\r\n getBlockRender(ctx) {\r\n const self = this;\r\n const { liquid, templates } = this;\r\n const renderChild = ctx.getRegister('blocks', {})[this.block];\r\n const renderCurrent = function* (superBlock, emitter) {\r\n const stack = ctx.getRegister('blockStack', []);\r\n if (stack.includes(self))\r\n throw new Error('block tag cannot be nested');\r\n stack.push(self);\r\n ctx.push(createScope({ block: superBlock }));\r\n yield liquid.renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n stack.pop();\r\n };\r\n return renderChild\r\n ? (superBlock, emitter) => renderChild(new BlockDrop((emitter) => renderCurrent(superBlock, emitter)), emitter)\r\n : renderCurrent;\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n blockScope() {\r\n return ['block'];\r\n }\r\n}\n\nclass RawTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n this.tokens = [];\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endraw')\r\n return;\r\n this.tokens.push(token);\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n}\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols, collection, variable) {\r\n super(length, collection, variable);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nclass TablerowTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n this.tokenizer.skipBlank();\r\n const predicate = this.tokenizer.readIdentifier();\r\n const collectionToken = this.tokenizer.readValue();\r\n if (predicate.content !== 'in' || !collectionToken) {\r\n throw new Error(`illegal tag: ${tagToken.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collectionToken;\r\n this.args = new Hash(this.tokenizer, liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const args = (yield this.args.render(ctx));\r\n const offset = args.offset || 0;\r\n const limit = (args.limit === undefined) ? collection.length : args.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = args.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable);\r\n const scope = createScope({ tablerowloop });\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('</tr>');\r\n emitter.write(`<tr class=\"row${tablerowloop.row()}\">`);\r\n }\r\n emitter.write(`<td class=\"col${tablerowloop.col()}\">`);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('</td>');\r\n }\r\n if (collection.length)\r\n emitter.write('</tr>');\r\n ctx.pop();\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n *arguments() {\r\n yield this.collection;\r\n for (const v of Object.values(this.args.hash)) {\r\n if (isValueToken(v)) {\r\n yield v;\r\n }\r\n }\r\n }\r\n blockScope() {\r\n return [this.variable, 'tablerowloop'];\r\n }\r\n}\n\nclass UnlessTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.tokenizer.readFilteredValue(), this.liquid),\r\n test: isFalsy,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n if (elseCount > 0) {\r\n p = [];\r\n return;\r\n }\r\n this.branches.push({\r\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\r\n test: isTruthy,\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endunless', function () { this.stop(); })\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, test, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (test(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n *children() {\r\n const children = this.branches.flatMap(b => b.templates);\r\n if (this.elseTemplates) {\r\n children.push(...this.elseTemplates);\r\n }\r\n return children;\r\n }\r\n arguments() {\r\n return this.branches.map(b => b.value);\r\n }\r\n}\n\nclass BreakTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.breakCalled = true;\r\n }\r\n}\n\nclass ContinueTag extends Tag {\r\n render(ctx, _emitter) {\r\n ctx.continueCalled = true;\r\n }\r\n}\n\nclass EchoTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.tokenizer.skipBlank();\r\n if (!this.tokenizer.end()) {\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n if (!this.value)\r\n return;\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n *arguments() {\r\n if (this.value) {\r\n yield this.value;\r\n }\r\n }\r\n}\n\nclass LiquidTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options);\r\n this.templates = parser.parseTokens(tokens);\r\n }\r\n *render(ctx, emitter) {\r\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter);\r\n }\r\n *children() {\r\n return this.templates;\r\n }\r\n}\n\nclass InlineCommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\r\n throw new Error('every line of an inline comment must start with a \\'#\\' character');\r\n }\r\n }\r\n render() { }\r\n}\n\nconst tags = {\r\n assign: AssignTag,\r\n 'for': ForTag,\r\n capture: CaptureTag,\r\n 'case': CaseTag,\r\n comment: CommentTag,\r\n include: IncludeTag,\r\n render: RenderTag,\r\n decrement: DecrementTag,\r\n increment: IncrementTag,\r\n cycle: CycleTag,\r\n 'if': IfTag,\r\n layout: LayoutTag,\r\n block: BlockTag,\r\n raw: RawTag,\r\n tablerow: TablerowTag,\r\n unless: UnlessTag,\r\n 'break': BreakTag,\r\n 'continue': ContinueTag,\r\n echo: EchoTag,\r\n liquid: LiquidTag,\r\n '#': InlineCommentTag\r\n};\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.renderer = new Render();\r\n this.filters = Object.create(null);\r\n this.tags = Object.create(null);\r\n this.options = normalize(opts);\r\n // eslint-disable-next-line deprecation/deprecation\r\n this.parser = new Parser(this);\r\n forOwn(tags, (conf, name) => this.registerTag(name, conf));\r\n forOwn(filters, (handler, name) => this.registerFilter(name, handler));\r\n }\r\n parse(html, filepath) {\r\n const parser = new Parser(this);\r\n return parser.parse(html, filepath);\r\n }\r\n _render(tpl, scope, renderOptions) {\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n render(tpl, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n renderSync(tpl, scope, renderOptions) {\r\n return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n renderToNodeStream(tpl, scope, renderOptions = {}) {\r\n const ctx = new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx);\r\n }\r\n _parseAndRender(html, scope, renderOptions) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, renderOptions);\r\n }\r\n parseAndRender(html, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n parseAndRenderSync(html, scope, renderOptions) {\r\n return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n _parsePartialFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile);\r\n }\r\n _parseLayoutFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile);\r\n }\r\n _parseFile(file, sync, lookupType, currentFile) {\r\n return new Parser(this).parseFile(file, sync, lookupType, currentFile);\r\n }\r\n parseFile(file, lookupType) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(new Parser(this).parseFile(file, false, lookupType));\r\n });\r\n }\r\n parseFileSync(file, lookupType) {\r\n return toValueSync(new Parser(this).parseFile(file, true, lookupType));\r\n }\r\n *_renderFile(file, ctx, renderFileOptions) {\r\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType));\r\n return yield this._render(templates, ctx, renderFileOptions);\r\n }\r\n renderFile(file, ctx, renderFileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false })));\r\n });\r\n }\r\n renderFileSync(file, ctx, renderFileOptions) {\r\n return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true })));\r\n }\r\n renderFileToNodeStream(file, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const templates = yield this.parseFile(file);\r\n return this.renderToNodeStream(templates, scope, renderOptions);\r\n });\r\n }\r\n _evalValue(str, scope) {\r\n const value = new Value(str, this);\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options);\r\n return value.value(ctx);\r\n }\r\n evalValue(str, scope) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._evalValue(str, scope));\r\n });\r\n }\r\n evalValueSync(str, scope) {\r\n return toValueSync(this._evalValue(str, scope));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters[name] = filter;\r\n }\r\n registerTag(name, tag) {\r\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n let firstCall = true;\r\n return function (filePath, ctx, callback) {\r\n if (firstCall) {\r\n firstCall = false;\r\n const dirs = normalizeDirectoryList(this.root);\r\n self.options.root.unshift(...dirs);\r\n self.options.layouts.unshift(...dirs);\r\n self.options.partials.unshift(...dirs);\r\n }\r\n self.renderFile(filePath, ctx).then(html => callback(null, html), callback);\r\n };\r\n }\r\n analyze(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(template, options);\r\n });\r\n }\r\n analyzeSync(template, options = {}) {\r\n return analyzeSync(template, options);\r\n }\r\n parseAndAnalyze(html, filename, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return analyze(this.parse(html, filename), options);\r\n });\r\n }\r\n parseAndAnalyzeSync(html, filename, options = {}) {\r\n return analyzeSync(this.parse(html, filename), options);\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n });\r\n }\r\n /** Return an array of all variables without their properties. */\r\n variablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.variables);\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all variables including their properties/paths. */\r\n fullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.variables).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all variables, each as an array of properties/segments. */\r\n variableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.variables).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n });\r\n }\r\n /** Return an array of all expected context variables without their properties. */\r\n globalVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Object.keys(analysis.globals);\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariables(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n });\r\n }\r\n /** Return an array of all expected context variables including their properties/paths. */\r\n globalFullVariablesSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(new Set(Object.values(analysis.globals).flatMap((a) => a.map((v) => String(v)))));\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegments(template, options = {}) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const analysis = yield analyze(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n });\r\n }\r\n /** Return an array of all expected context variables, each as an array of properties/segments. */\r\n globalVariableSegmentsSync(template, options = {}) {\r\n const analysis = analyzeSync(isString(template) ? this.parse(template) : template, options);\r\n return Array.from(strictUniq(Object.values(analysis.globals).flatMap((a) => a.map((v) => v.toArray()))));\r\n }\r\n}\n\n/* istanbul ignore file */\r\nconst version = '[VI]{version}[/VI]';\n\nexport { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, LookupType, Output, ParseError, ParseStream, Parser, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, Variable, analyze, analyzeSync, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version };\n","// cspell:ignore liquidjs forloop tablerowloop\nimport { Liquid, Tokenizer, TokenKind } from 'liquidjs';\n\nconst engine = new Liquid();\n\ninterface GlobalRef {\n key: string;\n row: number;\n col: number;\n}\n\n// liquidjs static analysis is position-blind: a variable in `{% if x %}` and one\n// in `{{ x }}` look identical in `globals`. We keep each reference's location so\n// callers can tell a printed output from a control-flow-only reference.\nfunction collectGlobalRefs(code: string, lines: string[]): GlobalRef[] {\n const { globals } = engine.analyzeSync(engine.parse(code));\n const refs: GlobalRef[] = [];\n\n for (const occurrences of Object.values(globals)) {\n for (const variable of occurrences) {\n const root = String(variable.segments[0] ?? '');\n const line = lines[variable.location.row - 1] ?? '';\n const atLocation = line.slice(variable.location.col - 1);\n\n // liquidjs can mis-report a literal as a global — notably the first\n // element of an array literal in `{% assign x = [\"a\",\"b\"] %}`, whose\n // reported location points at the `[`, not a bare identifier. Keep a\n // global only when the source at its location actually IS that\n // identifier (real references always resolve to their own name).\n if (root && atLocation.startsWith(root)) {\n refs.push({ key: variable.toString(), row: variable.location.row, col: variable.location.col });\n }\n }\n }\n\n return refs;\n}\n\n// Absolute offset (into `code`) of a 1-based row/col, matching how both liquidjs\n// locations and Tokenizer token ranges index the same source string.\nfunction lineStartOffsets(code: string): number[] {\n const starts = [0];\n\n for (let i = 0; i < code.length; i++) {\n if (code[i] === '\\n') {\n starts.push(i + 1);\n }\n }\n\n return starts;\n}\n\n// Byte ranges of every `{{ }}` output token — a variable printed to the user has\n// at least one reference inside one of these.\nfunction outputTokenRanges(code: string): Array<[number, number]> {\n return new Tokenizer(code)\n .readTopLevelTokens(engine.options)\n .filter(token => token.kind === TokenKind.Output)\n .map(token => [token.begin, token.end]);\n}\n\n/**\n * External (global) variables referenced by `{{ }}` / `{% %}` in a Liquid\n * snippet, as full dotted paths (e.g. `e_purchase.amount`), de-duplicated.\n *\n * Uses liquidjs static analysis: the returned set is the `globals` — references\n * that are NOT in scope. This excludes, with no hand-rolled lists:\n * - `{% assign %}` / `{% capture %}` targets\n * - `{% for %}` / `{% tablerow %}` loop variables\n * - the loop-provided `forloop` / `tablerowloop` objects\n * - `{% increment %}` / `{% decrement %}` counters\n * - string / number literals and filter names\n *\n * Returns `[]` for empty input or syntactically invalid Liquid (e.g. while the\n * user is mid-typing), so callers never have to guard against a thrown parse.\n */\nexport function getLiquidVariables(code: string): string[] {\n if (!code || !code.trim()) {\n return [];\n }\n\n try {\n const lines = code.split('\\n');\n\n return [...new Set(collectGlobalRefs(code, lines).map(ref => ref.key))];\n } catch {\n return [];\n }\n}\n\n/**\n * The subset of {@link getLiquidVariables} that is actually PRINTED to the user\n * via a `{{ }}` output — as opposed to variables referenced only in control flow\n * (`{% if x %}`, `{% for p in items %}`), which never render a value.\n *\n * A variable counts as printed when any of its references falls inside an output\n * token. `{% if x %}{{ x }}{% endif %}` therefore reports `x` (it is printed on\n * one branch); `{% if x %}…{% endif %}` alone does not.\n *\n * Same empty/invalid-input contract as {@link getLiquidVariables}.\n */\nexport function getLiquidOutputVariables(code: string): string[] {\n if (!code || !code.trim()) {\n return [];\n }\n\n try {\n const lines = code.split('\\n');\n const starts = lineStartOffsets(code);\n const ranges = outputTokenRanges(code);\n const keys: string[] = [];\n\n for (const ref of collectGlobalRefs(code, lines)) {\n const offset = starts[ref.row - 1] + (ref.col - 1);\n\n if (ranges.some(([begin, end]) => offset >= begin && offset < end)) {\n keys.push(ref.key);\n }\n }\n\n return [...new Set(keys)];\n } catch {\n return [];\n }\n}\n","<script lang=\"ts\" setup>\nimport { defineProps, withDefaults, defineEmits, onMounted, nextTick, ref, onBeforeUnmount } from 'vue';\nimport { Button } from '@/index';\nimport styles from './Modal.module.scss';\n\nexport interface ModalProps {\n title: string;\n isOpen: boolean;\n size: 'small' | 'medium';\n cancelText: string;\n submitText: string;\n hasOverlay?: boolean;\n}\n\nconst props = withDefaults(defineProps<ModalProps>(), {\n hasOverlay: true,\n});\nconst isVisible = ref(false);\n\ninterface Emits {\n (e: 'close'): void;\n (e: 'submit'): void;\n}\n\nconst emit = defineEmits<Emits>();\n\nconst close = () => {\n emit('close');\n};\n\nconst submit = () => {\n emit('submit');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n emit('close');\n }\n};\n\nonMounted(async () => {\n await nextTick();\n isVisible.value = true;\n\n window.addEventListener('keydown', handleKeydown);\n});\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', handleKeydown);\n});\n</script>\n\n<template>\n <div\n v-if=\"hasOverlay\"\n :class=\"styles.modalOverlay\"\n @click=\"close\" />\n <transition name=\"modal-transition\">\n <div\n v-show=\"isOpen\"\n :class=\"[styles.modalWrapper, styles[props.size]]\">\n <div :class=\"[styles.modal, styles[props.size]]\">\n <button\n :class=\"styles.close\"\n @click=\"close\">\n &times;\n </button>\n <div :class=\"styles.header\">\n <p>{{ title }}</p>\n </div>\n <div :class=\"styles.section\">\n <slot name=\"section\" />\n </div>\n <div :class=\"styles.footer\">\n <Button\n color=\"secondary\"\n variant=\"text\"\n :label=\"props.cancelText\"\n @click=\"close\" />\n <Button\n color=\"primary\"\n variant=\"solid\"\n :label=\"props.submitText\"\n @click=\"submit\" />\n </div>\n </div>\n </div>\n </transition>\n</template>\n\n<style scoped lang=\"scss\">\n.modal-transition-enter-active,\n.modal-transition-leave-active {\n transition: all 0.3s ease;\n}\n\n.modal-transition-enter-from,\n.modal-transition-leave-to {\n opacity: 0;\n transform: scale(0.8) translate(-50%, -50%);\n}\n\n.modal-transition-enter-to,\n.modal-transition-leave-from {\n opacity: 1;\n transform: scale(1) translate(-50%, -50%);\n}\n</style>\n","<script setup lang=\"ts\">\nimport styles from './NumberInput.module.scss';\n\nexport interface Props {\n id: string;\n name: string;\n modelValue?: number;\n label?: string;\n placeholder?: string;\n maxLength?: number;\n error?: string;\n errorStatus?: boolean;\n counter?: boolean;\n min?: number;\n max?: number;\n size?: 'default' | 'small';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n maxLength: undefined,\n min: undefined,\n max: undefined,\n error: '',\n modelValue: undefined,\n size: 'default',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']];\n input: [event: Event];\n change: [event: Event];\n paste: [event: ClipboardEvent];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst applyMinMax = (value: string): string => {\n if (value === '') {\n return value;\n }\n\n const numericValue = Number(value);\n\n if (typeof props.min === 'number' && numericValue < props.min) {\n return props.min.toString();\n } else if (typeof props.max === 'number' && numericValue > props.max) {\n return props.max.toString();\n }\n\n return numericValue.toString();\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const sanitizedValue = applyMinMax(target.value);\n\n target.value = sanitizedValue;\n\n emit('input', event);\n emit('update:modelValue', Number(sanitizedValue));\n};\n\nconst handleBlur = (event: FocusEvent) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const oldValue = target.value;\n const sanitizedValue = applyMinMax(target.value === '' ? String(props.min || 0) : target.value);\n\n target.value = sanitizedValue;\n\n emit('blur', event);\n\n if (oldValue !== sanitizedValue) {\n emit('update:modelValue', Number(sanitizedValue));\n }\n};\n</script>\n\n<template>\n <div :class=\"[styles.wrapper, styles[`wrapper__size_${size}`]]\">\n <label\n v-if=\"label\"\n :class=\"styles.wrapper__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <input\n :id=\"id\"\n type=\"number\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error || errorStatus,\n },\n ]\"\n :max=\"max\"\n :maxlength=\"maxLength\"\n :min=\"min\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n @blur=\"handleBlur\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\">\n\n <div\n v-if=\"counter || error\"\n :class=\"styles.wrapper__bottom\">\n <div\n v-if=\"error\"\n :class=\"styles.wrapper__errorMessage\">\n {{ error }}\n </div>\n <div\n v-if=\"counter\"\n :class=\"styles.wrapper__counter\">\n {{ modelValue?.toString().length || 0 }}\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, ref, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport { Typography } from '@/components/Typography';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './OnPageMessage.module.scss';\n\ninterface OnPageMessageProps {\n variant?: 'default' | 'warning' | 'alert' | 'success';\n text: string;\n}\n\nconst props = withDefaults(defineProps<OnPageMessageProps>(), {\n variant: 'default',\n});\n\nconst IconName = computed<IconNames>(() => {\n switch (props.variant) {\n // DS spec (Figma 1559:444): Error uses the filled box, not the circle.\n case 'alert': return 'filled-error-box';\n case 'warning': return 'line-caution-triangle';\n case 'success': return 'line-check-natural';\n\n default: return 'filled-info-circle';\n }\n});\n\nconst textRef = ref<InstanceType<typeof Typography> | null>(null);\nconst isMultiline = ref(false);\nlet resizeObserver: ResizeObserver | null = null;\n\nfunction measure (): void {\n const el = textRef.value?.$el as HTMLElement | undefined;\n\n if (!el) {\n return;\n }\n\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 16;\n const next = el.getBoundingClientRect().height > lineHeight * 1.5;\n\n if (next !== isMultiline.value) {\n isMultiline.value = next;\n }\n}\n\nwatch(textRef, el => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n\n const node = (el as InstanceType<typeof Typography> | null)?.$el as HTMLElement | undefined;\n\n if (!node || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n resizeObserver = new ResizeObserver(() => measure());\n resizeObserver.observe(node);\n measure();\n});\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n});\n</script>\n\n<template>\n <div\n :class=\"[\n styles.container,\n styles[`container__${variant}`],\n isMultiline && styles.isMultiline,\n ]\">\n <Icon\n :name=\"IconName\"\n :size=\"24\" />\n <Typography\n ref=\"textRef\"\n variant=\"detail\"\n :class=\"styles.container__text\">\n {{ text }}\n </Typography>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue';\nimport { Icon, Tooltip } from '@/index';\nimport type { IconNames } from '@/types/generated/svgIconName';\nimport styles from './SegmentButton.module.scss';\n\nexport interface SegmentType {\n value: string;\n label?: string;\n disabled?: boolean;\n icon?: IconNames;\n mode?: 'default' | 'smart';\n tooltip?: string;\n}\n\nexport interface SegmentButtonProps {\n size?: 'default' | 'small';\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n segments: SegmentType[];\n iconOnly?: boolean;\n labelOnly?: boolean;\n modelValue?: string;\n}\n\ninterface SegmentButtonEmits {\n 'update:modelValue': [value: string];\n click: [value: SegmentType['value']];\n}\n\nconst props = withDefaults(defineProps<SegmentButtonProps>(), {\n disabled: false,\n size: 'default',\n orientation: 'horizontal',\n iconOnly: false,\n labelOnly: false,\n});\n\nconst emit = defineEmits<SegmentButtonEmits>();\nconst selected = ref<string>(props.modelValue || '');\n\nconst setSelect = (segment: SegmentType) => {\n if (props.disabled || segment.disabled) {\n return;\n }\n\n emit('update:modelValue', segment.value);\n emit('click', segment.value);\n};\n\nwatch(() => props.modelValue, newValue => {\n if (selected.value !== newValue) {\n selected.value = newValue || '';\n }\n});\n\nwatch(() => props.segments, newSegments => {\n if (!newSegments.some(segment => segment.value === selected.value)) {\n selected.value = '';\n emit('update:modelValue', '');\n }\n}, { deep: true });\n</script>\n\n<template>\n <div\n :class=\"[\n styles.wrapper,\n styles[`wrapper--${orientation}`],\n styles[`wrapper--${size}`],\n {\n [styles['wrapper--disabled']]: disabled,\n [styles['wrapper--icon-only']]: iconOnly,\n [styles['wrapper--label-only']]: labelOnly,\n },\n ]\">\n <template\n v-for=\"(segment, index) in segments\"\n :key=\"`${segment.value}-${index}`\">\n <Tooltip\n v-if=\"segment.tooltip\"\n :id=\"`segment-tooltip-${segment.value}-${index}`\"\n :text=\"segment.tooltip\">\n <button\n type=\"button\"\n :class=\"[\n styles.button,\n {\n [styles['button--selected']]: segment.value === selected,\n [styles['button--disabled']]: segment.disabled || disabled,\n [styles['button--first']]: index === 0,\n [styles['button--last']]: index === segments.length - 1,\n },\n ]\"\n :data-mode=\"segment.mode\"\n :disabled=\"segment.disabled || disabled\"\n @click=\"setSelect(segment)\">\n <Icon\n v-if=\"iconOnly && segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\"\n :size=\"24\" />\n <span\n v-if=\"labelOnly && segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n <template v-if=\"!iconOnly && !labelOnly\">\n <Icon\n v-if=\"segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\" />\n <span\n v-if=\"segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n </template>\n </button>\n </Tooltip>\n <button\n v-else\n type=\"button\"\n :class=\"[\n styles.button,\n {\n [styles['button--selected']]: segment.value === selected,\n [styles['button--disabled']]: segment.disabled || disabled,\n [styles['button--first']]: index === 0,\n [styles['button--last']]: index === segments.length - 1,\n },\n ]\"\n :data-mode=\"segment.mode\"\n :disabled=\"segment.disabled || disabled\"\n @click=\"setSelect(segment)\">\n <Icon\n v-if=\"iconOnly && segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\"\n :size=\"24\" />\n <span\n v-if=\"labelOnly && segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n <template v-if=\"!iconOnly && !labelOnly\">\n <Icon\n v-if=\"segment.icon\"\n :class=\"styles.button__icon\"\n :name=\"segment.icon\" />\n <span\n v-if=\"segment.label\"\n :class=\"styles.button__label\">\n {{ segment.label }}\n </span>\n </template>\n </button>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue';\nimport styles from './TextInput.module.scss';\n\nexport interface Props {\n id: string;\n name: string;\n modelValue?: string;\n label?: string;\n placeholder?: string;\n maxLength?: number;\n maxHeight?: number;\n error?: string;\n multiline?: boolean;\n autoGrow?: boolean;\n counter?: boolean;\n mode?: 'primary' | 'smart';\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n maxLength: undefined,\n maxHeight: undefined,\n error: '',\n multiline: false,\n autoGrow: false,\n modelValue: '',\n mode: 'primary',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']];\n input: [event: Event];\n change: [event: Event];\n paste: [event: ClipboardEvent];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\nconst autoGrow = () => {\n if (props.autoGrow && textareaRef.value) {\n textareaRef.value.style.height = '';\n\n const newHeight = Math.min(textareaRef.value.scrollHeight, props.maxHeight || textareaRef.value.scrollHeight);\n\n textareaRef.value.style.height = `${newHeight}px`;\n }\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n emit('input', event);\n emit('update:modelValue', target.value);\n\n autoGrow();\n};\n\nonMounted(() => {\n autoGrow();\n});\n</script>\n\n<template>\n <div :class=\"[styles.wrapper, styles[`wrapper--${props.mode}`]]\">\n <label\n v-if=\"label\"\n :class=\"styles.wrapper__label\"\n :for=\"id\">\n {{ label }}\n </label>\n <template v-if=\"multiline\">\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error,\n },\n ]\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :style=\"maxHeight ? { maxHeight: `${maxHeight}px` } : undefined\"\n :value=\"modelValue\"\n @blur=\"emit('blur', $event)\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\" />\n </template>\n <template v-else>\n <input\n :id=\"id\"\n type=\"text\"\n :class=\"[\n styles.wrapper__field, {\n [styles['wrapper--error']]: error,\n },\n ]\"\n :maxlength=\"maxLength\"\n :name=\"name\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n @blur=\"emit('blur', $event)\"\n @change=\"$emit('change', $event)\"\n @focus=\"emit('focus', $event)\"\n @input=\"handleInput\"\n @paste=\"emit('paste', $event)\">\n </template>\n\n <div :class=\"styles.wrapper__bottom\">\n <div\n v-if=\"error\"\n :class=\"styles.wrapper__errorMessage\">\n {{ error }}\n </div>\n <div\n v-if=\"counter\"\n :class=\"styles.wrapper__counter\">\n {{ modelValue?.toString().length || 0 }}\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport styles from './Toggle.module.scss';\n\ninterface ToggleProps {\n id: string;\n name: string;\n checked?: boolean;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<ToggleProps>(), {\n checked: false,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n click: [checked: boolean];\n}>();\n\nconst onClick = () => {\n emit('click', !props.checked);\n};\n</script>\n\n<template>\n <fieldset\n :class=\"[\n styles.wrapper,\n {\n [styles.wrapper_checked]: checked,\n [styles.wrapper_disabled]: disabled,\n },\n ]\">\n <input\n :id=\"id\"\n type=\"checkbox\"\n :checked=\"checked\"\n :class=\"styles.wrapper__input\"\n :disabled=\"disabled\"\n :name=\"name\"\n @click=\"onClick\">\n <label\n :class=\"styles.wrapper__label\"\n :for=\"id\" />\n </fieldset>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, watch } from 'vue';\nimport Icon from '@/components/Icon/Icon.vue';\nimport type { IconNames } from '@/types/generated/svgIconName';\n\nexport type ToastVariant = 'info' | 'error' | 'warning';\n\ninterface ToastProps {\n modelValue: boolean;\n text: string;\n variant?: ToastVariant;\n duration?: number;\n icon?: IconNames;\n closeAriaLabel?: string;\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n variant: 'info',\n duration: 4000,\n icon: undefined,\n closeAriaLabel: 'Close notification',\n});\n\ntype ToastEmits = {\n (e: 'update:modelValue', value: boolean): void;\n (e: 'dismiss'): void;\n};\n\nconst emit = defineEmits<ToastEmits>();\n\nconst VARIANT_ICONS: Record<ToastVariant, IconNames> = {\n info: 'filled-info-circle',\n error: 'filled-error-box',\n warning: 'filled-caution-triangle',\n};\n\nconst iconName = computed<IconNames>(() => props.icon ?? VARIANT_ICONS[props.variant]);\nlet dismissTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction clearDismissTimer (): void {\n if (dismissTimer) {\n clearTimeout(dismissTimer);\n dismissTimer = null;\n }\n}\n\nfunction handleClose (): void {\n clearDismissTimer();\n emit('update:modelValue', false);\n emit('dismiss');\n}\n\nfunction scheduleDismiss (): void {\n clearDismissTimer();\n\n if (props.duration <= 0) {\n return;\n }\n\n dismissTimer = setTimeout(() => {\n handleClose();\n }, props.duration);\n}\n\nwatch(\n () => props.modelValue,\n next => {\n if (next) {\n scheduleDismiss();\n } else {\n clearDismissTimer();\n }\n },\n { immediate: true }\n);\n\nonBeforeUnmount(clearDismissTimer);\n</script>\n\n<template>\n <Transition name=\"ab-toast\">\n <div\n v-if=\"modelValue\"\n aria-live=\"polite\"\n class=\"ab-toast\"\n role=\"status\"\n :class=\"`ab-toast--${variant}`\">\n <Icon\n class=\"ab-toast__icon\"\n :name=\"iconName\"\n :size=\"24\" />\n <span class=\"ab-toast__text\">{{ text }}</span>\n <button\n class=\"ab-toast__close\"\n type=\"button\"\n :aria-label=\"closeAriaLabel\"\n @click=\"handleClose\">\n <Icon\n name=\"line-close-netural\"\n :size=\"24\" />\n </button>\n </div>\n </Transition>\n</template>\n\n<style lang=\"scss\" scoped>\n.ab-toast {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 16px 16px 16px 12px;\n background: $color_gray_0;\n border-top: 1px solid $color_gray_300;\n border-right: 1px solid $color_gray_300;\n border-bottom: 1px solid $color_gray_300;\n border-radius: 4px;\n box-shadow: 0 8px 32px rgba(44, 53, 70, 0.15);\n max-width: 320px;\n color: $color_gray_800;\n font-family: $fontFamily_Figtree;\n font-size: 15px;\n font-weight: 400;\n line-height: 24px;\n}\n\n.ab-toast--info {\n border-left: 4px solid $color_information_500;\n\n .ab-toast__icon {\n fill: $color_information_500;\n }\n}\n\n.ab-toast--error {\n border-left: 4px solid $color_danger_500;\n\n .ab-toast__icon {\n fill: $color_danger_500;\n }\n}\n\n.ab-toast--warning {\n border-left: 4px solid $color_warning_500;\n\n .ab-toast__icon {\n fill: $color_warning_500;\n }\n}\n\n.ab-toast__icon {\n flex: 0 0 auto;\n}\n\n.ab-toast__text {\n flex: 1 1 auto;\n word-break: break-word;\n}\n\n.ab-toast__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n background: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n color: $color_gray_600;\n\n &:hover {\n color: $color_gray_800;\n }\n}\n\n.ab-toast-enter-active,\n.ab-toast-leave-active {\n transition:\n opacity 0.2s ease,\n transform 0.2s ease;\n}\n\n.ab-toast-enter-from,\n.ab-toast-leave-to {\n opacity: 0;\n transform: translateY(8px);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport { Icon } from '@/index';\nimport styles from './InAgentLauncher.module.scss';\n\nexport interface InAgentLauncherProps {\n /** Newest agent line to surface. With text the launcher becomes a pill; without it, a badge. */\n message?: string;\n /** Breathing halo behind the badge — something is waiting to be read. */\n pulse?: boolean;\n label?: string;\n}\n\nconst props = withDefaults(defineProps<InAgentLauncherProps>(), {\n message: '',\n pulse: false,\n label: 'Open Design Agent',\n});\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\nconst isExpanded = computed(() => props.message.trim().length > 0);\nconst ariaLabel = computed(() => (isExpanded.value ? `${props.label}: ${props.message}` : props.label));\n</script>\n\n<template>\n <button\n type=\"button\"\n :aria-label=\"ariaLabel\"\n :class=\"[styles['agent-launcher'], { [styles['agent-launcher--expanded']]: isExpanded }]\"\n @click=\"emit('click')\">\n <span :class=\"styles['agent-launcher__badge-wrap']\">\n <template v-if=\"props.pulse\">\n <span\n aria-hidden=\"true\"\n :class=\"[styles['agent-launcher__halo'], styles['agent-launcher__halo--outer']]\" />\n <span\n aria-hidden=\"true\"\n :class=\"[styles['agent-launcher__halo'], styles['agent-launcher__halo--inner']]\" />\n </template>\n <span :class=\"styles['agent-launcher__badge']\">\n <Icon\n name=\"agent-launcher-badge\"\n :class=\"styles['agent-launcher__art']\"\n :size=\"48\" />\n <Icon\n name=\"agent-launcher-glyph\"\n :class=\"styles['agent-launcher__glyph']\"\n :size=\"28\" />\n </span>\n </span>\n <span\n v-if=\"isExpanded\"\n :class=\"styles['agent-launcher__message']\">\n {{ props.message }}\n </span>\n <Icon\n v-if=\"isExpanded\"\n name=\"line-full-screen\"\n :class=\"styles['agent-launcher__expand']\"\n :size=\"24\" />\n </button>\n</template>\n","/**\n * Whether the OS \"reduce motion\" setting is active. Live check (not cached at\n * module load) — the setting can change mid-session, so callers re-evaluate\n * each time an animation starts.\n */\nexport function prefersReducedMotion (): boolean {\n return typeof window !== 'undefined'\n && typeof window.matchMedia === 'function'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { prefersReducedMotion } from '@/utils/prefersReducedMotion';\nimport styles from './InAgentBackground.module.scss';\n\ninterface ParallaxBlob {\n el: HTMLElement;\n depth: number;\n cx: number;\n}\n\nexport interface InAgentBackgroundProps {\n /** Landing state — plays the aurora intro. Otherwise the aurora sits at rest. */\n animated?: boolean;\n /** Force the settled rest state: no intro, no drift, no parallax. */\n static?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentBackgroundProps>(), {\n animated: false,\n static: false,\n});\n\n/** No user activity for this long → freeze the aurora drift. */\nconst IDLE_TIMEOUT_MS = 3 * 60 * 1000;\nconst ACTIVITY_EVENTS = ['mousemove', 'keydown', 'pointerdown', 'wheel'] as const;\nconst rootRef = ref<HTMLElement | null>(null);\nconst reduceMotion = ref(prefersReducedMotion());\nconst isStatic = computed(() => props.static || reduceMotion.value);\nconst isHidden = ref(typeof document !== 'undefined' && document.hidden);\nconst isIdle = ref(false);\nconst isPaused = computed(() => isHidden.value || isIdle.value);\nlet blobs: ParallaxBlob[] = [];\nlet rafId: number | null = null;\nlet resizeObserver: ResizeObserver | null = null;\nlet idleTimer: ReturnType<typeof setTimeout> | null = null;\nlet lastActivityMs = 0;\nlet parallaxOn = false;\n\nconst motionQuery = typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(prefers-reduced-motion: reduce)')\n : null;\n\nconst armIdleTimer = (): void => {\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n }\n\n idleTimer = setTimeout(() => {\n isIdle.value = true;\n }, IDLE_TIMEOUT_MS);\n};\n\n// mousemove fires continuously — re-arm at most once per second so activity\n// tracking stays effectively free.\nconst onActivity = (): void => {\n const now = Date.now();\n\n if (now - lastActivityMs < 1000) {\n return;\n }\n\n lastActivityMs = now;\n isIdle.value = false;\n armIdleTimer();\n};\n\nconst measureBlobs = (): void => {\n blobs.forEach(blob => {\n blob.cx = blob.el.offsetLeft + blob.el.offsetWidth / 2;\n });\n};\n\n// Depth-based parallax: blobs slide opposite the pointer, scaled by their\n// `--depth`, so the aurora reads as layered glass.\nconst onMouseMove = (event: MouseEvent): void => {\n if (rafId !== null) {\n return;\n }\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const root = rootRef.value;\n\n if (!root) {\n return;\n }\n\n const rect = root.getBoundingClientRect();\n const localX = event.clientX - rect.left;\n const localY = event.clientY - rect.top;\n const ny = 0.5 - localY / rect.height;\n\n blobs.forEach(blob => {\n const nx = (blob.cx - localX) / rect.width;\n const tx = (nx * blob.depth).toFixed(1);\n const ty = (ny * blob.depth * 0.35).toFixed(1);\n\n blob.el.style.transform = `translate3d(${tx}px, ${ty}px, 0)`;\n });\n });\n};\n\nconst enableParallax = (): void => {\n if (parallaxOn || typeof window === 'undefined') {\n return;\n }\n\n parallaxOn = true;\n window.addEventListener('mousemove', onMouseMove, { passive: true });\n\n ACTIVITY_EVENTS.forEach(event => {\n window.addEventListener(event, onActivity, { passive: true });\n });\n\n armIdleTimer();\n};\n\nconst disableParallax = (): void => {\n if (!parallaxOn || typeof window === 'undefined') {\n return;\n }\n\n parallaxOn = false;\n window.removeEventListener('mousemove', onMouseMove);\n\n ACTIVITY_EVENTS.forEach(event => {\n window.removeEventListener(event, onActivity);\n });\n\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n\n blobs.forEach(blob => {\n blob.el.style.transform = '';\n });\n};\n\nconst onVisibilityChange = (): void => {\n isHidden.value = document.hidden;\n};\n\nconst onMotionChange = (): void => {\n reduceMotion.value = prefersReducedMotion();\n\n if (isStatic.value) {\n disableParallax();\n } else {\n enableParallax();\n }\n};\n\nwatch(isStatic, value => {\n if (value) {\n disableParallax();\n } else {\n enableParallax();\n }\n});\n\nonMounted(() => {\n const root = rootRef.value;\n\n if (root) {\n blobs = Array.from(root.querySelectorAll<HTMLElement>('[data-agent-blob]')).map(el => ({\n el,\n depth: parseFloat(getComputedStyle(el).getPropertyValue('--depth')) || 0,\n cx: 0,\n }));\n measureBlobs();\n }\n\n if (!isStatic.value) {\n enableParallax();\n }\n\n motionQuery?.addEventListener('change', onMotionChange);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n if (typeof ResizeObserver !== 'undefined' && root) {\n resizeObserver = new ResizeObserver(measureBlobs);\n resizeObserver.observe(root);\n }\n});\n\nonUnmounted(() => {\n disableParallax();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n motionQuery?.removeEventListener('change', onMotionChange);\n\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n resizeObserver?.disconnect();\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n aria-hidden=\"true\"\n :class=\"[\n styles['in-agent-background'],\n {\n [styles['in-agent-background--animated']]: props.animated,\n [styles['in-agent-background--static']]: isStatic,\n [styles['in-agent-background--paused']]: isPaused,\n },\n ]\">\n <div :class=\"styles['in-agent-background__aurora']\">\n <div :class=\"styles['in-agent-background__stage']\">\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--pink']]\" />\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--purple']]\" />\n <span\n data-agent-blob\n :class=\"[styles['in-agent-background__blob'], styles['in-agent-background__blob--blue']]\" />\n </div>\n </div>\n <div :class=\"styles['in-agent-background__grain']\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport InAgentBackground from '../InAgentBackground/InAgentBackground.vue';\nimport { Icon } from '@/index';\nimport styles from './InAgentPopup.module.scss';\n\nexport interface InAgentPopupProps {\n title?: string;\n badgeText?: string;\n minimizeLabel?: string;\n newChatLabel?: string;\n academyLabel?: string;\n showNewChat?: boolean;\n showAcademy?: boolean;\n showBackground?: boolean;\n backgroundAnimated?: boolean;\n /** Freeze the aurora: no intro, no drift, no parallax. */\n backgroundStatic?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentPopupProps>(), {\n title: 'Design Agent',\n badgeText: undefined,\n minimizeLabel: 'Minimize',\n newChatLabel: 'Start New Chat',\n academyLabel: 'Visit Academy',\n showNewChat: true,\n showAcademy: true,\n showBackground: true,\n backgroundAnimated: false,\n backgroundStatic: false,\n});\n\nconst emit = defineEmits<{\n minimize: [];\n split: [];\n newChat: [];\n academy: [];\n}>();\n\nconst onMinimize = () => {\n emit('minimize');\n};\n\nconst onNewChat = () => {\n emit('newChat');\n};\n\nconst onAcademy = () => {\n emit('academy');\n};\n</script>\n\n<template>\n <div :class=\"styles['in-agent-popup']\">\n <header :class=\"styles['in-agent-popup__header']\">\n <div :class=\"styles['in-agent-popup__brand']\">\n <slot name=\"brand\">\n <Icon\n name=\"agent-brand\"\n :size=\"24\" />\n </slot>\n </div>\n <h2 :class=\"styles['in-agent-popup__title']\">\n {{ props.title }}\n </h2>\n <slot name=\"badge\">\n <span\n v-if=\"props.badgeText\"\n :class=\"styles['in-agent-popup__badge']\">\n {{ props.badgeText }}\n </span>\n </slot>\n <div :class=\"styles['in-agent-popup__actions']\">\n <slot name=\"header-actions\">\n <button\n v-if=\"props.showNewChat\"\n type=\"button\"\n :aria-label=\"newChatLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"newChatLabel\"\n @click=\"onNewChat\">\n <Icon\n name=\"line-ai-message-reply-plus\"\n :size=\"24\" />\n </button>\n <button\n v-if=\"props.showAcademy\"\n type=\"button\"\n :aria-label=\"academyLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"academyLabel\"\n @click=\"onAcademy\">\n <Icon\n name=\"agent-academy\"\n :size=\"24\" />\n </button>\n <span\n v-if=\"props.showNewChat || props.showAcademy\"\n :class=\"styles['in-agent-popup__separator']\" />\n <button\n type=\"button\"\n :aria-label=\"minimizeLabel\"\n :class=\"styles['in-agent-popup__icon-button']\"\n :title=\"minimizeLabel\"\n @click=\"onMinimize\">\n <Icon\n name=\"line-minus-netural\"\n :size=\"24\" />\n </button>\n </slot>\n </div>\n </header>\n\n <div :class=\"styles['in-agent-popup__surface']\">\n <InAgentBackground\n v-if=\"props.showBackground\"\n :animated=\"props.backgroundAnimated\"\n :static=\"props.backgroundStatic\" />\n\n <div :class=\"styles['in-agent-popup__body']\">\n <slot />\n </div>\n\n <footer\n v-if=\"$slots.footer\"\n :class=\"styles['in-agent-popup__footer']\">\n <slot name=\"footer\" />\n </footer>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { inject, nextTick, onMounted, ref, watch } from 'vue';\n\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport { prefersReducedMotion } from '@/utils/prefersReducedMotion';\nimport styles from './InAgentWelcome.module.scss';\n\nexport interface InAgentWelcomeCategory {\n value: string;\n label: string;\n icon: AllIconNames;\n}\n\nexport interface InAgentQuickAction {\n id: string;\n label: string;\n /** Text handed to the consumer - a sentence starter, not a complete prompt. */\n prompt: string;\n}\n\nexport interface InAgentWelcomeProps {\n greeting?: string;\n title?: string;\n categories?: InAgentWelcomeCategory[];\n selected?: string | null;\n quickActions?: InAgentQuickAction[];\n}\n\nconst props = withDefaults(defineProps<InAgentWelcomeProps>(), {\n greeting: '',\n title: '',\n categories: () => [],\n selected: null,\n quickActions: () => [],\n});\n\nconst emit = defineEmits<{\n select: [value: string];\n 'quick-action': [prompt: string];\n}>();\n\nconst REVEAL_GAP = 16;\n// Entrance stagger: the intro rises first, then each button/chip follows one step behind the last.\nconst RISE_BASE_DELAY = 0.18;\nconst RISE_STEP = 0.06;\n\nconst riseDelay = (index: number): Record<string, string> => ({\n '--rise-delay': `${RISE_BASE_DELAY + index * RISE_STEP}s`,\n});\nconst MOVE_DURATION = 260;\nconst MOVE_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)';\nconst scrollEl = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\nconst bottomInset = inject<Ref<number>>('inAgentBottomInset', ref(0));\nconst rootRef = ref<HTMLElement | null>(null);\nconst cardsRef = ref<HTMLElement | null>(null);\n\n// A category with more templates than fit lands partly behind the floating composer. Follow it\n// down by exactly the clipped amount - never up, so the heading keeps its place at the top.\nconst revealCards = (): void => {\n const el = scrollEl.value;\n const cards = cardsRef.value;\n\n if (!el || !cards) {\n return;\n }\n\n const cardsBottom = el.scrollTop + (cards.getBoundingClientRect().bottom - el.getBoundingClientRect().top);\n const visibleBottom = el.scrollTop + el.clientHeight - bottomInset.value;\n const clipped = cardsBottom + REVEAL_GAP - visibleBottom;\n\n if (clipped <= 1) {\n return;\n }\n\n el.scrollTo({\n top: Math.min(el.scrollTop + clipped, el.scrollHeight - el.clientHeight),\n behavior: 'smooth',\n });\n};\n\n// Where the block sits once a category is picked. Unselected it simply centres (auto margins);\n// selected, it centres as if the grid were a single row and pins that offset - so a category\n// with several rows keeps the greeting and chips exactly where a one-row category put them and\n// grows downwards instead of dragging the whole block up.\nconst applyAnchor = (): void => {\n const root = rootRef.value;\n const scroller = scrollEl.value;\n\n if (!root) {\n return;\n }\n\n if (!props.selected || !scroller) {\n root.style.marginTop = '';\n\n return;\n }\n\n const cards = cardsRef.value;\n const grid = cards?.firstElementChild ?? null;\n const firstCard = grid?.firstElementChild ?? null;\n const rowHeight = firstCard?.getBoundingClientRect().height ?? 0;\n const cardsHeight = cards?.getBoundingClientRect().height ?? 0;\n // What the block would measure with a single row of cards.\n const singleRowHeight = root.getBoundingClientRect().height - cardsHeight + rowHeight;\n // The composer floats over the bottom of the scroller, so it is not part of the usable band.\n const available = scroller.clientHeight - bottomInset.value;\n\n root.style.marginTop = `${Math.max(0, (available - singleRowHeight) / 2)}px`;\n};\n\n// A resized composer changes the usable band underneath the block.\nwatch(bottomInset, () => applyAnchor());\n\nonMounted(() => applyAnchor());\n\n// The block is centred, so a taller card set repositions the greeting and chips. Rather than\n// animating the card area's height - which would need `overflow: hidden` and clip a hovered\n// card's ring mid-flight - the block plays the move as a FLIP: it starts shifted by the distance\n// it moved and slides to rest, while the new cards fade in at their final size. Transforms\n// and opacity never clip.\nwatch(\n () => props.selected,\n async value => {\n const root = rootRef.value;\n const firstTop = root?.getBoundingClientRect().top ?? 0;\n\n await nextTick();\n\n if (!root) {\n return;\n }\n\n applyAnchor();\n\n if (prefersReducedMotion()) {\n revealCards();\n\n return;\n }\n\n const delta = firstTop - root.getBoundingClientRect().top;\n const animations: Animation[] = [];\n\n if (Math.abs(delta) > 1) {\n animations.push(root.animate(\n [{ transform: `translateY(${delta}px)` }, { transform: 'translateY(0)' }],\n { duration: MOVE_DURATION, easing: MOVE_EASING }\n ));\n }\n\n const cards = cardsRef.value;\n\n if (value && cards) {\n animations.push(cards.animate(\n [{ opacity: 0, transform: 'translateY(6px)' }, { opacity: 1, transform: 'translateY(0)' }],\n { duration: MOVE_DURATION, easing: MOVE_EASING }\n ));\n }\n\n // Scroll once the block has come to rest, so the reveal measures final positions.\n Promise.all(animations.map(animation => animation.finished))\n .then(revealCards)\n .catch(() => revealCards());\n }\n);\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"styles['agent-welcome']\">\n <div :class=\"[styles['agent-welcome__intro'], styles['agent-welcome__rise--1']]\">\n <p\n v-if=\"props.greeting\"\n :class=\"styles['agent-welcome__greeting']\">\n {{ props.greeting }}\n </p>\n <p\n v-if=\"props.title\"\n :class=\"styles['agent-welcome__title']\">\n {{ props.title }}\n </p>\n </div>\n\n <div\n v-if=\"props.categories.length > 0\"\n :class=\"styles['agent-welcome__categories']\">\n <button\n v-for=\"(category, index) in props.categories\"\n :key=\"category.value\"\n type=\"button\"\n :aria-pressed=\"props.selected === category.value\"\n :class=\"[\n styles['agent-welcome__category'],\n styles['agent-welcome__rise-item'],\n { [styles['agent-welcome__category--selected']]: props.selected === category.value },\n ]\"\n :style=\"riseDelay(index)\"\n @click=\"emit('select', category.value)\">\n <Icon\n :class=\"styles['agent-welcome__category-icon']\"\n :name=\"category.icon\"\n :size=\"24\" />\n <span :class=\"styles['agent-welcome__category-label']\">{{ category.label }}</span>\n </button>\n </div>\n\n <div\n v-if=\"props.quickActions.length > 0\"\n :class=\"styles['agent-welcome__quick-actions']\">\n <button\n v-for=\"(action, index) in props.quickActions\"\n :key=\"action.id\"\n type=\"button\"\n :class=\"[styles['agent-welcome__quick-action'], styles['agent-welcome__rise-item']]\"\n :style=\"riseDelay(index)\"\n @click=\"emit('quick-action', action.prompt)\">\n {{ action.label }}\n </button>\n </div>\n\n <div\n v-if=\"$slots.cards\"\n ref=\"cardsRef\"\n :class=\"styles['agent-welcome__cards']\">\n <slot name=\"cards\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@/index';\nimport styles from './InBlueprintCard.module.scss';\n\nexport interface InBlueprintCardProps {\n title?: string;\n subtitle?: string;\n imageUrl?: string;\n badgeText?: string;\n}\n\nconst props = withDefaults(defineProps<InBlueprintCardProps>(), {\n title: 'Design preview',\n subtitle: undefined,\n imageUrl: undefined,\n badgeText: undefined,\n});\n\nconst emit = defineEmits<{\n open: [];\n}>();\n\nconst onOpen = () => {\n emit('open');\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n emit('open');\n }\n};\n</script>\n\n<template>\n <div\n role=\"button\"\n tabindex=\"0\"\n :class=\"styles['in-blueprint-card']\"\n @click=\"onOpen\"\n @keydown=\"onKeydown\">\n <div :class=\"styles['in-blueprint-card__thumb']\">\n <img\n v-if=\"props.imageUrl\"\n :alt=\"props.title\"\n :class=\"styles['in-blueprint-card__image']\"\n :src=\"props.imageUrl\">\n <slot\n v-else\n name=\"thumb\">\n <div :class=\"styles['in-blueprint-card__placeholder']\">\n <Icon\n name=\"line-figma\"\n :size=\"24\" />\n </div>\n </slot>\n <span\n v-if=\"props.badgeText\"\n :class=\"styles['in-blueprint-card__badge']\">\n {{ props.badgeText }}\n </span>\n </div>\n <div :class=\"styles['in-blueprint-card__footer']\">\n <div :class=\"styles['in-blueprint-card__text']\">\n <span :class=\"styles['in-blueprint-card__title']\">\n {{ props.title }}\n </span>\n <span\n v-if=\"props.subtitle\"\n :class=\"styles['in-blueprint-card__subtitle']\">\n {{ props.subtitle }}\n </span>\n </div>\n <span :class=\"styles['in-blueprint-card__open']\">\n <Icon\n name=\"line-external-link\"\n :size=\"16\" />\n </span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InAgentFiles.module.scss';\n\nexport interface InAgentFile {\n id: string;\n name: string;\n /** Secondary line - the source or format, e.g. \"Figma\". */\n type: string;\n thumbnailUrl?: string;\n /** Shown on a neutral tile when the file has no thumbnail. */\n icon?: AllIconNames;\n /** A brand theme shows its palette instead of a thumbnail. */\n swatch?: string[];\n}\n\nexport interface InAgentFilesProps {\n files?: InAgentFile[];\n removable?: boolean;\n /** Message variant: cards wrap and align right instead of scrolling in one row. */\n wrap?: boolean;\n removeLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InAgentFilesProps>(), {\n files: () => [],\n removable: true,\n wrap: false,\n removeLabel: 'Remove',\n});\n\n// Four bands read as a palette at 40px; more just become slivers.\nconst SWATCH_LIMIT = 4;\n\nconst emit = defineEmits<{\n remove: [id: string];\n open: [id: string];\n}>();\n</script>\n\n<template>\n <div\n v-if=\"props.files.length > 0\"\n :class=\"[styles['agent-files'], { [styles['agent-files--wrap']]: props.wrap }]\">\n <div\n v-for=\"file in props.files\"\n :key=\"file.id\"\n :class=\"styles['agent-files__card']\"\n @click=\"emit('open', file.id)\">\n <div :class=\"styles['agent-files__body']\">\n <span\n v-if=\"file.swatch?.length\"\n :class=\"[styles['agent-files__thumb'], styles['agent-files__thumb--swatch']]\">\n <span\n v-for=\"color in file.swatch.slice(0, SWATCH_LIMIT)\"\n :key=\"color\"\n :class=\"styles['agent-files__swatch-band']\"\n :style=\"{ background: color }\" />\n </span>\n <img\n v-else-if=\"file.thumbnailUrl\"\n :alt=\"file.name\"\n :class=\"styles['agent-files__thumb']\"\n :src=\"file.thumbnailUrl\">\n <span\n v-else\n :class=\"[styles['agent-files__thumb'], styles['agent-files__thumb--icon']]\">\n <Icon\n v-if=\"file.icon\"\n :name=\"file.icon\"\n :size=\"24\" />\n </span>\n\n <span :class=\"styles['agent-files__labels']\">\n <span :class=\"styles['agent-files__name']\">{{ file.name }}</span>\n <span :class=\"styles['agent-files__type']\">{{ file.type }}</span>\n </span>\n\n <button\n v-if=\"props.removable\"\n type=\"button\"\n :aria-label=\"props.removeLabel\"\n :class=\"styles['agent-files__remove']\"\n @click.stop=\"emit('remove', file.id)\">\n <Icon\n name=\"chip-close-6\"\n :size=\"6\" />\n </button>\n </div>\n </div>\n </div>\n</template>\n","import { onBeforeUnmount, onMounted, watch, type Ref } from 'vue';\n\nconst prefersReducedMotion = (): boolean => typeof window !== 'undefined'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\ninterface GeneratingRingOptions {\n containerRef: Ref<HTMLElement | null>;\n ringRef: Ref<SVGSVGElement | null>;\n active: Ref<boolean>;\n}\n\ntype Rgba = [number, number, number, number];\n\n// Comet colour profile along the perimeter, keyed by arc-length t ∈ [0,1]:\n// transparent until 0.21, red fading in, red→violet opaque core, violet\n// fading back out by 0.79 — the tapered generating-state stroke from Figma.\nconst COMET_STOPS: { p: number; c: Rgba }[] = [\n { p: 0.21, c: [250, 58, 58, 0] },\n { p: 0.37, c: [250, 58, 58, 1] },\n { p: 0.63, c: [118, 48, 212, 1] },\n { p: 0.79, c: [118, 48, 212, 0] },\n];\n\nconst SEGMENTS = 200;\n// Sub-segments per corner arc. Corners are drawn as true SVG arc commands, so\n// this only controls colour resolution across the (tiny) corner, not shape.\nconst CORNER_SEGMENTS = 4;\nconst PERIOD_MS = 2600;\nconst STROKE_WIDTH = 2;\n// Outer corner radius = container radius (5px) + 2px outset − 1px stroke inset.\nconst RING_RADIUS = 6;\nconst GLOW_STD_DEVIATION = 1.5;\n\nfunction cometColor (t: number): Rgba {\n const [first] = COMET_STOPS;\n const last = COMET_STOPS[COMET_STOPS.length - 1];\n\n if (t <= first.p || t >= last.p) {\n return [0, 0, 0, 0];\n }\n\n for (let i = 0; i < COMET_STOPS.length - 1; i += 1) {\n const a = COMET_STOPS[i];\n const b = COMET_STOPS[i + 1];\n\n if (t >= a.p && t <= b.p) {\n const f = (t - a.p) / (b.p - a.p);\n\n return [\n Math.round(a.c[0] + f * (b.c[0] - a.c[0])),\n Math.round(a.c[1] + f * (b.c[1] - a.c[1])),\n Math.round(a.c[2] + f * (b.c[2] - a.c[2])),\n a.c[3] + f * (b.c[3] - a.c[3]),\n ];\n }\n }\n\n return [0, 0, 0, 0];\n}\n\nfunction buildGlowDefs (svgNs: string, filterId: string): SVGDefsElement {\n const defs = document.createElementNS(svgNs, 'defs') as SVGDefsElement;\n const filter = document.createElementNS(svgNs, 'filter');\n\n filter.setAttribute('id', filterId);\n filter.setAttribute('x', '-50%');\n filter.setAttribute('y', '-50%');\n filter.setAttribute('width', '200%');\n filter.setAttribute('height', '200%');\n\n const blur = document.createElementNS(svgNs, 'feGaussianBlur');\n\n blur.setAttribute('in', 'SourceGraphic');\n blur.setAttribute('stdDeviation', String(GLOW_STD_DEVIATION));\n blur.setAttribute('result', 'blur');\n\n const merge = document.createElementNS(svgNs, 'feMerge');\n const glowNode = document.createElementNS(svgNs, 'feMergeNode');\n const sourceNode = document.createElementNS(svgNs, 'feMergeNode');\n\n glowNode.setAttribute('in', 'blur');\n sourceNode.setAttribute('in', 'SourceGraphic');\n merge.append(glowNode, sourceNode);\n filter.append(blur, merge);\n defs.append(filter);\n\n return defs;\n}\n\n/**\n * Animated \"comet\" ring traced around the composer while the agent generates.\n * Ported from cortex-fe `useGeneratingRing` so the Design Agent composer\n * matches the cortex chatbox behaviour.\n */\nexport function useGeneratingRing (options: GeneratingRingOptions): void {\n const { containerRef, ringRef, active } = options;\n // Unique per mount so two concurrent rings never collide on the same SVG\n // filter id in one document.\n const glowFilterId = `cortex-gen-ring-glow-${Math.random().toString(36).slice(2, 8)}`;\n let segmentMids: number[] = [];\n let lineEls: SVGPathElement[] = [];\n let rafId: number | null = null;\n let startTs: number | null = null;\n let observer: ResizeObserver | null = null;\n\n function buildGeometry (): void {\n const container = containerRef.value;\n const ring = ringRef.value;\n\n if (!container || !ring) {\n return;\n }\n\n const rect = container.getBoundingClientRect();\n const w = rect.width + STROKE_WIDTH * 2;\n const h = rect.height + STROKE_WIDTH * 2;\n\n if (!w || !h) {\n return;\n }\n\n ring.setAttribute('viewBox', `0 0 ${w} ${h}`);\n ring.setAttribute('width', String(w));\n ring.setAttribute('height', String(h));\n\n const inset = 1;\n const r = Math.max(RING_RADIUS, 1);\n const rw = w - inset * 2;\n const rh = h - inset * 2;\n const straight = rw - 2 * r;\n const side = rh - 2 * r;\n const arc = (Math.PI / 2) * r;\n const total = 2 * straight + 2 * side + 4 * arc;\n\n // Walk the rounded-rect perimeter clockwise from the top edge,\n // returning the point at arc-length distance `d`.\n function pointAt (d: number): { x: number; y: number } {\n let rem = d;\n\n if (rem <= straight) {\n return { x: r + rem, y: 0 };\n }\n\n rem -= straight;\n\n if (rem <= arc) {\n const th = -Math.PI / 2 + rem / r;\n\n return { x: rw - r + r * Math.cos(th), y: r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= side) {\n return { x: rw, y: r + rem };\n }\n\n rem -= side;\n\n if (rem <= arc) {\n const th = rem / r;\n\n return { x: rw - r + r * Math.cos(th), y: rh - r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= straight) {\n return { x: rw - r - rem, y: rh };\n }\n\n rem -= straight;\n\n if (rem <= arc) {\n const th = Math.PI / 2 + rem / r;\n\n return { x: r + r * Math.cos(th), y: rh - r + r * Math.sin(th) };\n }\n\n rem -= arc;\n\n if (rem <= side) {\n return { x: 0, y: rh - r - rem };\n }\n\n rem -= side;\n\n const th = Math.PI + rem / r;\n\n return { x: r + r * Math.cos(th), y: r + r * Math.sin(th) };\n }\n\n const svgNs = 'http://www.w3.org/2000/svg';\n const mids: number[] = [];\n const lines: SVGPathElement[] = [];\n\n // Segment boundaries snap to region edges so a segment never straddles\n // a straight/arc boundary; corner segments render as true `A` arc\n // commands instead of chords — that keeps corners perfectly round.\n const regions: { len: number; isArc: boolean }[] = [\n { len: straight, isArc: false },\n { len: arc, isArc: true },\n { len: side, isArc: false },\n { len: arc, isArc: true },\n { len: straight, isArc: false },\n { len: arc, isArc: true },\n { len: side, isArc: false },\n { len: arc, isArc: true },\n ];\n const targetLen = total / SEGMENTS;\n let regionStart = 0;\n\n for (const region of regions) {\n const count = region.isArc\n ? CORNER_SEGMENTS\n : Math.max(1, Math.round(region.len / targetLen));\n\n for (let i = 0; i < count; i += 1) {\n const d0 = regionStart + (region.len * i) / count;\n const d1 = regionStart + (region.len * (i + 1)) / count;\n const p0 = pointAt(d0);\n const p1 = pointAt(d1);\n const from = `M ${(p0.x + inset).toFixed(2)} ${(p0.y + inset).toFixed(2)}`;\n const to = `${(p1.x + inset).toFixed(2)} ${(p1.y + inset).toFixed(2)}`;\n const path = document.createElementNS(svgNs, 'path');\n\n path.setAttribute('d', region.isArc ? `${from} A ${r} ${r} 0 0 1 ${to}` : `${from} L ${to}`);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', 'transparent');\n path.setAttribute('stroke-width', String(STROKE_WIDTH));\n path.setAttribute('stroke-linecap', 'butt');\n\n lines.push(path);\n mids.push((d0 + d1) / 2 / total);\n }\n\n regionStart += region.len;\n }\n\n const group = document.createElementNS(svgNs, 'g');\n\n group.setAttribute('filter', `url(#${glowFilterId})`);\n group.append(...lines);\n\n ring.replaceChildren(buildGlowDefs(svgNs, glowFilterId), group);\n lineEls = lines;\n segmentMids = mids;\n }\n\n function paint (phase: number): void {\n for (let i = 0; i < segmentMids.length; i += 1) {\n const t = (((segmentMids[i] - phase) % 1) + 1) % 1;\n const [red, green, blue, alpha] = cometColor(t);\n\n lineEls[i].setAttribute('stroke', `rgba(${red},${green},${blue},${alpha})`);\n }\n }\n\n function frame (ts: number): void {\n if (startTs === null) {\n startTs = ts;\n }\n\n paint(((ts - startTs) / PERIOD_MS) % 1);\n rafId = requestAnimationFrame(frame);\n }\n\n function start (): void {\n if (typeof requestAnimationFrame === 'undefined') {\n return;\n }\n\n buildGeometry();\n startTs = null;\n\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n // NOTE: reduced motion — one static comet frame keeps the generating state visible without the sweep.\n if (prefersReducedMotion()) {\n paint(0);\n } else {\n rafId = requestAnimationFrame(frame);\n }\n\n if (typeof ResizeObserver !== 'undefined' && containerRef.value && !observer) {\n observer = new ResizeObserver(() => {\n if (active.value) {\n buildGeometry();\n\n if (prefersReducedMotion()) {\n paint(0);\n }\n }\n });\n observer.observe(containerRef.value);\n }\n }\n\n function stop (): void {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n\n observer?.disconnect();\n observer = null;\n }\n\n watch(active, on => {\n if (on) {\n start();\n } else {\n stop();\n }\n });\n\n onMounted(() => {\n if (active.value) {\n start();\n }\n });\n\n onBeforeUnmount(stop);\n}\n","<script lang=\"ts\" setup>\nimport type { InAgentFile } from '../InAgentFiles/InAgentFiles.vue';\nimport { computed, nextTick, ref, watch } from 'vue';\n\nimport InAgentFiles from '../InAgentFiles/InAgentFiles.vue';\nimport { Icon } from '@/index';\nimport styles from './InAgentInput.module.scss';\nimport { useGeneratingRing } from './useGeneratingRing';\n\nexport interface InAgentInputProps {\n modelValue?: string;\n placeholder?: string;\n loading?: boolean;\n disabled?: boolean;\n maxLength?: number;\n /** Attachments carried by the next prompt - rendered above the field. */\n files?: InAgentFile[];\n}\n\nconst props = withDefaults(defineProps<InAgentInputProps>(), {\n modelValue: '',\n placeholder: 'Describe your idea to Design Agent',\n loading: false,\n disabled: false,\n maxLength: 2000,\n files: () => [],\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n send: [value: string];\n stop: [];\n attach: [];\n 'remove-file': [id: string];\n}>();\n\nconst MAX_TEXTAREA_HEIGHT = 120;\nconst CHAR_NOTICE_OFFSET = 200;\nconst ATTACH_LABEL = 'Add context';\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\n\n// Lets a consumer hand the caret over after seeding the field (quick-action chips, prompt\n// templates) without reaching into the DOM itself.\ndefineExpose({\n focus: (): void => {\n textareaRef.value?.focus();\n },\n});\n\nconst containerRef = ref<HTMLElement | null>(null);\nconst genRingRef = ref<SVGSVGElement | null>(null);\nconst message = ref(props.modelValue);\nconst isFocused = ref(false);\n\nuseGeneratingRing({ containerRef, ringRef: genRingRef, active: computed(() => props.loading) });\n\nconst charCount = computed(() => message.value.length);\nconst isOverLimit = computed(() => props.maxLength !== undefined && charCount.value > props.maxLength);\nconst showCharNotice = computed(\n () => props.maxLength !== undefined && charCount.value >= props.maxLength - CHAR_NOTICE_OFFSET\n);\nconst noticeText = computed(() => (isOverLimit.value\n ? `Enter a prompt up to ${props.maxLength} characters to continue.`\n : `You can enter a prompt up to ${props.maxLength} characters.`));\n\nconst canSend = computed(\n () => message.value.trim().length > 0 && !isOverLimit.value && !props.loading && !props.disabled\n);\n\nconst autoResize = (): void => {\n const textarea = textareaRef.value;\n\n if (!textarea) {\n return;\n }\n\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, MAX_TEXTAREA_HEIGHT)}px`;\n textarea.style.overflowY = textarea.scrollHeight > MAX_TEXTAREA_HEIGHT ? 'auto' : 'hidden';\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (newValue !== message.value) {\n message.value = newValue;\n void nextTick(autoResize);\n }\n }\n);\n\nwatch(message, newValue => {\n emit('update:modelValue', newValue);\n});\n\nconst handleInput = (): void => {\n autoResize();\n};\n\nconst handleSend = (): void => {\n if (!canSend.value) {\n return;\n }\n\n emit('send', message.value.trim());\n message.value = '';\n void nextTick(autoResize);\n};\n\nconst handleButtonClick = (): void => {\n if (props.loading) {\n emit('stop');\n } else {\n handleSend();\n }\n};\n\nconst handleAttach = (): void => {\n emit('attach');\n};\n</script>\n\n<template>\n <div :class=\"styles['chat-input']\">\n <div\n v-if=\"showCharNotice\"\n :class=\"[\n styles['chat-input__notice'],\n isOverLimit ? styles['chat-input__notice--warning'] : styles['chat-input__notice--info'],\n ]\">\n <span :class=\"styles['chat-input__notice-body']\">\n <Icon\n :class=\"styles['chat-input__notice-icon']\"\n :name=\"isOverLimit ? 'filled-caution-triangle-colored' : 'filled-info-circle'\"\n :size=\"16\" />\n <span :class=\"styles['chat-input__notice-text']\">{{ noticeText }}</span>\n </span>\n <span :class=\"styles['chat-input__notice-count']\">{{ charCount }}/{{ maxLength }}</span>\n </div>\n <div\n ref=\"containerRef\"\n :class=\"[\n styles['chat-input__container'],\n {\n [styles['chat-input__container--focused']]: isFocused,\n [styles['chat-input__container--generating']]: loading,\n },\n ]\">\n <svg\n v-show=\"loading\"\n ref=\"genRingRef\"\n aria-hidden=\"true\"\n :class=\"styles['chat-input__gen-ring']\" />\n <InAgentFiles\n v-if=\"props.files.length > 0\"\n :class=\"styles['chat-input__files']\"\n :files=\"props.files\"\n @remove=\"emit('remove-file', $event)\" />\n <div :class=\"styles['chat-input__text-area']\">\n <textarea\n ref=\"textareaRef\"\n rows=\"1\"\n :class=\"styles['chat-input__textarea']\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n v-model=\"message\"\n @blur=\"isFocused = false\"\n @focus=\"isFocused = true\"\n @input=\"handleInput\"\n @keydown.enter.exact.prevent=\"handleSend\"\n @keydown.enter.shift.stop />\n </div>\n <div :class=\"styles['chat-input__toolbar']\">\n <div :class=\"styles['chat-input__toolbar-left']\">\n <button\n type=\"button\"\n :aria-label=\"ATTACH_LABEL\"\n :class=\"styles['chat-input__icon-btn']\"\n :disabled=\"disabled\"\n @click=\"handleAttach\">\n <Icon\n name=\"line-plus-netural\"\n :size=\"24\" />\n </button>\n </div>\n <div :class=\"styles['chat-input__actions']\">\n <button\n type=\"button\"\n :aria-label=\"loading ? 'Stop' : 'Send'\"\n :class=\"styles['chat-input__send-btn']\"\n :disabled=\"!canSend && !loading\"\n @click=\"handleButtonClick\">\n <Icon\n :name=\"loading ? 'line-ai-stop-solid' : 'line-architect-segments-sent'\"\n :size=\"24\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, ref, watch } from 'vue';\n\nimport styles from './InChatEditForm.module.scss';\n\nexport interface InChatEditFormProps {\n /** The message being edited; seeds the draft each time the form opens. */\n content?: string;\n active?: boolean;\n cancelLabel?: string;\n updateLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InChatEditFormProps>(), {\n content: '',\n active: false,\n cancelLabel: 'Cancel',\n updateLabel: 'Update',\n});\n\nconst emit = defineEmits<{\n cancel: [];\n update: [text: string];\n}>();\n\nconst draft = ref(props.content);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst trimmed = computed(() => draft.value.trim());\nconst isDirty = computed(() => trimmed.value !== '' && trimmed.value !== props.content);\n\n// Opening reseeds from the message and takes the caret; the form stays mounted either way so\n// the cross-fade with the bubble has something to animate.\nwatch(\n () => props.active,\n isActive => {\n if (!isActive) {\n return;\n }\n\n draft.value = props.content;\n\n void nextTick(() => {\n inputRef.value?.focus();\n });\n },\n { immediate: true }\n);\n\nconst onUpdate = (): void => {\n if (!isDirty.value) {\n return;\n }\n\n emit('update', trimmed.value);\n};\n</script>\n\n<template>\n <div :class=\"[styles['chat-edit-form'], { [styles['chat-edit-form--active']]: props.active }]\">\n <div :class=\"styles['chat-edit-form__body']\">\n <div :class=\"styles['chat-edit-form__border']\">\n <input\n ref=\"inputRef\"\n type=\"text\"\n :class=\"styles['chat-edit-form__input']\"\n :tabindex=\"props.active ? 0 : -1\"\n v-model=\"draft\"\n @keydown.enter.prevent=\"onUpdate\"\n @keydown.esc=\"emit('cancel')\">\n </div>\n <div :class=\"styles['chat-edit-form__actions']\">\n <button\n type=\"button\"\n :class=\"[styles['chat-edit-form__button'], styles['chat-edit-form__button--cancel']]\"\n :tabindex=\"props.active ? 0 : -1\"\n @click=\"emit('cancel')\">\n {{ props.cancelLabel }}\n </button>\n <button\n type=\"button\"\n :class=\"[styles['chat-edit-form__button'], styles['chat-edit-form__button--update']]\"\n :disabled=\"!isDirty\"\n :tabindex=\"props.active ? 0 : -1\"\n @click=\"onUpdate\">\n {{ props.updateLabel }}\n </button>\n </div>\n </div>\n </div>\n</template>\n","import type { Ref } from 'vue';\nimport { inject, ref } from 'vue';\n\nconst BUBBLE_CLEARANCE_PX = 56;\n\n/** Exported for unit tests — the flip decision without any DOM wiring. */\nexport function pickTooltipPosition (rowTop: number, scrollerTop: number): string {\n return rowTop - scrollerTop < BUBBLE_CLEARANCE_PX ? 'bottom center' : 'top center';\n}\n\ninterface MessageTooltipPosition {\n tooltipPosition: Ref<string>;\n onActionsEnter: (event: MouseEvent) => void;\n}\n\nexport function useMessageTooltipPosition (): MessageTooltipPosition {\n const scrollRef = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\n const tooltipPosition = ref('top center');\n\n const onActionsEnter = (event: MouseEvent): void => {\n const scroller = scrollRef?.value;\n const row = event.currentTarget as HTMLElement | null;\n\n if (!scroller || !row) {\n return;\n }\n\n tooltipPosition.value = pickTooltipPosition(\n row.getBoundingClientRect().top,\n scroller.getBoundingClientRect().top\n );\n };\n\n return { tooltipPosition, onActionsEnter };\n}\n","<script lang=\"ts\" setup>\nimport type { InAgentFile } from '../InAgentFiles/InAgentFiles.vue';\nimport type { Placement } from '@floating-ui/vue';\nimport { computed, getCurrentInstance } from 'vue';\n\nimport InAgentFiles from '../InAgentFiles/InAgentFiles.vue';\nimport InChatEditForm from '../InChatEditForm/InChatEditForm.vue';\nimport { useMessageTooltipPosition } from '@/composables/useMessageTooltipPosition';\nimport { Icon, Tooltip } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InChatBubble.module.scss';\n\nexport interface InChatBubbleProps {\n content?: string;\n timestamp?: string | number | Date;\n authorLabel?: string;\n showTimestamp?: boolean;\n showCopy?: boolean;\n editable?: boolean;\n /** Controlled by the conversation: only one message may be in edit mode at a time. */\n editing?: boolean;\n /**\n * Editing is momentarily unavailable (a turn is in flight). The action stays in place and\n * greys out rather than unmounting - removing it resizes the action row, and the bubble\n * shares that row's width, so the whole message would jump.\n */\n editDisabled?: boolean;\n copied?: boolean;\n copyLabel?: string;\n editLabel?: string;\n cancelLabel?: string;\n updateLabel?: string;\n /** Attachments this message was sent with - rendered above the bubble. */\n files?: InAgentFile[];\n}\n\nconst props = withDefaults(defineProps<InChatBubbleProps>(), {\n content: '',\n timestamp: () => Date.now(),\n authorLabel: 'You',\n showTimestamp: true,\n showCopy: false,\n editable: false,\n editing: false,\n editDisabled: false,\n copied: false,\n copyLabel: 'Copy',\n editLabel: 'Edit',\n cancelLabel: 'Cancel',\n updateLabel: 'Update',\n files: () => [],\n});\n\nconst emit = defineEmits<{\n copy: [];\n edit: [];\n 'cancel-edit': [];\n update: [text: string];\n}>();\n\nconst formattedTime = computed(() => {\n const date = new Date(props.timestamp);\n\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hourCycle: 'h23',\n });\n});\n\nconst copyIcon = computed<AllIconNames>(() => (props.copied ? 'line-check-natural' : 'line-copy'));\nconst { tooltipPosition, onActionsEnter } = useMessageTooltipPosition();\nconst tooltipPlacement = computed<Placement>(() => (\n tooltipPosition.value.startsWith('bottom') ? 'bottom' : 'top'\n));\nconst uid = getCurrentInstance()?.uid ?? 0;\n</script>\n\n<template>\n <div :class=\"styles['in-chat-bubble']\">\n <InAgentFiles\n v-if=\"props.files.length > 0\"\n wrap\n :class=\"styles['in-chat-bubble__files']\"\n :files=\"props.files\"\n :removable=\"false\" />\n <InChatEditForm\n v-if=\"editable\"\n :active=\"editing\"\n :cancel-label=\"cancelLabel\"\n :content=\"content\"\n :update-label=\"updateLabel\"\n @cancel=\"emit('cancel-edit')\"\n @update=\"emit('update', $event)\" />\n <div\n :class=\"[styles['in-chat-bubble__view'], { [styles['in-chat-bubble__view--hidden']]: editing }]\">\n <div\n :class=\"styles['in-chat-bubble__row']\"\n @mouseenter=\"onActionsEnter\">\n <div :class=\"styles['in-chat-bubble__actions']\">\n <Tooltip\n v-if=\"showCopy\"\n :id=\"`in-chat-bubble-copy-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"copyLabel\">\n <button\n type=\"button\"\n :aria-label=\"copyLabel\"\n :class=\"styles['in-chat-bubble__action']\"\n @click=\"emit('copy')\">\n <Icon\n :name=\"copyIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"editable\"\n :id=\"`in-chat-bubble-edit-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"editLabel\">\n <button\n type=\"button\"\n :aria-label=\"editLabel\"\n :class=\"styles['in-chat-bubble__action']\"\n :disabled=\"editDisabled\"\n @click=\"emit('edit')\">\n <Icon\n name=\"line-edit\"\n :size=\"24\" />\n </button>\n </Tooltip>\n </div>\n <div :class=\"styles['in-chat-bubble__bubble']\">\n <slot>\n <span :class=\"styles['in-chat-bubble__text']\">{{ content }}</span>\n </slot>\n </div>\n </div>\n <span\n v-if=\"showTimestamp\"\n :class=\"styles['in-chat-bubble__timestamp']\">\n {{ authorLabel }} · {{ formattedTime }}\n </span>\n </div>\n </div>\n</template>\n","import { ref } from 'vue';\nimport type DOMPurify from 'dompurify';\nimport type { marked as Marked, Tokens } from 'marked';\n\ntype MarkdownDeps = { marked: typeof Marked; purify: typeof DOMPurify };\n\nfunction escapeHtml (value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction buildRenderer (marked: typeof Marked) {\n const renderer = new marked.Renderer();\n\n renderer.link = function renderLink (token: Tokens.Link): string {\n const titleAttr = token.title ? ` title=\"${token.title}\"` : '';\n\n return `<a href=\"${token.href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${token.text}</a>`;\n };\n\n renderer.code = function renderCode (token: Tokens.Code): string {\n const [lang] = (token.lang ?? '').trim().split(/\\s+/);\n\n return '<div class=\"md-code\">'\n + '<div class=\"md-code__header\">'\n + `<span class=\"md-code__lang\">${escapeHtml(lang) || 'code'}</span>`\n + '<button type=\"button\" class=\"md-code__copy\">Copy</button>'\n + '</div>'\n + `<pre><code>${escapeHtml(token.text)}</code></pre>`\n + '</div>';\n };\n\n return renderer;\n}\n\nlet deps: MarkdownDeps | null = null;\nlet loading: Promise<void> | null = null;\n\n// Bumping a ref (rather than resolving a promise the caller awaits) is what keeps formatMarkdown\n// synchronous: a computed that calls it re-runs by itself once the chunk lands.\nconst depsLoaded = ref(false);\n\nfunction ensureDeps (): void {\n if (deps !== null || loading !== null) {\n return;\n }\n\n loading = Promise.all([import('marked'), import('dompurify')])\n .then(([markedModule, purifyModule]) => {\n const { marked } = markedModule;\n\n marked.setOptions({\n renderer: buildRenderer(marked),\n breaks: true,\n gfm: true,\n });\n\n deps = { marked, purify: purifyModule.default };\n depsLoaded.value = true;\n })\n .catch(error => {\n loading = null;\n console.warn('Markdown renderer failed to load:', error);\n });\n}\n\n/**\n * Delegated click handler for the copy button rendered inside v-html content.\n * Attach on any container that renders formatMarkdown() output.\n */\nexport function handleCodeCopyClick (event: MouseEvent): void {\n const button = (event.target as HTMLElement).closest?.('.md-code__copy');\n\n if (!(button instanceof HTMLButtonElement)) {\n return;\n }\n\n const code = button.closest('.md-code')?.querySelector('code')?.textContent ?? '';\n\n navigator.clipboard.writeText(code).then(() => {\n button.textContent = 'Copied!';\n window.setTimeout(() => {\n button.textContent = 'Copy';\n }, 1500);\n }).catch(error => console.warn('Copy failed:', error));\n}\n\nconst INLINE_CODE_LINE = /^(\\s*)`([^`]+)`\\s*$/;\n\nfunction collectInlineCodeRun (lines: string[], start: number): { run: string[]; codeCount: number; end: number } {\n const run: string[] = [];\n let codeCount = 0;\n let j = start;\n\n while (j < lines.length) {\n const match = lines[j].match(INLINE_CODE_LINE);\n\n if (match) {\n run.push(match[1] + match[2]);\n codeCount += 1;\n j += 1;\n } else if (lines[j].trim() === '') {\n let k = j;\n\n while (k < lines.length && lines[k].trim() === '') {\n k += 1;\n }\n\n if (k >= lines.length || !INLINE_CODE_LINE.test(lines[k])) {\n break;\n }\n\n while (j < k) {\n run.push('');\n j += 1;\n }\n } else {\n break;\n }\n }\n\n return { run, codeCount, end: j };\n}\n\nfunction mergeInlineCodeRuns (content: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const { run, codeCount, end } = INLINE_CODE_LINE.test(lines[i])\n ? collectInlineCodeRun(lines, i)\n : { run: [], codeCount: 0, end: i };\n\n if (codeCount >= 2) {\n const indents = run\n .filter(line => line.trim() !== '')\n .map(line => line.match(/^\\s*/)![0].length);\n const minIndent = Math.min(...indents);\n\n out.push('```', ...run.map(line => line.slice(minIndent)), '```');\n i = end;\n } else {\n out.push(lines[i]);\n i += 1;\n }\n }\n\n return out.join('\\n');\n}\n\nexport function useMarkdown (): { formatMarkdown (content: string): string } {\n const formatMarkdown = (content: string): string => {\n if (!content) {\n return '';\n }\n\n ensureDeps();\n void depsLoaded.value;\n\n // marked and dompurify are dynamically imported so consumers that never render markdown\n // do not pay for them; until that chunk resolves, show the text escaped rather than raw.\n if (deps === null) {\n return escapeHtml(content);\n }\n\n const html = deps.marked.parse(mergeInlineCodeRuns(content)) as string;\n\n const wrapped = html\n .replace(/<table>/g, '<div class=\"md-table\"><table>')\n .replace(/<\\/table>/g, '</table></div>');\n\n return deps.purify.sanitize(wrapped, { ADD_ATTR: ['target', 'rel'] });\n };\n\n return { formatMarkdown };\n}\n","<script lang=\"ts\" setup>\nimport type { Slots } from 'vue';\nimport { computed, useSlots } from 'vue';\nimport { useMarkdown, handleCodeCopyClick } from '@/composables/useMarkdown';\nimport { Icon } from '@/index';\nimport styles from './InAgentMessage.module.scss';\n\nexport interface InAgentMessageProps {\n text?: string;\n showAvatar?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentMessageProps>(), {\n text: '',\n showAvatar: false,\n});\n\nconst slots: Slots = useSlots();\nconst { formatMarkdown } = useMarkdown();\nconst hasDefaultSlot = computed<boolean>(() => Boolean(slots.default));\nconst renderedHtml = computed<string>(() => formatMarkdown(props.text ?? ''));\n</script>\n\n<template>\n <div :class=\"styles['in-agent-message']\">\n <div\n v-if=\"showAvatar\"\n :class=\"styles['in-agent-message__avatar']\">\n <Icon\n name=\"line-smart-ai\"\n :size=\"24\" />\n </div>\n <div :class=\"styles['in-agent-message__body']\">\n <slot v-if=\"hasDefaultSlot\" />\n <div\n v-else-if=\"text\"\n :class=\"styles['in-agent-message__md']\"\n v-html=\"renderedHtml\"\n @click=\"handleCodeCopyClick\" />\n <span\n v-else\n :class=\"styles['in-agent-message__text']\">{{ text }}</span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, watch } from 'vue';\n\nimport { Icon } from '@/index';\nimport styles from './InChatLoading.module.scss';\n\nexport interface InChatLoadingProps {\n text?: string;\n cycling?: boolean;\n}\n\nconst props = withDefaults(defineProps<InChatLoadingProps>(), {\n text: '',\n cycling: true,\n});\n\nconst PHASE_INTERVAL = 2500;\nconst phases = ['Analyzing…', 'Processing…', 'Searching…', 'Synthesizing…'];\nconst phaseIndex = ref(0);\nlet intervalId: ReturnType<typeof setInterval> | null = null;\n\nconst displayText = computed(() => {\n if (props.text) {\n return props.text;\n }\n\n return phases[phaseIndex.value];\n});\n\nconst stopCycling = (): void => {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n};\n\nconst startCycling = (): void => {\n if (intervalId) {\n return;\n }\n\n intervalId = setInterval(() => {\n phaseIndex.value = (phaseIndex.value + 1) % phases.length;\n }, PHASE_INTERVAL);\n};\n\nwatch(\n () => props.cycling && !props.text,\n active => {\n if (active) {\n startCycling();\n } else {\n stopCycling();\n }\n },\n { immediate: true }\n);\n\nonUnmounted(stopCycling);\n</script>\n\n<template>\n <div :class=\"styles['in-chat-loading']\">\n <Icon\n name=\"agent-analyzing\"\n :class=\"styles['in-chat-loading__icon']\"\n :size=\"24\" />\n <span :class=\"styles['in-chat-loading__text']\">{{ displayText }}</span>\n </div>\n</template>\n","<script lang=\"ts\" setup>\n// cspell:ignore retryable\nimport type { Placement } from '@floating-ui/vue';\nimport { computed, getCurrentInstance, ref, watch } from 'vue';\n\nimport { useMessageTooltipPosition } from '@/composables/useMessageTooltipPosition';\nimport { Icon, Tooltip } from '@/index';\nimport type { AllIconNames } from '@/index';\nimport styles from './InChatMessageActions.module.scss';\n\nexport interface InChatMessageActionsProps {\n feedback?: 'like' | 'dislike' | null;\n copied?: boolean;\n copyLabel?: string;\n likeLabel?: string;\n dislikeLabel?: string;\n retryable?: boolean;\n retryLabel?: string;\n /** A failed turn offers only a retry - there is nothing to copy or rate. */\n showCopy?: boolean;\n showFeedback?: boolean;\n}\n\nconst props = withDefaults(defineProps<InChatMessageActionsProps>(), {\n feedback: null,\n copied: false,\n copyLabel: 'Copy',\n likeLabel: 'Like',\n dislikeLabel: 'Dislike',\n retryable: false,\n retryLabel: 'Retry',\n showCopy: true,\n showFeedback: true,\n});\n\nconst emit = defineEmits<{\n copy: [];\n like: [];\n dislike: [];\n retry: [];\n}>();\n\nconst COPIED_TICK_DURATION = 1500;\nconst showTick = ref(false);\nlet tickTimeout: ReturnType<typeof setTimeout> | null = null;\n\nconst startTick = (): void => {\n showTick.value = true;\n\n if (tickTimeout) {\n clearTimeout(tickTimeout);\n }\n\n tickTimeout = setTimeout(() => {\n showTick.value = false;\n tickTimeout = null;\n }, COPIED_TICK_DURATION);\n};\n\nwatch(\n () => props.copied,\n isCopied => {\n if (isCopied) {\n startTick();\n }\n },\n { immediate: true }\n);\n\nconst copyIcon = computed<AllIconNames>(() => (showTick.value ? 'line-check-natural' : 'line-copy'));\nconst likeIcon = computed<AllIconNames>(() => {\n if (props.feedback === 'like') {\n return 'feedback-helpful-selected';\n }\n\n return 'line-ai-like';\n});\nconst dislikeIcon = computed<AllIconNames>(() => {\n if (props.feedback === 'dislike') {\n return 'feedback-not-helpful-selected';\n }\n\n return 'line-ai-dislike';\n});\n\nconst onCopy = (): void => {\n startTick();\n emit('copy');\n};\n\nconst { tooltipPosition, onActionsEnter } = useMessageTooltipPosition();\nconst tooltipPlacement = computed<Placement>(() => (\n tooltipPosition.value.startsWith('bottom') ? 'bottom' : 'top'\n));\nconst uid = getCurrentInstance()?.uid ?? 0;\n</script>\n\n<template>\n <div\n :class=\"styles['in-chat-message-actions']\"\n @mouseenter=\"onActionsEnter\">\n <Tooltip\n v-if=\"retryable\"\n :id=\"`in-chat-message-actions-retry-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"retryLabel\">\n <button\n type=\"button\"\n :aria-label=\"retryLabel\"\n :class=\"styles['in-chat-message-actions__button']\"\n @click=\"emit('retry')\">\n <Icon\n name=\"line-reset\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showCopy\"\n :id=\"`in-chat-message-actions-copy-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"copyLabel\">\n <button\n type=\"button\"\n :aria-label=\"copyLabel\"\n :class=\"styles['in-chat-message-actions__button']\"\n @click=\"onCopy\">\n <Icon\n :name=\"copyIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showFeedback\"\n :id=\"`in-chat-message-actions-like-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"likeLabel\">\n <button\n type=\"button\"\n :aria-label=\"likeLabel\"\n :class=\"[\n styles['in-chat-message-actions__button'],\n { [styles['in-chat-message-actions__button--active']]: feedback === 'like' },\n ]\"\n @click=\"emit('like')\">\n <Icon\n :name=\"likeIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n <Tooltip\n v-if=\"showFeedback\"\n :id=\"`in-chat-message-actions-dislike-${uid}`\"\n :placement=\"tooltipPlacement\"\n :text=\"dislikeLabel\">\n <button\n type=\"button\"\n :aria-label=\"dislikeLabel\"\n :class=\"[\n styles['in-chat-message-actions__button'],\n { [styles['in-chat-message-actions__button--active']]: feedback === 'dislike' },\n ]\"\n @click=\"emit('dislike')\">\n <Icon\n :name=\"dislikeIcon\"\n :size=\"24\" />\n </button>\n </Tooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, provide, onMounted, onUnmounted, nextTick, watch } from 'vue';\nimport InScrollToBottomButton from '@/components/InScrollToBottomButton/InScrollToBottomButton.vue';\nimport styles from './InAgentConversation.module.scss';\n\nconst SCROLL_THRESHOLD = 50;\nconst rootRef = ref<HTMLElement | null>(null);\nconst scrollRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLElement | null>(null);\nconst composerHeight = ref(0);\nconst userHasScrolledUp = ref(false);\nlet composerResizeObserver: ResizeObserver | null = null;\nlet scrollResizeObserver: ResizeObserver | null = null;\n\n// The keyboard boundary for slotted widgets: a question form owns arrow keys for the whole\n// panel, so it can tell a stray keypress from one that belongs to the conversation.\nprovide('inAgentConversationRoot', rootRef);\nprovide('inAgentScrollContainer', scrollRef);\nprovide('inAgentBottomInset', composerHeight);\n\nconst updateComposerHeight = (): void => {\n composerHeight.value = inputRef.value?.offsetHeight ?? 0;\n};\n\nconst onScroll = (): void => {\n const el = scrollRef.value;\n\n if (!el) {\n return;\n }\n\n // Measure against the last real message, not raw scrollHeight: the message list carries a\n // bottom spacer (pinned-scroll) and the scroller reserves paddingBottom for the floating\n // composer. Both inflate scrollHeight past the last message, so the naive\n // `scrollTop + clientHeight < scrollHeight` reads \"scrolled up\" even when that message sits\n // fully in view just above the composer - stranding the button over nothing.\n const messages = el.querySelectorAll<HTMLElement>('[data-msg-id]');\n const lastMessage = messages[messages.length - 1];\n\n if (!lastMessage) {\n userHasScrolledUp.value = false;\n\n return;\n }\n\n // The composer floats over the scroller's bottom, so the usable band ends composerHeight\n // above the container's bottom edge.\n const bandBottom = el.getBoundingClientRect().bottom - composerHeight.value;\n\n userHasScrolledUp.value = lastMessage.getBoundingClientRect().bottom - bandBottom > SCROLL_THRESHOLD;\n};\n\n// A question form takes the composer's place and is far taller than the input it replaces, so the\n// band a message can be read in moves the moment it mounts. Nothing else recomputes the flag at\n// that point: the form lives outside the scroller, so the observers below never see it.\nwatch(composerHeight, () => onScroll());\n\n// Resizing the panel or the window changes the scroller's height and its content's height\n// without firing `scroll`, so this flag would keep the value it had at the old size - stranding\n// the scroll-to-bottom button over a conversation that is already fully scrolled, where pressing\n// it has nothing left to travel to.\nconst observeScrollBox = (): void => {\n const el = scrollRef.value;\n\n if (typeof ResizeObserver === 'undefined' || !el) {\n return;\n }\n\n scrollResizeObserver?.disconnect();\n scrollResizeObserver = new ResizeObserver(() => onScroll());\n scrollResizeObserver.observe(el);\n\n // The content box too: a reflow at the same viewport height (a wizard opening, a message\n // rewrapping) changes scrollHeight, which decides the flag just as much as the viewport does.\n const content = el.firstElementChild;\n\n if (content) {\n scrollResizeObserver.observe(content);\n }\n};\n\nconst scrollBottom = (): void => {\n const el = scrollRef.value;\n\n if (!el) {\n return;\n }\n\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\n};\n\nonMounted(() => {\n nextTick(() => {\n updateComposerHeight();\n\n if (typeof ResizeObserver !== 'undefined' && inputRef.value) {\n composerResizeObserver = new ResizeObserver(updateComposerHeight);\n composerResizeObserver.observe(inputRef.value);\n }\n\n scrollRef.value?.addEventListener('scroll', onScroll, { passive: true });\n observeScrollBox();\n });\n});\n\nonUnmounted(() => {\n composerResizeObserver?.disconnect();\n composerResizeObserver = null;\n scrollResizeObserver?.disconnect();\n scrollResizeObserver = null;\n scrollRef.value?.removeEventListener('scroll', onScroll);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"styles['in-agent-conversation']\">\n <div\n ref=\"scrollRef\"\n :class=\"styles.scroll\"\n :style=\"{ paddingBottom: `${composerHeight}px` }\">\n <slot />\n </div>\n <div :class=\"styles.composer\">\n <div\n ref=\"inputRef\"\n :class=\"styles.input\">\n <InScrollToBottomButton\n :unread-count=\"0\"\n :visible=\"userHasScrolledUp\"\n @click=\"scrollBottom\" />\n <slot name=\"composer\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { ref, watch, inject, onMounted, onUnmounted, nextTick } from 'vue';\nimport styles from './InAgentMessageList.module.scss';\n\nexport interface InAgentMessageListItem {\n id: string;\n role: 'user' | 'agent';\n}\n\nexport interface InAgentMessageListProps {\n messages: InAgentMessageListItem[];\n autoScroll?: boolean;\n}\n\nconst props = withDefaults(defineProps<InAgentMessageListProps>(), {\n autoScroll: false,\n});\n\nconst emit = defineEmits<{\n scroll: [payload: { isAtBottom: boolean; scrollTop: number }];\n}>();\n\nconst SCROLL_THRESHOLD = 50;\nconst scrollEl = inject<Ref<HTMLElement | null>>('inAgentScrollContainer', ref(null));\n// The composer floats over the bottom of the scroller, so the band a message can be read in stops\n// short of the container's edge by this much.\nconst bottomInset = inject<Ref<number>>('inAgentBottomInset', ref(0));\nconst listRef = ref<HTMLElement | null>(null);\nconst userHasScrolledUp = ref(false);\nconst getScrollElement = (): HTMLElement | null => scrollEl.value;\n\n// \"At the bottom\" means the newest message is in view, not that scrollTop reached the end of the\n// range: the scroller reserves paddingBottom for the floating composer, and counting that empty\n// band as unread would report a reader at the visual bottom as scrolled away.\nconst measureAtBottom = (el: HTMLElement): boolean => {\n const last = listRef.value?.lastElementChild;\n\n if (!last) {\n return true;\n }\n\n const bandBottom = el.getBoundingClientRect().bottom - bottomInset.value;\n\n return last.getBoundingClientRect().bottom - bandBottom <= SCROLL_THRESHOLD;\n};\n\nconst handleScroll = (): boolean => {\n const el = getScrollElement();\n\n if (!el) {\n return true;\n }\n\n const isAtBottom = measureAtBottom(el);\n\n userHasScrolledUp.value = !isAtBottom;\n emit('scroll', { isAtBottom, scrollTop: el.scrollTop });\n\n return isAtBottom;\n};\n\n// Rest the conversation against the composer: the newest message's bottom meets the top of the\n// floating input, with the list's own bottom padding as the gap.\nconst scrollToBottom = (force = false, behavior: ScrollBehavior = 'smooth'): void => {\n if (userHasScrolledUp.value && !force) {\n return;\n }\n\n nextTick(() => {\n const el = getScrollElement();\n\n if (!el) {\n return;\n }\n\n const top = el.scrollHeight - el.clientHeight;\n\n if (behavior === 'auto') {\n el.scrollTop = top;\n } else {\n el.scrollTo({ top, behavior });\n }\n\n userHasScrolledUp.value = false;\n });\n};\n\nlet boundScrollEl: HTMLElement | null = null;\nlet sizeObserver: ResizeObserver | null = null;\nlet resizeFrame: number | null = null;\n\n// A resize changes the scroller's height and the content's height without ever firing `scroll`,\n// so the at-bottom flag would keep the value it held at the old size.\nconst observeSizeChanges = (scroller: HTMLElement): void => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n sizeObserver?.disconnect();\n sizeObserver = new ResizeObserver(() => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n }\n\n // Coalesced: a drag-resize fires this continuously.\n resizeFrame = requestAnimationFrame(() => {\n resizeFrame = null;\n\n // A reader at the bottom stays there as the box changes around them.\n if (!userHasScrolledUp.value) {\n scrollToBottom(true, 'auto');\n\n return;\n }\n\n handleScroll();\n });\n });\n sizeObserver.observe(scroller);\n\n if (listRef.value) {\n sizeObserver.observe(listRef.value);\n }\n};\n\nconst bindScrollListener = (): void => {\n const el = getScrollElement();\n\n if (el === boundScrollEl) {\n return;\n }\n\n if (boundScrollEl) {\n boundScrollEl.removeEventListener('scroll', handleScroll);\n }\n\n if (el) {\n el.addEventListener('scroll', handleScroll, { passive: true });\n boundScrollEl = el;\n observeSizeChanges(el);\n }\n};\n\n// Keyed on the ids, not the count: a turn ends by SWAPPING the loading row for the real reply,\n// which leaves the length untouched.\nwatch(\n () => props.messages.map(message => message.id).join('|'),\n (next, previous) => {\n const seen = new Set(previous ? previous.split('|') : []);\n const added = props.messages.filter(message => !seen.has(message.id));\n\n if (added.length === 0 || !props.autoScroll) {\n return;\n }\n\n // Sending always takes the reader to their own message; an arriving reply only follows if\n // they were already at the bottom, so reading back through the history is never yanked.\n scrollToBottom(added.some(message => message.role === 'user'));\n }\n);\n\n// A question form takes the composer's place and is far taller than the input it replaces, so it\n// can swallow the newest message; follow it back into view for a reader who was at the bottom.\nwatch(bottomInset, () => {\n if (userHasScrolledUp.value) {\n handleScroll();\n\n return;\n }\n\n nextTick(() => scrollToBottom(true));\n});\n\nwatch(scrollEl, () => {\n nextTick(() => bindScrollListener());\n});\n\nonMounted(() => {\n nextTick(() => {\n bindScrollListener();\n\n if (props.autoScroll) {\n scrollToBottom(true, 'auto');\n }\n });\n});\n\nonUnmounted(() => {\n if (boundScrollEl) {\n boundScrollEl.removeEventListener('scroll', handleScroll);\n boundScrollEl = null;\n }\n\n sizeObserver?.disconnect();\n sizeObserver = null;\n\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n});\n\ndefineExpose({ scrollToBottom });\n</script>\n\n<template>\n <div :class=\"styles['in-agent-message-list']\">\n <div\n ref=\"listRef\"\n :class=\"styles.list\">\n <div\n v-for=\"message in messages\"\n :key=\"message.id\"\n :data-msg-id=\"message.id\"\n :data-msg-role=\"message.role\">\n <slot :message=\"message\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Button } from '@/index';\nimport styles from './InWizardFooter.module.scss';\n\nexport interface InWizardFooterProps {\n currentStep: number;\n totalSteps: number;\n isRequired?: boolean;\n isLastStep?: boolean;\n canGoBack?: boolean;\n canContinue?: boolean;\n canSubmit?: boolean;\n backLabel?: string;\n nextLabel?: string;\n skipLabel?: string;\n submitLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InWizardFooterProps>(), {\n isRequired: true,\n isLastStep: false,\n canGoBack: false,\n canContinue: false,\n canSubmit: false,\n backLabel: 'Back',\n nextLabel: 'Next',\n skipLabel: 'Skip',\n submitLabel: 'Submit',\n});\n\nconst emit = defineEmits<{\n back: [];\n next: [];\n skip: [];\n submit: [];\n}>();\n</script>\n\n<template>\n <div :class=\"styles['wizard-footer']\">\n <div :class=\"styles['wizard-footer__left']\">\n <Button\n v-if=\"props.canGoBack\"\n color=\"secondary\"\n left-icon-name=\"line-arrow-left\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.backLabel\"\n @click=\"emit('back')\" />\n </div>\n <span\n v-if=\"props.totalSteps > 1\"\n :class=\"styles['wizard-footer__pagination']\">\n {{ props.currentStep + 1 }}/{{ props.totalSteps }}\n </span>\n <div :class=\"styles['wizard-footer__right']\">\n <Button\n v-if=\"props.isLastStep && props.canSubmit\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.submitLabel\"\n @click=\"emit('submit')\" />\n <Button\n v-else-if=\"props.isLastStep && props.isRequired\"\n data-wizard-footer-primary\n disabled\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.submitLabel\" />\n <Button\n v-else-if=\"props.isLastStep\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-architect-segments-sent\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.skipLabel\"\n @click=\"emit('skip')\" />\n <Button\n v-else-if=\"props.canContinue\"\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-arrow-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.nextLabel\"\n @click=\"emit('next')\" />\n <Button\n v-else-if=\"props.isRequired\"\n data-wizard-footer-primary\n disabled\n color=\"secondary\"\n right-icon-name=\"line-arrow-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.nextLabel\" />\n <Button\n v-else\n data-wizard-footer-primary\n color=\"secondary\"\n right-icon-name=\"line-chevron-double-right\"\n variant=\"ghost\"\n :icon-size=\"24\"\n :label=\"props.skipLabel\"\n @click=\"emit('skip')\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Button, Tooltip } from '@/index';\nimport styles from './InWizardHeader.module.scss';\n\nexport interface InWizardHeaderProps {\n title: string;\n infoTooltip?: string;\n showClose?: boolean;\n closeLabel?: string;\n}\n\nconst props = withDefaults(defineProps<InWizardHeaderProps>(), {\n infoTooltip: '',\n showClose: true,\n closeLabel: 'Close',\n});\n\nconst emit = defineEmits<{\n close: [];\n}>();\n\nconst infoLabel = 'Info';\n</script>\n\n<template>\n <div :class=\"styles['wizard-header']\">\n <div :class=\"styles['wizard-header__content']\">\n <span :class=\"styles['wizard-header__title']\">{{ title }}</span>\n <div :class=\"styles['wizard-header__actions']\">\n <Tooltip\n v-if=\"props.infoTooltip\"\n id=\"wizard-info-tooltip\"\n placement=\"top\"\n :show-delay=\"0\"\n :text=\"props.infoTooltip\">\n <Button\n color=\"secondary\"\n left-icon-name=\"agent-info\"\n size=\"small\"\n variant=\"ghost\"\n :aria-label=\"infoLabel\"\n :icon-size=\"24\" />\n </Tooltip>\n <span\n v-if=\"props.infoTooltip && props.showClose\"\n :class=\"styles['wizard-header__divider']\" />\n <Button\n v-if=\"props.showClose\"\n color=\"secondary\"\n left-icon-name=\"agent-close\"\n size=\"small\"\n variant=\"ghost\"\n :aria-label=\"props.closeLabel\"\n :icon-size=\"24\"\n @click=\"emit('close')\" />\n </div>\n </div>\n <div :class=\"styles['wizard-header__divider-line']\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { ref, computed, watch, getCurrentInstance, inject, nextTick, onMounted, onBeforeUnmount } from 'vue';\nimport InWizardFooter from '../InWizardFooter/InWizardFooter.vue';\nimport InWizardHeader from '../InWizardHeader/InWizardHeader.vue';\nimport type { PlanSelectOption, InCardSelectValue } from '@/index';\nimport { InSingleSelect, InMultiSelect, InCardSelect } from '@/index';\nimport styles from './InAskUserWizard.module.scss';\n\nexport interface AgentQuestion {\n id: string;\n question: string;\n options: PlanSelectOption[];\n multiSelect?: boolean;\n allowCustom?: boolean;\n variant?: 'list' | 'card';\n /** Questions are skippable one by one unless explicitly marked required. */\n required?: boolean;\n}\n\nexport interface AgentAnswer {\n questionId: string;\n question: string;\n selectedLabels: string[];\n customText?: string;\n}\n\nexport interface InAskUserWizardProps {\n steps: AgentQuestion[];\n submitLabel?: string;\n nextLabel?: string;\n backLabel?: string;\n skipLabel?: string;\n customPlaceholder?: string;\n /** Keyboard help shown behind the header's info icon. Pass '' to hide the icon entirely. */\n infoTooltip?: string;\n closeLabel?: string;\n}\n\nconst NAVIGATION_TOOLTIP = '↑↓ to navigate options.<br>'\n + '←→ to navigate questions.<br>↵ to select and continue.';\n\nconst props = withDefaults(defineProps<InAskUserWizardProps>(), {\n submitLabel: 'Submit',\n nextLabel: 'Next',\n backLabel: 'Back',\n skipLabel: 'Skip',\n customPlaceholder: 'Enter your answer…',\n infoTooltip: NAVIGATION_TOOLTIP,\n closeLabel: 'Close',\n});\n\nconst emit = defineEmits<{\n submit: [answers: AgentAnswer[]];\n close: [];\n}>();\n\ninterface Draft {\n selected: string[];\n custom: string;\n}\n\nconst CUSTOM_KEY = '__ask_user_custom__';\nconst NAV_KEYS = ['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\nconst fallbackStep: AgentQuestion = { id: '', question: '', options: [] };\nconst wizardRoot = ref<HTMLElement | null>(null);\nconst listId = `ask-wizard-${getCurrentInstance()?.uid ?? 0}`;\nconst conversationRoot = inject<Ref<HTMLElement | null>>('inAgentConversationRoot', ref(null));\nconst stepIndex = ref(0);\nconst highlightedIndex = ref(-1);\n// The highlight ring belongs to whoever is driving. It renders only while the keyboard is,\n// and any mouse movement hands the affordance straight back to :hover.\nconst keyboardActive = ref(false);\n// True once ArrowDown has walked past the last row onto the footer's primary button.\nconst footerFocused = ref(false);\nconst drafts = ref<Record<string, Draft>>({});\n\nconst currentStep = computed<AgentQuestion>(\n () => props.steps[stepIndex.value] ?? fallbackStep\n);\n\nconst isLastStep = computed(() => stepIndex.value >= props.steps.length - 1);\n\nconst currentDraft = computed<Draft>(\n () => drafts.value[currentStep.value.id] ?? { selected: [], custom: '' }\n);\n\nconst currentAllowCustom = computed(\n () => Boolean(currentStep.value.allowCustom) && currentStep.value.variant !== 'card'\n);\n\nconst currentStepHasAnswer = computed(() => {\n const draft = currentDraft.value;\n\n return draft.selected.length > 0 || draft.custom.trim().length > 0;\n});\n\nconst currentSelectedSingle = computed<string | null>(\n () => currentDraft.value.selected[0] ?? null\n);\n\nconst currentStepRequired = computed(() => currentStep.value.required === true);\n\n// A required question holds the wizard until it is answered; every other question can be\n// left behind on its own (Skip), and lands in the submitted answers with no selection.\nconst canLeaveCurrentStep = computed(\n () => !currentStepRequired.value || currentStepHasAnswer.value\n);\n\nconst navValues = computed<string[]>(() => {\n const values = currentStep.value.options.map(option => option.value);\n\n if (currentAllowCustom.value) {\n values.push(CUSTOM_KEY);\n }\n\n return values;\n});\n\nconst highlightedValue = computed<string | null>(\n () => navValues.value[highlightedIndex.value] ?? null\n);\n\nconst isHighlightVisible = computed(() => keyboardActive.value && !footerFocused.value);\n\nconst customHighlighted = computed(\n () => isHighlightVisible.value && highlightedValue.value === CUSTOM_KEY\n);\n\nconst highlightedForSelect = computed<string | null>(() => {\n if (!isHighlightVisible.value || highlightedValue.value === CUSTOM_KEY) {\n return null;\n }\n\n return highlightedValue.value;\n});\n\nconst cardModelValue = computed<InCardSelectValue>(() => (currentStep.value.multiSelect\n ? currentDraft.value.selected\n : currentDraft.value.selected[0] ?? null));\n\nfunction setDraft (id: string, draft: Draft): void {\n drafts.value = { ...drafts.value, [id]: { ...draft } };\n}\n\nfunction selectValue (value: string): void {\n setDraft(currentStep.value.id, { selected: [value], custom: '' });\n}\n\nfunction toggleValue (value: string): void {\n const draft = currentDraft.value;\n const next = new Set(draft.selected);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n setDraft(currentStep.value.id, { selected: [...next], custom: draft.custom });\n}\n\nfunction onCustomInput (value: string): void {\n const draft = currentDraft.value;\n const selected = currentStep.value.multiSelect ? draft.selected : [];\n\n setDraft(currentStep.value.id, { selected, custom: value });\n}\n\nfunction onOptionFocus (value: string): void {\n const index = navValues.value.indexOf(value);\n\n if (index !== -1) {\n highlightedIndex.value = index;\n }\n}\n\nfunction onCustomFocus (): void {\n const customIndex = navValues.value.indexOf(CUSTOM_KEY);\n\n if (customIndex !== -1) {\n highlightedIndex.value = customIndex;\n }\n\n if (currentStep.value.multiSelect) {\n return;\n }\n\n const draft = currentDraft.value;\n\n if (draft.selected.length > 0) {\n setDraft(currentStep.value.id, { selected: [], custom: draft.custom });\n }\n}\n\nfunction optionRows (): HTMLElement[] {\n if (!wizardRoot.value) {\n return [];\n }\n\n return Array.from(wizardRoot.value.querySelectorAll<HTMLElement>('[role=\"option\"]'));\n}\n\nfunction focusCustomInput (): void {\n const input = wizardRoot.value?.querySelector<HTMLInputElement>(\n 'input:not([type=\"checkbox\"])'\n );\n\n input?.focus();\n}\n\nfunction focusOptionList (): void {\n const list = wizardRoot.value?.querySelector<HTMLElement>('[role=\"listbox\"]');\n\n (list ?? wizardRoot.value)?.focus();\n}\n\nfunction focusFooterPrimary (): void {\n footerFocused.value = true;\n\n nextTick(() => {\n wizardRoot.value?.querySelector<HTMLElement>('[data-wizard-footer-primary]')?.focus();\n });\n}\n\n// Virtual focus: rows are never focused, only highlighted, so the card keeps the caret and\n// arrow keys can't be swallowed by a row's own scroll-into-focus handling.\nfunction scrollHighlightIntoView (): void {\n nextTick(() => {\n optionRows()[highlightedIndex.value]?.scrollIntoView({ block: 'nearest' });\n });\n}\n\nfunction moveHighlight (delta: number): void {\n const count = navValues.value.length;\n\n if (count === 0) {\n return;\n }\n\n if (highlightedIndex.value === -1) {\n highlightedIndex.value = delta > 0 ? 0 : count - 1;\n } else {\n highlightedIndex.value = (highlightedIndex.value + delta + count) % count;\n }\n\n scrollHighlightIntoView();\n}\n\nfunction deactivateKeyboard (): void {\n keyboardActive.value = false;\n footerFocused.value = false;\n}\n\nfunction syncHighlightToSelection (): void {\n const draft = currentDraft.value;\n\n if (draft.selected.length > 0) {\n highlightedIndex.value = navValues.value.indexOf(draft.selected[0]);\n\n return;\n }\n\n const noOptions = currentStep.value.options.length === 0;\n\n if (currentAllowCustom.value && (draft.custom.trim().length > 0 || noOptions)) {\n highlightedIndex.value = navValues.value.indexOf(CUSTOM_KEY);\n\n return;\n }\n\n highlightedIndex.value = -1;\n}\n\nfunction goBack (): void {\n if (stepIndex.value > 0) {\n stepIndex.value--;\n }\n}\n\nfunction goNext (): void {\n if (!isLastStep.value && canLeaveCurrentStep.value) {\n stepIndex.value++;\n }\n}\n\nfunction finalize (): void {\n const answers: AgentAnswer[] = props.steps.map(step => {\n const draft = drafts.value[step.id] ?? { selected: [], custom: '' };\n const labelByValue = new Map(step.options.map(option => [option.value, option.label]));\n const selectedLabels = draft.selected.map(value => labelByValue.get(value) ?? value);\n const customText = draft.custom.trim();\n\n return {\n questionId: step.id,\n question: step.question,\n selectedLabels,\n customText: customText.length > 0 ? customText : undefined,\n };\n });\n\n const allEmpty = answers.every(\n answer => answer.selectedLabels.length === 0 && answer.customText === undefined\n );\n\n if (allEmpty) {\n emit('close');\n\n return;\n }\n\n emit('submit', answers);\n}\n\nfunction onWizardSubmit (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n goNext();\n}\n\nfunction onSkip (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n stepIndex.value++;\n}\n\nfunction isTextEntryTarget (target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return target.tagName === 'INPUT'\n || target.tagName === 'TEXTAREA'\n || target.isContentEditable;\n}\n\n// Space picks without leaving the question - the only way to gather several answers in a\n// multi-select by keyboard, since Enter commits.\nfunction pickHighlighted (): void {\n const highlighted = highlightedValue.value;\n\n if (highlighted === null || highlighted === CUSTOM_KEY) {\n return;\n }\n\n if (currentStep.value.multiSelect) {\n toggleValue(highlighted);\n\n return;\n }\n\n selectValue(highlighted);\n}\n\nfunction commitStep (): void {\n if (isLastStep.value) {\n finalize();\n\n return;\n }\n\n goNext();\n}\n\n// Enter always means \"this question is done\": it takes the highlighted option (adding it in a\n// multi-select rather than toggling, so a commit never un-picks) and moves on.\nfunction handleEnter (event: KeyboardEvent): void {\n const highlighted = highlightedValue.value;\n\n if (highlighted === CUSTOM_KEY && !isTextEntryTarget(event.target)) {\n event.preventDefault();\n focusCustomInput();\n\n return;\n }\n\n event.preventDefault();\n\n if (highlighted !== null && highlighted !== CUSTOM_KEY) {\n const alreadySelected = currentDraft.value.selected.includes(highlighted);\n\n if (!alreadySelected) {\n if (currentStep.value.multiSelect) {\n toggleValue(highlighted);\n } else {\n selectValue(highlighted);\n }\n }\n }\n\n if (!canLeaveCurrentStep.value) {\n return;\n }\n\n commitStep();\n}\n\n// The form owns the keys for the whole conversation panel, not just its own card: answering\n// stays keyboard-driven after a click lands on a message action. Keys are ignored when they\n// belong to someone else - typing in another field, or anything outside the panel entirely.\nfunction ownsKeyEvent (event: KeyboardEvent): boolean {\n const target = event.target instanceof HTMLElement ? event.target : null;\n const inWizard = Boolean(target && wizardRoot.value?.contains(target));\n\n if (!inWizard && isTextEntryTarget(target)) {\n return false;\n }\n\n const boundary = conversationRoot.value ?? wizardRoot.value;\n\n return !target || !boundary || boundary.contains(target);\n}\n\nfunction leaveCustomInput (): void {\n const target = wizardRoot.value?.querySelector<HTMLInputElement>('input:not([type=\"checkbox\"])');\n\n target?.blur();\n keyboardActive.value = true;\n highlightedIndex.value = Math.max(0, navValues.value.indexOf(CUSTOM_KEY) - 1);\n focusOptionList();\n}\n\nfunction onKeydown (event: KeyboardEvent): void {\n if (!ownsKeyEvent(event)) {\n return;\n }\n\n const inTextField = isTextEntryTarget(event.target);\n\n // While the footer button holds real focus, Enter/Space belong to it; ArrowUp walks back.\n if (footerFocused.value) {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n footerFocused.value = false;\n keyboardActive.value = true;\n highlightedIndex.value = navValues.value.length - 1;\n focusOptionList();\n }\n\n return;\n }\n\n if (event.key === 'Enter') {\n if (event.target instanceof HTMLTextAreaElement) {\n return;\n }\n\n handleEnter(event);\n\n return;\n }\n\n if (event.key === 'Escape' && inTextField) {\n event.preventDefault();\n leaveCustomInput();\n\n return;\n }\n\n if (event.key === 'ArrowUp' && inTextField) {\n event.preventDefault();\n leaveCustomInput();\n\n return;\n }\n\n if (inTextField) {\n return;\n }\n\n if (event.key === ' ') {\n event.preventDefault();\n pickHighlighted();\n\n return;\n }\n\n if (!NAV_KEYS.includes(event.key)) {\n return;\n }\n\n // The first arrow press only reveals the highlight - navigation starts at the top row\n // rather than jumping straight past it.\n if (!keyboardActive.value) {\n event.preventDefault();\n keyboardActive.value = true;\n highlightedIndex.value = 0;\n scrollHighlightIntoView();\n\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n\n // Past the last row the footer takes over, so Skip stays reachable without answering.\n if (highlightedIndex.value >= navValues.value.length - 1) {\n focusFooterPrimary();\n } else {\n moveHighlight(1);\n }\n\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveHighlight(-1);\n\n break;\n case 'ArrowLeft':\n event.preventDefault();\n goBack();\n\n break;\n case 'ArrowRight':\n event.preventDefault();\n goNext();\n\n break;\n\n default:\n break;\n }\n}\n\n// Reset only when the actual set of questions changes — keyed on the step ids, NOT the\n// array reference. Consumers commonly bind `:steps` to a fresh array each render (e.g.\n// `:steps=\"mapQuestions(...)\"`); watching the reference would reset the step index on\n// every parent re-render, making Next/Back appear broken.\nconst stepsKey = computed(() => props.steps.map(step => step.id).join('|'));\n\nwatch(\n stepsKey,\n () => {\n const next: Record<string, Draft> = {};\n\n props.steps.forEach(step => {\n next[step.id] = { selected: [], custom: '' };\n });\n\n drafts.value = next;\n stepIndex.value = 0;\n syncHighlightToSelection();\n },\n { immediate: true }\n);\n\nwatch(stepIndex, () => {\n footerFocused.value = false;\n syncHighlightToSelection();\n\n if (currentStep.value.options.length === 0 && currentAllowCustom.value) {\n nextTick(focusCustomInput);\n\n return;\n }\n\n // The previous step's list is gone; hand the caret to the new one so Enter keeps working.\n nextTick(focusOptionList);\n});\n\nwatch(highlightedIndex, scrollHighlightIntoView);\n\nonMounted(() => {\n document.addEventListener('keydown', onKeydown);\n // The option list is the single tab stop for the roving highlight; take it on mount so the\n // first arrow press already belongs to the form.\n nextTick(focusOptionList);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('keydown', onKeydown);\n});\n</script>\n\n<template>\n <div\n ref=\"wizardRoot\"\n tabindex=\"-1\"\n :class=\"styles['ask-wizard']\"\n @mousemove=\"deactivateKeyboard\">\n <InWizardHeader\n :close-label=\"props.closeLabel\"\n :info-tooltip=\"props.infoTooltip\"\n :title=\"currentStep.question\"\n @close=\"emit('close')\" />\n <div :class=\"styles['ask-wizard__body']\">\n <InCardSelect\n v-if=\"currentStep.variant === 'card'\"\n :key=\"currentStep.id\"\n :model-value=\"cardModelValue\"\n :multiple=\"Boolean(currentStep.multiSelect)\"\n :options=\"currentStep.options\"\n @select=\"selectValue\"\n @toggle=\"toggleValue\" />\n <InMultiSelect\n v-else-if=\"currentStep.multiSelect\"\n :key=\"currentStep.id\"\n :allow-custom=\"Boolean(currentStep.allowCustom)\"\n :custom-highlighted=\"customHighlighted\"\n :custom-placeholder=\"props.customPlaceholder\"\n :custom-value=\"currentDraft.custom\"\n :highlighted-value=\"highlightedForSelect\"\n :input-id=\"listId\"\n :model-value=\"currentDraft.selected\"\n :options=\"currentStep.options\"\n @custom-focus=\"onCustomFocus\"\n @custom-input=\"onCustomInput\"\n @option-focus=\"onOptionFocus\"\n @toggle=\"toggleValue\" />\n <InSingleSelect\n v-else\n :key=\"currentStep.id\"\n :allow-custom=\"Boolean(currentStep.allowCustom)\"\n :custom-highlighted=\"customHighlighted\"\n :custom-placeholder=\"props.customPlaceholder\"\n :custom-value=\"currentDraft.custom\"\n :highlighted-value=\"highlightedForSelect\"\n :input-id=\"listId\"\n :model-value=\"currentSelectedSingle\"\n :options=\"currentStep.options\"\n @custom-focus=\"onCustomFocus\"\n @custom-input=\"onCustomInput\"\n @option-focus=\"onOptionFocus\"\n @select=\"selectValue\" />\n </div>\n <InWizardFooter\n :back-label=\"props.backLabel\"\n :can-continue=\"currentStepHasAnswer\"\n :can-go-back=\"stepIndex > 0\"\n :can-submit=\"currentStepHasAnswer\"\n :current-step=\"stepIndex\"\n :is-last-step=\"isLastStep\"\n :is-required=\"currentStepRequired\"\n :next-label=\"props.nextLabel\"\n :skip-label=\"props.skipLabel\"\n :submit-label=\"props.submitLabel\"\n :total-steps=\"steps.length\"\n @back=\"goBack\"\n @next=\"goNext\"\n @skip=\"onSkip\"\n @submit=\"onWizardSubmit\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed, watch } from 'vue';\nimport { InBasicTextInput } from '@/index';\nimport styles from './InSingleSelect.module.scss';\n\nexport interface PlanSelectOption {\n value: string;\n label: string;\n description?: string;\n imageUrl?: string;\n}\n\nexport interface InSingleSelectProps {\n options: PlanSelectOption[];\n modelValue?: string | null;\n allowCustom?: boolean;\n customValue?: string;\n customPlaceholder?: string;\n inputId?: string;\n highlightedValue?: string | null;\n customHighlighted?: boolean;\n}\n\nconst props = withDefaults(defineProps<InSingleSelectProps>(), {\n modelValue: null,\n allowCustom: false,\n customValue: '',\n customPlaceholder: 'Enter your answer…',\n inputId: 'in-single-select-custom',\n highlightedValue: null,\n customHighlighted: false,\n});\n\n// Roving focus: the listbox keeps the caret and points at the highlighted row, so the rows\n// themselves never need to be tab stops.\nconst activeDescendantId = computed<string | undefined>(() => {\n if (props.customHighlighted) {\n return props.inputId;\n }\n\n if (!props.highlightedValue) {\n return undefined;\n }\n\n return `${props.inputId}-option-${props.highlightedValue}`;\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | null];\n select: [value: string];\n 'update:customValue': [value: string];\n 'custom-input': [value: string];\n 'option-focus': [value: string];\n 'custom-focus': [];\n}>();\n\nconst selected = ref<string | null>(props.modelValue);\nconst customText = ref<string>(props.customValue);\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = value;\n }\n);\n\nwatch(\n () => props.customValue,\n value => {\n customText.value = value;\n }\n);\n\nconst customSelected = computed(\n () => selected.value === null && customText.value.trim().length > 0\n);\n\nfunction selectOption (value: string): void {\n selected.value = value;\n emit('update:modelValue', value);\n emit('select', value);\n}\n\nfunction onCustomInput (value: string | number): void {\n const text = String(value);\n\n customText.value = text;\n selected.value = null;\n emit('update:modelValue', null);\n emit('update:customValue', text);\n emit('custom-input', text);\n}\n</script>\n\n<template>\n <div :class=\"styles['single-select']\">\n <div\n role=\"listbox\"\n tabindex=\"0\"\n :aria-activedescendant=\"activeDescendantId\"\n :class=\"styles['single-select__options']\">\n <div\n v-for=\"option in options\"\n :id=\"`${inputId}-option-${option.value}`\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"selected === option.value\"\n :class=\"[\n styles['single-select__item'],\n {\n [styles['single-select__item--selected']]: selected === option.value,\n [styles['single-select__item--focused']]: option.value === highlightedValue,\n },\n ]\"\n @click=\"selectOption(option.value)\"\n @focusin=\"emit('option-focus', option.value)\">\n <span :class=\"styles['single-select__label']\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :class=\"styles['single-select__description']\">\n {{ option.description }}\n </span>\n </div>\n <div\n v-if=\"allowCustom\"\n :class=\"[\n styles['single-select__custom'],\n {\n [styles['single-select__custom--selected']]: customSelected,\n [styles['single-select__custom--focused']]: customHighlighted,\n },\n ]\"\n @focusin=\"emit('custom-focus')\">\n <!-- The value is a plain answer, and every consumer renders it as text (the Q&A\n bubble interpolates, the transcript is JSON), so Vue escapes it at render\n time. Escaping on `input` instead rewrites the field as you type - an\n apostrophe becomes `&#039;` in the box and in the answer that is sent. -->\n <InBasicTextInput\n :id=\"inputId\"\n theme=\"grey\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"customText\"\n :name=\"inputId\"\n :placeholder-text=\"customPlaceholder\"\n :prevent-xss=\"false\"\n @input=\"onCustomInput\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PlanSelectOption } from '../InSingleSelect/InSingleSelect.vue';\nimport { ref, computed, watch } from 'vue';\nimport { Icon, InBasicTextInput } from '@/index';\nimport styles from './InMultiSelect.module.scss';\n\nexport type { PlanSelectOption };\n\nexport interface InMultiSelectProps {\n options: PlanSelectOption[];\n modelValue?: string[];\n allowCustom?: boolean;\n customValue?: string;\n customPlaceholder?: string;\n inputId?: string;\n highlightedValue?: string | null;\n customHighlighted?: boolean;\n}\n\nconst props = withDefaults(defineProps<InMultiSelectProps>(), {\n modelValue: () => [],\n allowCustom: false,\n customValue: '',\n customPlaceholder: 'Enter your answer…',\n inputId: 'in-multi-select-custom',\n highlightedValue: null,\n customHighlighted: false,\n});\n\n// Roving focus: the listbox keeps the caret and points at the highlighted row, so the rows\n// themselves never need to be tab stops.\nconst activeDescendantId = computed<string | undefined>(() => {\n if (props.customHighlighted) {\n return props.inputId;\n }\n\n if (!props.highlightedValue) {\n return undefined;\n }\n\n return `${props.inputId}-option-${props.highlightedValue}`;\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n toggle: [value: string];\n 'update:customValue': [value: string];\n 'custom-input': [value: string];\n 'option-focus': [value: string];\n 'custom-focus': [];\n}>();\n\nconst selected = ref<string[]>([...props.modelValue]);\nconst customText = ref<string>(props.customValue);\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = [...value];\n }\n);\n\nwatch(\n () => props.customValue,\n value => {\n customText.value = value;\n }\n);\n\nconst customSelected = computed(() => customText.value.trim().length > 0);\n\nfunction isSelected (value: string): boolean {\n return selected.value.includes(value);\n}\n\nfunction toggleOption (value: string): void {\n const next = new Set(selected.value);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n selected.value = [...next];\n emit('update:modelValue', selected.value);\n emit('toggle', value);\n}\n\n// Keys are owned by the wizard card, which drives a roving highlight; rows are not tab stops\n// and carry no key handlers of their own.\nconst customRow = ref<HTMLElement | null>(null);\n\n// The whole row is the target — the box, the padding, the gap — not just the input's 24px line.\nfunction focusCustomInput (): void {\n customRow.value?.querySelector('input')?.focus();\n}\n\nfunction onCustomInput (value: string | number): void {\n const text = String(value);\n\n customText.value = text;\n emit('update:customValue', text);\n emit('custom-input', text);\n}\n</script>\n\n<template>\n <div :class=\"styles['multi-select']\">\n <div\n aria-multiselectable=\"true\"\n role=\"listbox\"\n tabindex=\"0\"\n :aria-activedescendant=\"activeDescendantId\"\n :class=\"styles['multi-select__options']\">\n <div\n v-for=\"option in options\"\n :id=\"`${inputId}-option-${option.value}`\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"isSelected(option.value)\"\n :class=\"[\n styles['multi-select__item'],\n {\n [styles['multi-select__item--selected']]: isSelected(option.value),\n [styles['multi-select__item--focused']]: option.value === highlightedValue,\n },\n ]\"\n @click=\"toggleOption(option.value)\"\n @focusin=\"emit('option-focus', option.value)\">\n <span\n :class=\"[\n styles['multi-select__box'],\n { [styles['multi-select__box--checked']]: isSelected(option.value) },\n ]\">\n <Icon\n v-if=\"isSelected(option.value)\"\n color=\"#ffffff\"\n name=\"line-check-natural\"\n :size=\"16\" />\n </span>\n <span :class=\"styles['multi-select__label']\">{{ option.label }}</span>\n </div>\n <div\n v-if=\"allowCustom\"\n ref=\"customRow\"\n :class=\"[\n styles['multi-select__custom'],\n {\n [styles['multi-select__custom--selected']]: customSelected,\n [styles['multi-select__custom--focused']]: customHighlighted,\n },\n ]\"\n @click=\"focusCustomInput\"\n @focusin=\"emit('custom-focus')\">\n <span\n :class=\"[\n styles['multi-select__box'],\n { [styles['multi-select__box--checked']]: customSelected },\n ]\">\n <Icon\n v-if=\"customSelected\"\n color=\"#ffffff\"\n name=\"line-check-natural\"\n :size=\"16\" />\n </span>\n <!-- The value is a plain answer, and every consumer renders it as text (the Q&A\n bubble interpolates, the transcript is JSON), so Vue escapes it at render\n time. Escaping on `input` instead rewrites the field as you type - an\n apostrophe becomes `&#039;` in the box and in the answer that is sent. -->\n <InBasicTextInput\n :id=\"inputId\"\n theme=\"grey\"\n :class=\"styles['multi-select__custom-input']\"\n :helper-message-status=\"false\"\n :label-status=\"false\"\n :model-value=\"customText\"\n :name=\"inputId\"\n :placeholder-text=\"customPlaceholder\"\n :prevent-xss=\"false\"\n @input=\"onCustomInput\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PlanSelectOption } from '../InSingleSelect/InSingleSelect.vue';\nimport { ref, computed, watch } from 'vue';\nimport styles from './InCardSelect.module.scss';\n\nexport type { PlanSelectOption };\n\nexport type InCardSelectValue = string | string[] | null;\n\nexport interface InCardSelectProps {\n options: PlanSelectOption[];\n modelValue?: InCardSelectValue;\n multiple?: boolean;\n columns?: number;\n}\n\nconst props = withDefaults(defineProps<InCardSelectProps>(), {\n modelValue: null,\n multiple: false,\n columns: 2,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: InCardSelectValue];\n select: [value: string];\n toggle: [value: string];\n}>();\n\nfunction normalize (value: InCardSelectValue): string[] {\n if (value === null || value === undefined) {\n return [];\n }\n\n return Array.isArray(value) ? [...value] : [value];\n}\n\nconst selected = ref<string[]>(normalize(props.modelValue));\n\nwatch(\n () => props.modelValue,\n value => {\n selected.value = normalize(value);\n }\n);\n\nconst gridStyle = computed(() => ({\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n}));\n\nfunction isSelected (value: string): boolean {\n return selected.value.includes(value);\n}\n\nfunction onCardClick (value: string): void {\n if (props.multiple) {\n const next = new Set(selected.value);\n\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n\n selected.value = [...next];\n emit('update:modelValue', selected.value);\n emit('toggle', value);\n\n return;\n }\n\n selected.value = [value];\n emit('update:modelValue', value);\n emit('select', value);\n}\n\nfunction placeholderInitial (option: PlanSelectOption): string {\n return (option.label || option.value).charAt(0).toUpperCase();\n}\n</script>\n\n<template>\n <div\n role=\"listbox\"\n :class=\"styles['card-select']\"\n :style=\"gridStyle\">\n <div\n v-for=\"option in options\"\n :key=\"option.value\"\n role=\"option\"\n tabindex=\"0\"\n :aria-selected=\"isSelected(option.value)\"\n :class=\"[\n styles['card-select__card'],\n { [styles['card-select__card--selected']]: isSelected(option.value) },\n ]\"\n @click=\"onCardClick(option.value)\"\n @keydown.enter.prevent=\"onCardClick(option.value)\"\n @keydown.space.prevent=\"onCardClick(option.value)\">\n <div :class=\"styles['card-select__thumb']\">\n <img\n v-if=\"option.imageUrl\"\n :alt=\"option.label\"\n :class=\"styles['card-select__image']\"\n :src=\"option.imageUrl\">\n <slot\n v-else\n name=\"thumb\"\n :option=\"option\">\n <span :class=\"styles['card-select__placeholder']\">\n {{ placeholderInitial(option) }}\n </span>\n </slot>\n </div>\n <span :class=\"styles['card-select__label']\">{{ option.label }}</span>\n <span\n v-if=\"option.description\"\n :class=\"styles['card-select__description']\">\n {{ option.description }}\n </span>\n </div>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","onClick","event","leftIcon","computed","buttonClasses","classes","styles","customIconObjects","parseColorWithAlpha","color","hex8Match","hex","a","rgbaMatch","values","v","opacity","iconSize","isCustomIcon","customIconData","parsedColor","finalColor","finalOpacity","min","max","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","x","y","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","i","name","fn","nextX","nextY","data","reset","detectOverflow","state","options","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","b","_overflowsData$filter2","currentSideAxis","acc","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","arrow$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","target","toValue","source","unref","args","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","ref","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","open","position","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","isTooltipConfigInitialized","initializeTooltipConfig","status","preventXSS","VISIBILITY_DELAY","ARROW_SIZE","ARROW_EDGE_PADDING","OPPOSITE_SIDE_BY_SIDE","showTimeout","hideTimeout","isMounted","tooltipRef","triggerRef","floatingArrowRef","tooltipVisible","secureText","showTooltip","showDelay","scheduleHideTooltip","delay","onMouseEnter","onMouseLeave","onResize","onBeforeMount","onMounted","nextTick","onBeforeUnmount","tooltipShouldShow","tooltipStyles","staticPosition","arrowPlacementOverride","styleArrow","_a","_b","FORMAT_ORDER","FORMAT_SEPARATOR","SEGMENT_LENGTH","pad","buildDate","year","month","day","date","formatIn","format","byKey","key","parseIn","text","segs","index","startOfDay","inputText","minDate","maxDate","isInRange","time","minTime","maxTime","draftDate","canApply","seedInputFromModel","initialView","base","view","next","monthLabel","weekdayLabels","formatter","labels","dayIndex","days","leading","selectedTime","cells","goToPreviousMonth","goToNextMonth","selectDay","cell","maskDate","raw","order","sep","lengths","totalDigits","sum","typedParts","digits","segments","cursor","endsWithSep","out","onDateInput","onApply","onCancel","chipClasses","handleClick","handleRemove","checked","handleChange","newValue","previewClasses","inputValue","labelTextSecure","statesDefault","statesValidation","helperContainerStatus","isNumberType","deniedSymbols","denied","minValueNum","preventKeyPress","fixValue","safeData","createCommasAndDotsRegex","regexPattern","createNonNumberRegex","allowedChars","replaceNonNumbers","inputElement","selectionStart","regex","indexes","item","replaceExtraCommasAndDots","cursorPosition","characters","keyup","keypress","focus","blur","click","input","inputEvent","change","paste","clipboardData","currentLength","selectedLength","availableSpace","truncatedClipboardData","replaceAll","nonNumberRegex","cleanedValue","matches","match","leftIconClick","rightIconClick","textInput","componentRoot","focusToInput","hasTransparency","opacityMatch","hue","saturation","brightness","hexInput","savedColors","isUpdatingFromProp","colorPickerRef","hueSliderRef","opacitySliderRef","presetColorRows","colors","rows","colorsPerRow","firstRowSize","hueColor","h","r","g","currentColor","s","c","m","currentColorWithOpacity","rgb","updateHexInput","newColor","setNoColor","setColorFromHex","opacityHex","handleColorPickerMouseDown","e","updatePosition","handleMouseMove","handleMouseUp","handleHueSliderMouseDown","updateHue","handleOpacitySliderMouseDown","updateOpacity","handleHexInput","maxLength","hexString","handleHexPaste","pastedText","cleanHex","validateHexInput","expectedLength","hex6Result","hex8Result","rgbMatch","delta","hexWithoutHash","setOpacity","getCurrentColorWithOpacityHex","saveCurrentColor","colorWithOpacity","selectSavedColor","clickOutside","binding","excludeElements","useCapture","isFuzzyMatch","choiceValue","searchTerm","searchIndex","char","fuzzySearch","choices","normalizedSearchTerm","choice","aValue","bValue","vClickOutside","dropdownRef","menuRef","isOpen","selectedItem","searchQuery","errorMessage","menuPosition","filteredItems","reactive","allItems","calculateMenuPosition","viewportHeight","bottom","shouldOpenUp","toggleMenu","resetSettings","closeMenu","selectItem","addItem","query","error","newItem","onSearch","results","onFocusSearch","menuStyle","defaultItem","selectedValue","newItems","clickOutsideTarget","boxClass","isDark","borderColorClass","sizeClass","textColorClass","listRef","activeItemId","childSearchQuery","parentSearchQuery","itemEls","FALLBACK_SEARCH_INPUT_ID","parentSearchInputId","childSearchInputId","normalizedEntries","entry","flatItems","isGlobalSearchMode","hasActiveParentSearch","menuSizeStyle","style","listSizeStyle","activeItem","activeSubList","activeItemEl","showChildPanel","menuAnchorRef","menuFloatingStyles","isLeftPlacement","listPlacement","listFallback","listMiddleware","listFloatingStyles","childListItems","flatSections","collectFromItem","matched","section","flatSectionsEmpty","registerItemEl","id","handleItemHover","wasActive","handleItemClick","handleListItemClick","parentId","listItem","handleChildListItemClick","handleParentSearchUpdate","handleChildSearchUpdate","isInsideAnyLayer","anchor","handleDocumentPointerDown","handleWindowKeyDown","useUid","prefix","clearIconName","autoUid","fieldId","fieldName","inputRef","hasValue","rightIcon","onUpdate","onKeydown","onRightIconClick","native","__expose","variantClass","uid","showError","showPlaceholder","displayText","DEFAULT_GAP","SHIFT_PADDING","popoverRef","contentRef","anchorRef","resolveAnchor","triggerRoot","sizeStyle","toggle","close","handleToggle","selectTab","tab","newTabs","textareaStyle","textareaRef","computedValue","handleKeyup","handleKeypress","handleInput","handleCut","handlePaste","handleBlur","ACTIVE_ICON_NAME","DISABLE_ICON_NAME","iconName","onChange","handleLabelClick","handleInputChange","handleInputKeydown","debounce","wait","timer","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","_defineProperty","obj","_toPropertyKey","arg","_toPrimitive","hint","prim","res","dedent","createDedent","newOptions","strings","escapeSpecialCharacters","lines","mindent","l","indent","iframeContent","generateIframeContent","vsBaseUrl","vsPath","dd","registered","liquidMonarch","registerLanguage","monaco","registerCompletion","getVariables","model","lineText","word","range","variable","registerLiquid","findScrollableParent","isAtScrollEdge","deltaY","scrollTop","scrollHeight","visibleHeight","normalizeWheelDeltaY","deltaMode","resolveChainedScrollDelta","TOOLTIP_GAP","shouldReanchorTooltip","hoveredLine","anchoredLine","resolveTooltipTop","lineTop","lineHeight","tooltipHeight","below","validator","useValidators","params","editor","markersListener","removeWheelForwarding","iframe","blob","src","validators","validateCode","createEditorInstance","frame","contentDocument","contentWindow","container","forwardWheelAtEdge","scrollable","runValidation","errorStyle","gutterThemeCss","errorDecorations","markerModel","errorMarkers","marker","errorTooltip","tooltipLine","hideErrorTooltip","line","lineMarkers","grouped","separator","message","linePosition","containerRect","glyphLeft","placeholderEl","fontInfo","updatePlaceholder","onUnmounted","valid","Token","kind","begin","file","row","col","Drop","context","toString$1","toLowerCase","hasOwnProperty","isString","isFunction","isPromise","val","isIterator","stringify","isNil","isArray","toEnumerable","isIterable","isObject","toArray","toNumber","isNumber","toLiquid","isUndefined","isArrayLike","forOwn","iteratee","k","last","arr","type","stop","step","padStart","str","ch","padEnd","add","n","identify","changeCase","ellipsis","N","orderedCompare","caseInsensitiveCompare","argumentsToValue","argumentsToNumber","strictUniq","array","seen","TRAIT","LiquidError","err","token","mkContext","mkMessage","TokenizationError","ParseError","RenderError","tpl","LiquidErrors","errors","UndefinedVariableError","InternalUndefinedVariableError","variableName","AssertionError","lineNumber","rowIndicator","num","colIndicator","msg","TYPES","WORD","BLANK","QUOTE","INLINE_BLANK","NUMBER","SIGN","PUNCTUATION","isWord","code","assert","predicate","assertEmpty","NullDrop","EmptyDrop","BlankDrop","ForloopDrop","collection","SimpleEmitter","StreamedEmitter","KeepingTypeEmitter","BlockDrop","superBlockRender","emitter","isComparable","nil","literalValues","trieCache","createTrie","cached","trie","__assign","t","p","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","rejected","toLiquidAsync","asyncFn","syncFn","syncImpl","sync","toPromise","done","toValueSync","rFormat","daysInMonth","isLeapYear","getDayOfYear","getWeekOfYear","startDay","now","then","ordinal","century","padWidths","padSpaceChars","getTimezoneOffset","opts","nOffset","formatCodes","strftime","formatStr","memoryLimit","output","remaining","flagStr","modifier","conversion","convert","flags","flag","ret","padChar","padWidth","getDateTimeFormat","OneMinute","TIMEZONE_PATTERN","monthNames","monthNamesShort","dayNames","dayNamesShort","LiquidDate","init","locale","timezone","diff","dateString","sign","hours","minutes","timezoneName","localDateString","utcDateString","localDate","Limiter","resource","limit","count","DelimitedToken","contentBegin","contentEnd","trimLeft","trimRight","tl","tr","TagToken","trimTagLeft","trimTagRight","tagDelimiterLeft","tagDelimiterRight","valueBegin","valueEnd","TokenKind","Tokenizer","OutputToken","trimOutputLeft","trimOutputRight","outputDelimiterLeft","outputDelimiterRight","valueRange","HTMLToken","NumberToken","IdentifierToken","LiteralToken","operatorPrecedences","operatorTypes","OperatorToken","PropertyAccessToken","FilterToken","HashToken","rHex","rOct","escapeChar","hexVal","parseStringLiteral","j","QuotedToken","RangeToken","lhs","rhs","LiquidTagToken","FilteredValueToken","initial","filters","getPerformance","Render","templates","ctx","Expression","tokens","toPostfix","lenient","operands","isOperatorToken","evalToken","isPropertyAccessToken","evalPropertyAccessToken","isRangeToken","evalRangeToken","prop","evalQuotedToken","low","high","ops","isTruthy","isFalsy","defaultOperators","equals","arrayEquals","arrayIncludes","Node$1","prev","LRU","Node","domResolve","path","head","resolved","filepath","ext","origin","readFile","url","xhr","readFileSync","exists","existsSync","dirname","fs","defaultFilter","defaultValue","json","space","inspect","_key","to_integer","misc","escapeMap","unescapeMap","escape","xml_escape","unescape","escape_once","newline_to_br","strip_html","blocks","lt","opener","closer","htmlFilters","MapFS","mapping","content","dir","segment","defaultOptions","normalize","normalizeDirectoryList","getOutputEscapeFunction","nameOrFunction","whiteSpaceCtrl","inRaw","isDelimitedToken","isTagToken","greedy","isHTMLToken","mask","operators","operator","operand","info","filter","stopStrings","delimiter","respectQuoted","leftPos","pos","pred","jekyllStyle","hashes","hash","isBegin","decimalFound","digitFound","literal","escaped","htmlStopStrings","htmlStopStringSet","pattern","ParseStream","parseToken","cb","template","TemplateImpl","Tag","remainTokens","liquid","Hash","tokenizer","createTagClass","isKeyValuePair","Filter","argv","Value","impl","Output","outputEscape","HTML","Variable","location","segmentsString","_visit","VariableMap","defaultStaticAnalysisOptions","_analyze","partials","variables","globals","locals","rootScope","DummyScope","updateVariables","scope","aliased","visit","extractVariables","ident","partial","child","partialScopeNames","partialScope","alias","argument","analyze","analyzeSync","from","to","isValueToken","extractValueTokenVariables","extractFilteredValueVariables","extractPropertyAccessVariable","isQuotedToken","isNumberToken","isWordToken","RE_PROPERTY","bracketedRoot","buf","LookupType","Loader","_c","_d","prefixes","referencedFile","_referencedFile","currentFile","dirs","allowed","extname","roots","Parser","TagClass","isOutputToken","tpls","task","taskOrTpl","getKind","createScope","Context","env","renderOptions","renderLimit","_e","keyValues","paths","strictVariables","candidate","readJSProperty","readSize","readFirst","readLast","ownPropertyOnly","BlockMode","abs","at_least","at_most","ceil","divided_by","dividend","divisor","integerArithmetic","minus","plus","modulo","times","amp","scaled","mathFilters","url_decode","url_encode","cgi_escape","uri_escape","rSlugifyDefault","rSlugifyReplacers","slugify","mode","cased","replacer","removeAccents","urlFilters","join","complexity","last$1","first","reverse","sortBy","property","comparator","tuple","sort","sort_natural","map","compact","concat","push","unshift","clone","pop","slice","expectedMatcher","expected","include","matcher","_","filter_exp","itemName","exp","filtered","keyTemplate","where","where_exp","reject_exp","group_by","items","group_by_exp","search","search_exp","has","has_exp","find_index","find_index_exp","find","find_exp","uniq","sample","shuffled","arrayFilters","timezoneOffset","parseDate","date_to_xmlschema","date_to_rfc822","date_to_string","stringify_date","date_to_long_string","month_type","ml","defaultTimezoneOffset","dateFilters","rCJKWord","rNonCJKWord","append","prepend","lstrip","chars","set","downcase","upcase","remove","remove_first","remove_last","rstrip","split","strip","strip_newlines","capitalize","replace","replacement","parts","outputSize","replace_first","arg1","arg2","replace_last","truncate","o","truncatewords","words","normalize_whitespace","number_of_words","array_to_sentence_string","connector","stringFilters","base64Encode","base64Decode","base64_encode","base64_decode","base64Filters","bufferToHex","buffer","bytes","sha256","digest","hmacSha256","encoder","cryptoKey","signature","sha256$1","hmac_sha256","keyStr","cryptoFilters","AssignTag","MODIFIERS","ForTag","parser","inStr","stream","tag","continueKey","reversed","CaptureTag","tagToken","CaseTag","elseCount","branchHit","branch","valueToken","CommentTag","RenderTag","parseFilePath","keyword","beforeAs","asStr","renderFilePath","childCtx","names","optimize","IncludeTag","withVar","renderer","saved","DecrementTag","CycleTag","group","fingerprint","groups","idx","IfTag","IncrementTag","LayoutTag","parent","BlockTag","blockRender","self","renderChild","renderCurrent","superBlock","stack","RawTag","TablerowloopDrop","cols","TablerowTag","collectionToken","tablerowloop","UnlessTag","test","children","BreakTag","_emitter","ContinueTag","EchoTag","LiquidTag","InlineCommentTag","tags","Liquid","conf","handler","lookupType","renderFileOptions","plugin","firstCall","filePath","callback","filename","analysis","engine","collectGlobalRefs","refs","occurrences","atLocation","lineStartOffsets","starts","outputTokenRanges","getLiquidVariables","getLiquidOutputVariables","ranges","isVisible","submit","handleKeydown","applyMinMax","numericValue","sanitizedValue","oldValue","IconName","textRef","isMultiline","measure","selected","setSelect","newSegments","autoGrow","newHeight","VARIANT_ICONS","dismissTimer","clearDismissTimer","handleClose","scheduleDismiss","isExpanded","ariaLabel","prefersReducedMotion","IDLE_TIMEOUT_MS","ACTIVITY_EVENTS","rootRef","reduceMotion","isStatic","isHidden","isIdle","isPaused","blobs","rafId","idleTimer","lastActivityMs","parallaxOn","motionQuery","armIdleTimer","onActivity","measureBlobs","onMouseMove","localX","ny","tx","ty","enableParallax","disableParallax","onVisibilityChange","onMotionChange","onMinimize","onNewChat","onAcademy","REVEAL_GAP","RISE_BASE_DELAY","RISE_STEP","MOVE_DURATION","MOVE_EASING","riseDelay","scrollEl","inject","bottomInset","cardsRef","revealCards","cards","cardsBottom","visibleBottom","clipped","applyAnchor","scroller","grid","firstCard","rowHeight","cardsHeight","singleRowHeight","available","firstTop","animations","animation","onOpen","SWATCH_LIMIT","COMET_STOPS","SEGMENTS","CORNER_SEGMENTS","PERIOD_MS","STROKE_WIDTH","RING_RADIUS","GLOW_STD_DEVIATION","cometColor","f","buildGlowDefs","svgNs","filterId","defs","merge","glowNode","sourceNode","useGeneratingRing","containerRef","ringRef","active","glowFilterId","segmentMids","lineEls","startTs","observer","buildGeometry","ring","w","inset","rw","rh","straight","arc","total","pointAt","rem","th","mids","regions","targetLen","regionStart","region","d0","d1","p0","p1","paint","phase","red","green","blue","alpha","ts","on","MAX_TEXTAREA_HEIGHT","CHAR_NOTICE_OFFSET","ATTACH_LABEL","genRingRef","isFocused","charCount","isOverLimit","showCharNotice","noticeText","canSend","autoResize","textarea","handleSend","handleButtonClick","handleAttach","draft","trimmed","isDirty","isActive","BUBBLE_CLEARANCE_PX","pickTooltipPosition","rowTop","scrollerTop","useMessageTooltipPosition","scrollRef","tooltipPosition","formattedTime","copyIcon","onActionsEnter","tooltipPlacement","getCurrentInstance","escapeHtml","buildRenderer","marked","titleAttr","lang","deps","loading","depsLoaded","ensureDeps","markedModule","purifyModule","handleCodeCopyClick","button","INLINE_CODE_LINE","collectInlineCodeRun","run","codeCount","mergeInlineCodeRuns","indents","minIndent","useMarkdown","wrapped","slots","useSlots","formatMarkdown","hasDefaultSlot","renderedHtml","PHASE_INTERVAL","phases","phaseIndex","intervalId","stopCycling","startCycling","COPIED_TICK_DURATION","showTick","tickTimeout","startTick","isCopied","likeIcon","dislikeIcon","onCopy","SCROLL_THRESHOLD","composerHeight","userHasScrolledUp","composerResizeObserver","scrollResizeObserver","provide","updateComposerHeight","onScroll","messages","lastMessage","bandBottom","observeScrollBox","scrollBottom","getScrollElement","measureAtBottom","handleScroll","isAtBottom","scrollToBottom","force","behavior","boundScrollEl","sizeObserver","resizeFrame","observeSizeChanges","bindScrollListener","previous","added","infoLabel","NAVIGATION_TOOLTIP","CUSTOM_KEY","NAV_KEYS","fallbackStep","wizardRoot","listId","conversationRoot","stepIndex","highlightedIndex","keyboardActive","footerFocused","drafts","currentStep","isLastStep","currentDraft","currentAllowCustom","currentStepHasAnswer","currentSelectedSingle","currentStepRequired","canLeaveCurrentStep","navValues","option","highlightedValue","isHighlightVisible","customHighlighted","highlightedForSelect","cardModelValue","setDraft","selectValue","toggleValue","onCustomInput","onOptionFocus","onCustomFocus","customIndex","optionRows","focusCustomInput","focusOptionList","focusFooterPrimary","scrollHighlightIntoView","moveHighlight","deactivateKeyboard","syncHighlightToSelection","noOptions","goBack","goNext","finalize","answers","labelByValue","selectedLabels","customText","answer","onWizardSubmit","onSkip","isTextEntryTarget","pickHighlighted","highlighted","commitStep","handleEnter","ownsKeyEvent","leaveCustomInput","inTextField","stepsKey","activeDescendantId","customSelected","selectOption","isSelected","toggleOption","customRow","gridStyle","onCardClick","placeholderInitial"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8,37,45]}