fds-vue-core 2.1.9 → 2.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.d.ts +5 -3
- package/dist/fds-vue-core.cjs.js +249 -226
- package/dist/fds-vue-core.cjs.js.map +1 -1
- package/dist/fds-vue-core.es.js +249 -226
- package/dist/fds-vue-core.es.js.map +1 -1
- package/package.json +4 -2
- package/src/components/Blocks/FdsBlockLink/FdsBlockLink.vue +7 -0
- package/src/components/Blocks/FdsBlockLink/types.ts +2 -0
- package/src/components/Buttons/ButtonBaseProps.ts +1 -0
- package/src/components/Buttons/FdsButtonCopy/types.ts +1 -0
- package/src/components/Buttons/FdsButtonDownload/FdsButtonDownload.vue +3 -15
- package/src/components/Buttons/FdsButtonDownload/types.ts +20 -0
- package/src/components/Buttons/FdsButtonIcon/FdsButtonIcon.vue +1 -1
- package/src/components/Buttons/FdsButtonIcon/types.ts +1 -0
- package/src/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue +1 -1
- package/src/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue +5 -0
- package/src/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue +1 -1
- package/src/components/FdsModal/types.ts +1 -0
- package/src/components/FdsPagination/types.ts +3 -0
- package/src/components/FdsSearchSelect/FdsSearchSelect.vue +7 -30
- package/src/components/FdsSearchSelect/types.ts +7 -0
- package/src/components/FdsTreeView/types.ts +4 -1
- package/src/components/Form/FdsCheckbox/types.ts +2 -0
- package/src/components/Form/FdsInput/types.ts +4 -0
- package/src/components/Form/FdsRadio/types.ts +1 -0
- package/src/index.ts +1 -1
- package/src/.DS_Store +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fds-vue-core.es.js","sources":["../src/composables/useHasSlots.ts","../src/assets/icons.ts","../src/components/FdsIcon/FdsIcon.vue","../src/components/Buttons/FdsButtonIcon/FdsButtonIcon.vue","../src/components/Blocks/FdsBlockAlert/FdsBlockAlert.vue","../src/components/Blocks/FdsBlockContent/FdsBlockContent.vue","../src/components/Blocks/FdsBlockExpander/FdsBlockExpander.vue","../src/components/Blocks/FdsBlockInfo/FdsBlockInfo.vue","../src/components/Blocks/FdsBlockLink/FdsBlockLink.vue","../src/components/FdsSpinner/FdsSpinner.vue","../src/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue","../src/components/Buttons/FdsButtonCopy/FdsButtonCopy.vue","../src/components/Buttons/FdsButtonDownload/FdsButtonDownload.vue","../src/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue","../src/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue","../src/components/FdsModal/FdsModal.vue","../node_modules/imask/esm/core/utils.js","../node_modules/imask/esm/core/action-details.js","../node_modules/imask/esm/core/holder.js","../node_modules/imask/esm/masked/factory.js","../node_modules/imask/esm/controls/mask-element.js","../node_modules/imask/esm/controls/html-mask-element.js","../node_modules/imask/esm/controls/html-input-mask-element.js","../node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../node_modules/imask/esm/controls/input-history.js","../node_modules/imask/esm/controls/input.js","../node_modules/imask/esm/core/change-details.js","../node_modules/imask/esm/core/continuous-tail-details.js","../node_modules/imask/esm/masked/base.js","../node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../node_modules/imask/esm/masked/pattern/cursor.js","../node_modules/imask/esm/masked/pattern/fixed-definition.js","../node_modules/imask/esm/masked/pattern/input-definition.js","../node_modules/imask/esm/masked/regexp.js","../node_modules/imask/esm/masked/pattern.js","../node_modules/imask/esm/masked/range.js","../node_modules/imask/esm/masked/date.js","../node_modules/imask/esm/masked/dynamic.js","../node_modules/imask/esm/masked/enum.js","../node_modules/imask/esm/masked/function.js","../node_modules/imask/esm/masked/number.js","../node_modules/imask/esm/masked/pipe.js","../node_modules/imask/esm/masked/repeat.js","../node_modules/imask/esm/index.js","../src/components/Form/FdsInput/FdsInput.vue","../src/components/FdsPagination/FdsPagination.vue","../src/composables/useBoldQuery.ts","../src/composables/useIsPid.ts","../src/components/FdsSearchSelect/FdsSearchSelect.vue","../src/components/FdsSticker/FdsSticker.vue","../src/components/FdsTreeView/utils.ts","../src/components/FdsTreeView/useTreeState.ts","../src/components/Form/FdsCheckbox/FdsCheckbox.vue","../src/components/Form/FdsRadio/FdsRadio.vue","../src/components/FdsTreeView/TreeNode.vue","../src/composables/useElementFinalSize.ts","../src/components/Typography/FdsText/FdsText.vue","../src/components/FdsTreeView/FdsTreeView.vue","../src/components/FdsTruncatedText/FdsTruncatedText.vue","../src/components/Form/FdsSelect/FdsSelect.vue","../src/components/Form/FdsTextarea/FdsTextarea.vue","../src/components/Table/FdsTable/FdsTable.vue","../src/components/Table/FdsTableHead/FdsTableHead.vue","../src/components/Tabs/FdsTabs/FdsTabs.vue","../src/components/Tabs/FdsTabsItem/FdsTabsItem.vue","../src/components/Typography/FdsHeading/FdsHeading.vue","../src/components/Typography/FdsListHeading/FdsListHeading.vue","../src/components/Typography/FdsSeparator/FdsSeparator.vue","../src/index.ts"],"sourcesContent":["import { Comment, computed, useSlots, type VNode } from 'vue'\n\n/**\n * Check if a slot has any real content (ignores comment nodes)\n * @param name Slot name, default is \"default\"\n */\nexport function useHasSlot(name: string = 'default') {\n const slots = useSlots()\n\n return computed(() => {\n const slotFn = slots[name]\n if (!slotFn) return false\n\n const vnodes: VNode[] = slotFn()\n return vnodes.some((vnode) => vnode.type !== Comment)\n })\n}\n","export type IconMap = Record<string, () => string>\n\nconst icons: IconMap = {\n addCircle: () => `\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 17.25C11.586 17.25 11.25 16.914 11.25 16.5V12.75H7.5C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H11.25V7.5C11.25 7.086 11.586 6.75 12 6.75C12.414 6.75 12.75 7.086 12.75 7.5V11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H12.75V16.5C12.75 16.914 12.414 17.25 12 17.25Z\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n </svg>`,\n alert: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M11.984.003C8.777.055 5.72 1.367 3.474 3.655 1.204 5.916-.05 9.004.002 12.208c-.004 3.13 1.238 6.132 3.452 8.345C5.667 22.765 8.67 24.006 11.8 24h.214c6.677-.069 12.039-5.53 11.985-12.208.007-3.168-1.264-6.206-3.526-8.425-2.261-2.219-5.323-3.432-8.49-3.364zM10.5 16.543c-.015-.396.13-.781.403-1.07.273-.287.65-.453 1.046-.46h.027c.82.002 1.492.65 1.522 1.47.015.396-.13.781-.403 1.07-.272.287-.65.453-1.045.46h-.027c-.82-.003-1.492-.651-1.523-1.47zM11 12.5V6.502c0-.552.447-1 1-1 .552 0 1 .448 1 1v6c0 .551-.448 1-1 1-.553 0-1-.449-1-1z\" />\n </svg>`,\n bigAlert: () => `\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23.8906 29.5264C22.964 29.5427 22.0827 29.9307 21.4453 30.6035C20.808 31.2764 20.468 32.1774 20.502 33.1035V33.1045C20.5755 35.0101 22.1388 36.5193 24.0459 36.5254H24.1094C25.0363 36.5097 25.9181 36.1213 26.5557 35.4482C27.1931 34.7751 27.5336 33.8737 27.499 32.9473C27.4278 31.0402 25.8625 29.53 23.9541 29.5264H23.8906ZM24.001 10.5039C22.6204 10.504 21.501 11.6234 21.501 13.0039V25.0029C21.5012 26.3833 22.6206 27.5019 24.001 27.502C25.3814 27.502 26.5008 26.3833 26.501 25.0029V13.0039C26.501 11.6233 25.3816 10.5039 24.001 10.5039ZM0.50293 24.4082C0.401048 18.1355 2.85577 12.0913 7.30176 7.66504L7.30566 7.66113C11.7066 3.17882 17.6947 0.607705 23.9756 0.504883H23.9775C30.1787 0.372553 36.1713 2.74791 40.5986 7.0918C45.0258 11.4357 47.5136 17.3818 47.499 23.584V23.5889C47.6055 36.6682 37.1039 47.3652 24.0244 47.5H23.6006C17.4739 47.5109 11.5943 45.0828 7.26074 40.752C2.92729 36.4211 0.495638 30.5435 0.50293 24.417V24.4082Z\" fill=\"#D96F02\" stroke=\"#B74E06\"/>\n </svg>`,\n arrowDown: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-305 -3476) translate(305 3476) rotate(90 12 12)\"/>\n </svg>`,\n arrowLeft: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-353 -3476) translate(353 3476) rotate(180 12 12)\"/>\n </svg>`,\n arrowRight: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-257 -3476) translate(257 3476)\"/>\n </svg>`,\n arrowUp: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-209 -3476) translate(209 3476) rotate(-90 12 12)\"/>\n </svg>`,\n bigSuccess: () => `\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M34.2249 13.7464L22.0861 30.2205L14.3404 24.0236C13.2621 23.1607 11.6885 23.3353 10.8256 24.4136C9.96272 25.4919 10.1373 27.0655 11.2156 27.9284L11.2158 27.9285L20.9918 35.7445L20.9918 35.7446L20.9961 35.7479C21.5291 36.1646 22.2072 36.3496 22.878 36.2615C23.5488 36.1733 24.1561 35.8192 24.5633 35.2789L24.5633 35.279L24.5665 35.2746L38.2503 16.705C38.8226 15.9899 38.9581 15.0185 38.6027 14.1737C38.2457 13.3252 37.4514 12.7415 36.535 12.6543C35.6227 12.5676 34.7364 12.9869 34.2249 13.7464ZM0.5 24C0.5 11.0214 11.0211 0.500162 23.9997 0.5C36.9723 0.51526 47.4849 11.0279 47.5 24.0006C47.4997 36.979 36.9785 47.5 24 47.5C11.0213 47.5 0.5 36.9787 0.5 24Z\" fill=\"#559C14\" stroke=\"#417714\"/>\n </svg>`,\n clock: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 23.5C5.65916 23.5 0.5 18.3408 0.5 12C0.5 5.65916 5.65916 0.5 12 0.5C18.3408 0.5 23.5 5.65916 23.5 12C23.5 18.3408 18.3408 23.5 12 23.5ZM12 2.03333C6.50453 2.03333 2.03333 6.50453 2.03333 12C2.03333 17.4955 6.50453 21.9667 12 21.9667C17.4955 21.9667 21.9667 17.4955 21.9667 12C21.9667 6.50453 17.4955 2.03333 12 2.03333Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.687 17.438C16.487 17.438 16.298 17.36 16.157 17.218L11.47 12.53C11.4 12.46 11.345 12.378 11.307 12.285C11.304 12.277 11.301 12.268 11.298 12.26C11.266 12.174 11.251 12.088 11.251 12V8.25C11.251 7.836 11.587 7.5 12.001 7.5C12.415 7.5 12.751 7.836 12.751 8.25V11.689L17.218 16.157C17.36 16.299 17.438 16.487 17.438 16.687C17.438 16.887 17.36 17.076 17.218 17.217C17.076 17.358 16.887 17.438 16.687 17.438Z\"/>\n </svg>`,\n complaint: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.750465 24C0.549465 24 0.361465 23.922 0.219465 23.78C-0.00453524 23.556 -0.0635353 23.214 0.0724647 22.928L2.98346 16.815C2.00946 15.113 1.49746 13.183 1.49946 11.219C1.50846 5.033 6.54846 0 12.7345 0H12.7695C14.8715 0 16.9265 0.587 18.7115 1.697C21.2635 3.284 23.0445 5.77 23.7265 8.697C24.4085 11.624 23.9095 14.641 22.3225 17.192C20.7355 19.744 18.2495 21.525 15.3235 22.207C14.4765 22.405 13.6105 22.505 12.7495 22.505C10.8055 22.505 8.88546 21.991 7.18446 21.016L1.07246 23.928C0.971465 23.975 0.860465 24 0.750465 24ZM12.7345 1.5C7.37446 1.5 3.00746 5.861 2.99946 11.221C2.99646 13.046 3.50546 14.83 4.46946 16.379C4.60546 16.598 4.62046 16.866 4.50946 17.098L2.33546 21.664L6.90146 19.489C7.00046 19.441 7.11246 19.416 7.22346 19.416C7.36346 19.416 7.50146 19.455 7.62046 19.53C9.17146 20.495 10.9455 21.004 12.7505 21.004C13.4965 21.004 14.2475 20.917 14.9825 20.746C17.5185 20.155 19.6725 18.611 21.0485 16.4C22.4235 14.188 22.8555 11.573 22.2645 9.037C21.6735 6.501 20.1295 4.346 17.9185 2.971C16.3725 2.009 14.5915 1.5 12.7695 1.5C12.7655 1.5 12.7345 1.5 12.7345 1.5Z\"/>\n <path d=\"M12.7505 15.75C13.3718 15.75 13.8755 15.2463 13.8755 14.625C13.8755 14.0037 13.3718 13.5 12.7505 13.5C12.1292 13.5 11.6255 14.0037 11.6255 14.625C11.6255 15.2463 12.1292 15.75 12.7505 15.75Z\"/>\n <path d=\"M12.7505 12C12.3365 12 12.0005 11.664 12.0005 11.25V6.75C12.0005 6.336 12.3365 6 12.7505 6C13.1645 6 13.5005 6.336 13.5005 6.75V11.25C13.5005 11.664 13.1635 12 12.7505 12Z\"/>\n </svg>`,\n last: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20.35 19V5C20.35 4.73478 20.2262 4.48043 20.0059 4.29289C19.7855 4.10536 19.4866 4 19.175 4C18.8634 4 18.5645 4.10536 18.3441 4.29289C18.1238 4.48043 18 4.73478 18 5V19C18 19.2652 18.1238 19.5196 18.3441 19.7071C18.5645 19.8946 18.8634 20 19.175 20C19.4866 20 19.7855 19.8946 20.0059 19.7071C20.2262 19.5196 20.35 19.2652 20.35 19Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.0007 12C14.0013 12.4422 13.8113 12.8631 13.4795 13.1553L6.02754 19.7112C5.51395 20.1422 4.75026 20.0843 4.30747 19.5809C3.86469 19.0775 3.90477 18.3126 4.39776 17.8583L10.9142 12.1256C10.9504 12.0939 10.9712 12.0481 10.9712 12C10.9712 11.9519 10.9504 11.9061 10.9142 11.8744L4.39776 6.14174C3.90477 5.68736 3.86469 4.92253 4.30747 4.41911C4.75026 3.91569 5.51395 3.85782 6.02754 4.28877L13.4768 10.8426C13.8095 11.1354 14.0003 11.5569 14.0007 12Z\"/>\n </svg>\n `,\n first: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10 12C9.99945 11.5578 10.1894 11.1369 10.5212 10.8447L17.9732 4.28877C18.4868 3.85782 19.2505 3.91569 19.6932 4.41911C20.136 4.92253 20.0959 5.68736 19.603 6.14174L13.0865 11.8744C13.0503 11.9061 13.0296 11.9519 13.0296 12C13.0296 12.0481 13.0503 12.0939 13.0865 12.1256L19.603 17.8583C20.0959 18.3126 20.136 19.0775 19.6932 19.5809C19.2505 20.0843 18.4868 20.1422 17.9732 19.7112L10.5239 13.1574C10.1912 12.8646 10.0004 12.4431 10 12Z\"/>\n <path d=\"M6.35 19L6.35 5C6.35 4.73478 6.22621 4.48043 6.00585 4.29289C5.7855 4.10536 5.48663 4 5.175 4C4.86337 4 4.5645 4.10536 4.34415 4.29289C4.12379 4.48043 4 4.73478 4 5L4 19C4 19.2652 4.12379 19.5196 4.34415 19.7071C4.5645 19.8946 4.86337 20 5.175 20C5.48663 20 5.7855 19.8946 6.00585 19.7071C6.22621 19.5196 6.35 19.2652 6.35 19Z\"/>\n </svg>\n `,\n backspace: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(-65 -3428) translate(65 3428)\">\n <g fill-rule=\"nonzero\">\n <path d=\"M2.25 14C1.01 14 0 12.954 0 11.667V2.333C0 1.046 1.01 0 2.25 0h16.69c.78 0 1.494.41 1.908 1.096l2.812 4.667c.453.75.453 1.722 0 2.473l-2.812 4.672C20.432 13.592 19.72 14 18.943 14H2.25zm0-12.444c-.414 0-.75.348-.75.777v9.334c0 .429.336.777.75.777h16.69c.262 0 .499-.135.638-.363l2.81-4.668c.151-.251.151-.575 0-.825l-2.812-4.666c-.138-.23-.375-.365-.636-.365H2.25v-.001z\" transform=\"matrix(-1 0 0 1 24 5)\"/>\n <path d=\"M8.2 9.5c-.215 0-.416-.083-.567-.235L6.5 8.132 5.368 9.265c-.152.152-.352.235-.567.235-.215 0-.415-.083-.566-.235C4.083 9.115 4 8.913 4 8.7c0-.213.083-.415.234-.567l1.134-1.131-1.133-1.133c-.312-.313-.312-.82 0-1.133.152-.152.352-.235.566-.235.214 0 .415.083.566.235L6.5 5.868l1.132-1.133c.152-.152.352-.235.566-.235.214 0 .415.083.566.234.313.313.313.82 0 1.133L7.634 7l1.132 1.132c.152.152.234.353.234.567 0 .215-.083.416-.235.566-.15.15-.351.234-.566.234z\" transform=\"matrix(-1 0 0 1 24 5)\"/>\n </g>\n </g>\n </g>\n </svg>`,\n bigCamera: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M1.5 14C.673 14 0 13.327 0 12.5v-11C0 .673.673 0 1.5 0h13c.827 0 1.5.673 1.5 1.5v11c0 .827-.673 1.5-1.5 1.5h-13zm0-13c-.276 0-.5.224-.5.5v11c0 .276.224.5.5.5h13c.276 0 .5-.224.5-.5v-11c0-.276-.224-.5-.5-.5h-13zM23.5 13c-.077 0-.154-.018-.223-.052l-6.001-3C17.106 9.862 17 9.69 17 9.5v-5c0-.191.106-.362.276-.447l6-3c.07-.035.147-.053.224-.053.093 0 .184.026.263.075.148.091.237.25.237.425v11c0 .174-.089.333-.237.425-.079.049-.17.075-.263.075zm-.5-1.309V2.309l-5 2.5v4.382l5 2.5z\" transform=\"translate(-256 -3572) translate(256 3572) translate(0 5.5)\"/>\n </svg>`,\n bigClock: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-23C5.935 1 1 5.935 1 12s4.935 11 11 11 11-4.935 11-11S18.065 1 12 1z\" transform=\"translate(-160 -3572) translate(160 3572)\"/>\n <path d=\"M18 18c-.125 0-.245-.048-.338-.132l-6-5.5c-.103-.093-.162-.228-.162-.368V6.5c0-.276.224-.5.5-.5s.5.224.5.5v5.28l5.838 5.35c.097.09.155.213.161.347.006.133-.04.261-.13.36-.095.103-.23.162-.37.162z\" transform=\"translate(-160 -3572) translate(160 3572)\"/>\n </g>\n </svg>`,\n bigPhone: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M18.807 24c-.816 0-1.606-.237-2.283-.685C10.21 19.12 4.882 13.792.686 7.478c-1.084-1.635-.864-3.828.525-5.214L2.614.859C3.168.305 3.904 0 4.69 0c.785 0 1.522.305 2.076.859l2.561 2.558c1.143 1.145 1.143 3.007.001 4.152l-.519.52c2.148 2.566 4.536 4.955 7.103 7.104l.517-.517c.56-.558 1.296-.86 2.076-.86.785 0 1.522.305 2.076.86l2.562 2.56c1.143 1.146 1.142 3.008-.001 4.152l-1.404 1.404c-.78.779-1.82 1.208-2.931 1.208zM4.69 1.044c-.506 0-.981.196-1.338.553L1.949 3.002C.91 4.038.746 5.678 1.557 6.9c4.117 6.197 9.347 11.427 15.545 15.545.505.335 1.094.511 1.706.511.83 0 1.61-.32 2.194-.903l1.404-1.403c.738-.738.738-1.937 0-2.675l-2.56-2.562c-.357-.357-.832-.554-1.337-.554-.506 0-.98.196-1.337.553l-.855.855c-.098.098-.23.153-.37.153-.12 0-.238-.042-.33-.12-2.881-2.37-5.543-5.032-7.913-7.914-.171-.209-.157-.51.033-.7l.854-.856c.737-.738.737-1.94 0-2.677L6.03 1.597c-.357-.357-.833-.553-1.34-.553z\" transform=\"translate(-208 -3572) translate(208 3572)\"/>\n </svg>`,\n bigSearch: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14 14.5c-.134 0-.259-.052-.354-.146L10.5 11.207l-3.146 3.146c-.095.095-.22.147-.354.147-.134 0-.259-.052-.354-.146-.095-.094-.146-.22-.146-.354 0-.134.052-.259.146-.354L9.793 10.5 6.646 7.354C6.552 7.259 6.5 7.134 6.5 7c0-.134.052-.259.146-.354.094-.095.22-.146.354-.146.134 0 .259.052.354.146L10.5 9.793l3.146-3.146c.095-.095.22-.147.354-.147.134 0 .259.052.354.146.095.094.146.22.146.354 0 .134-.052.259-.146.354L11.207 10.5l3.146 3.146c.095.095.147.22.147.354 0 .134-.052.259-.146.354-.094.095-.22.146-.354.146z\" transform=\"translate(-304 -3572) translate(304 3572)\"/>\n <path d=\"M23.5 24c-.134 0-.259-.052-.354-.146l-5.589-5.589C15.617 20.031 13.121 21 10.5 21 4.71 21 0 16.29 0 10.5S4.71 0 10.5 0 21 4.71 21 10.5c0 2.621-.969 5.117-2.736 7.057l5.589 5.589c.095.095.147.22.147.354 0 .134-.052.259-.146.354-.094.095-.22.146-.354.146zm-13-23C5.262 1 1 5.262 1 10.5S5.262 20 10.5 20s9.5-4.262 9.5-9.5S15.738 1 10.5 1z\" transform=\"translate(-304 -3572) translate(304 3572)\"/>\n </g>\n </svg>`,\n search: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23.245 23.996C23.045 23.996 22.856 23.918 22.715 23.776L16.2 17.26C15.439 17.911 14.582 18.442 13.647 18.839C12.418 19.361 11.127 19.626 9.81001 19.626C8.55301 19.626 7.31801 19.385 6.13701 18.908C3.70601 17.927 1.80301 16.059 0.778008 13.646C-0.246992 11.234 -0.271992 8.56601 0.709008 6.13601C1.69001 3.70601 3.55801 1.80201 5.97001 0.777005C7.19901 0.254005 8.48901 -0.00999451 9.80701 -0.00999451C11.064 -0.00999451 12.299 0.232005 13.48 0.708005C15.911 1.68901 17.814 3.55701 18.839 5.97001C19.864 8.38301 19.889 11.05 18.908 13.48C18.506 14.476 17.952 15.389 17.259 16.198L23.776 22.716C24.068 23.008 24.068 23.484 23.776 23.777C23.634 23.918 23.445 23.996 23.245 23.996ZM9.80701 1.49001C8.69201 1.49001 7.59801 1.71401 6.55701 2.15701C4.51301 3.02601 2.93001 4.63801 2.09901 6.69701C1.26801 8.75601 1.28901 11.015 2.15701 13.059C3.02601 15.103 4.63801 16.686 6.69701 17.517C7.69801 17.921 8.74501 18.125 9.80901 18.125C10.924 18.125 12.018 17.901 13.059 17.458C14.033 17.044 14.906 16.46 15.653 15.722C15.663 15.708 15.674 15.696 15.685 15.685C15.701 15.669 15.716 15.656 15.73 15.646C16.493 14.875 17.099 13.953 17.516 12.918C18.347 10.859 18.326 8.60001 17.457 6.55601C16.589 4.51201 14.976 2.92901 12.917 2.09801C11.918 1.69501 10.871 1.49001 9.80701 1.49001Z\" />\n </svg>`,\n sync: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_1137_502)\">\n <path d=\"M3.74899 15.249C3.53599 15.249 3.33199 15.157 3.18899 14.996L0.217986 12.026C0.0759858 11.885 -0.00201416 11.696 -0.00201416 11.496C-0.00201416 11.296 0.0759858 11.107 0.217986 10.966C0.358986 10.824 0.547986 10.746 0.747986 10.746C0.947986 10.746 1.13699 10.824 1.27799 10.966L2.99799 12.686V12.247C2.99999 9.55401 4.19199 7.02601 6.26799 5.31201C7.90099 3.96401 9.87699 3.25201 11.984 3.25201C12.272 3.25201 12.565 3.26601 12.854 3.29301C15.248 3.52201 17.408 4.66801 18.939 6.52201C19.066 6.67601 19.126 6.87101 19.107 7.07101C19.088 7.27101 18.992 7.45101 18.838 7.57801C18.704 7.68901 18.535 7.75001 18.361 7.75001C18.136 7.75001 17.925 7.65101 17.782 7.47701C16.507 5.93201 14.706 4.97701 12.712 4.78601C12.47 4.76301 12.224 4.75101 11.983 4.75101C10.23 4.75101 8.58499 5.34501 7.22399 6.46801C5.49299 7.89701 4.49999 10.003 4.49899 12.247V12.686L6.21899 10.966C6.36099 10.824 6.54899 10.746 6.74899 10.746C6.94899 10.746 7.13799 10.824 7.27899 10.966C7.42099 11.107 7.49899 11.296 7.49899 11.496C7.49899 11.696 7.42099 11.885 7.27899 12.026L4.29299 15.012C4.16599 15.157 3.96199 15.249 3.74899 15.249Z\" />\n <path d=\"M12.006 21.245C11.917 21.245 11.829 21.244 11.739 21.241C9.33598 21.171 7.10398 20.17 5.45398 18.422C5.31598 18.276 5.24398 18.086 5.24998 17.886C5.25598 17.686 5.33898 17.5 5.48498 17.362C5.62498 17.23 5.80798 17.158 5.99998 17.158C6.20598 17.158 6.40498 17.244 6.54598 17.393C7.92098 18.85 9.78098 19.684 11.783 19.742C11.854 19.744 11.926 19.745 11.997 19.745C13.921 19.745 15.75 19.018 17.147 17.7C18.564 16.363 19.408 14.506 19.492 12.564L17.779 14.277C17.637 14.419 17.449 14.497 17.249 14.497C17.049 14.497 16.86 14.419 16.719 14.277C16.427 13.985 16.427 13.509 16.719 13.216L19.719 10.216C19.789 10.146 19.872 10.091 19.964 10.053C19.971 10.05 19.98 10.047 19.988 10.044C20.069 10.013 20.159 9.996 20.249 9.996C20.338 9.996 20.425 10.012 20.51 10.044C20.521 10.048 20.532 10.052 20.542 10.056C20.627 10.091 20.709 10.146 20.78 10.216L23.78 13.216C24.072 13.508 24.072 13.984 23.78 14.277C23.638 14.419 23.45 14.497 23.25 14.497C23.05 14.497 22.861 14.419 22.72 14.277L20.995 12.552C20.913 14.909 19.897 17.168 18.177 18.791C16.499 20.373 14.308 21.245 12.006 21.245Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1137_502\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n bigInfo: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24.001c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-22.956C5.958 1.045 1.043 5.959 1.043 12S5.958 22.958 12 22.958c6.042 0 10.957-4.915 10.957-10.957 0-6.042-4.915-10.956-10.957-10.956z\" transform=\"translate(-111.000000, -3572.000000) translate(111.000000, 3572.000000)\"/>\n <path d=\"M13.043 17.744c-.862 0-1.565-.702-1.565-1.565V9.397H9.913c-.288 0-.522-.234-.522-.522 0-.288.234-.522.522-.522h1.565c.575 0 1.044.469 1.044 1.044v6.782c0 .288.233.522.521.522h1.566c.288 0 .521.234.521.522 0 .288-.233.521-.521.521h-1.566zM11.734 7.304c-.432 0-.783-.35-.783-.782 0-.432.35-.783.783-.783.432 0 .783.35.783.783 0 .432-.351.782-.783.782z\" transform=\"translate(-111.000000, -3572.000000) translate(111.000000, 3572.000000)\"/>\n </g>\n </svg>`,\n calendar: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M2.252 24c-1.241 0-2.25-1.009-2.25-2.25V5.25C.002 4.009 1.011 3 2.252 3h3.75V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75c1.241 0 2.25 1.009 2.25 2.25v16.5c0 1.241-1.009 2.25-2.25 2.25h-19.5zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zm21-12.75V5.25c0-.414-.336-.75-.75-.75h-3.75V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-3.75c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-65 -3476) translate(65 3476)\"/>\n </svg>`,\n calendarRemove: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.25 24C1.009 24 0 22.991 0 21.75V5.25C0 4.009 1.009 3 2.25 3H6V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75C22.991 3 24 4.009 24 5.25v16.5c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zM22.5 9V5.25c0-.414-.336-.75-.75-.75H18V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75S6 6.414 6 6V4.5H2.25c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-161 -3476) translate(161 3476)\"/>\n <path d=\"M15 20.25c-.2 0-.389-.078-.53-.22L12 17.561l-2.47 2.47c-.141.141-.33.219-.53.219s-.389-.078-.53-.22c-.292-.292-.292-.768 0-1.061l2.47-2.47-2.47-2.47c-.292-.292-.292-.768 0-1.061.141-.14.33-.218.53-.218s.389.078.53.22L12 15.44l2.47-2.47c.142-.142.33-.22.53-.22s.389.078.53.22c.292.292.292.768 0 1.061l-2.47 2.47 2.47 2.47c.292.292.292.768 0 1.061-.141.14-.33.218-.53.218z\" transform=\"translate(-161 -3476) translate(161 3476)\"/>\n </g>\n </svg>`,\n calendarSet: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.25 24C1.009 24 0 22.991 0 21.75V5.25C0 4.009 1.009 3 2.25 3H6V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75C22.991 3 24 4.009 24 5.25v16.5c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zM22.5 9V5.25c0-.414-.336-.75-.75-.75H18V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75S6 6.414 6 6V4.5H2.25c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-113 -3476) translate(113 3476)\"/>\n <path d=\"M11.25 20.25c-.2 0-.389-.078-.53-.22l-3-3c-.292-.292-.292-.768 0-1.061.142-.142.33-.22.53-.22s.389.078.53.22l2.389 2.389 3.981-5.309c.141-.188.366-.3.6-.3.163 0 .319.052.449.15.331.249.398.719.15 1.05l-4.5 6c-.131.174-.33.283-.547.298-.014.002-.033.003-.052.003z\" transform=\"translate(-113 -3476) translate(113 3476)\"/>\n </g>\n </svg>`,\n camera: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M3.75 15.511c-2.068 0-3.75-1.682-3.75-3.75v-7.5C0 2.193 1.682.511 3.75.511h9c2.068 0 3.75 1.682 3.75 3.75v7.5c0 2.068-1.682 3.75-3.75 3.75h-9zm0-13.5c-1.241 0-2.25 1.009-2.25 2.25v7.5c0 1.241 1.009 2.25 2.25 2.25h9c1.241 0 2.25-1.009 2.25-2.25v-7.5c0-1.241-1.009-2.25-2.25-2.25h-9zM22.499 13.548c-.233 0-.458-.053-.669-.159l-3.416-1.707c-.37-.185-.52-.636-.335-1.006.128-.256.385-.415.671-.415.115 0 .23.027.334.078l3.416 1.708V3.974l-3.415 1.708c-.104.052-.22.079-.335.079-.286 0-.543-.159-.671-.414-.185-.37-.034-.822.335-1.006l3.415-1.707c.207-.104.439-.159.671-.159.402 0 .778.156 1.061.44.284.283.439.659.439 1.06v8.073c0 .231-.054.462-.157.669-.179.359-.488.627-.867.753-.154.051-.315.078-.477.078z\" transform=\"translate(-113 -3428) translate(113 3428) translate(0 4)\"/>\n </svg>`,\n check: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12C23.992 5.376 18.624.008 12 0zm6.927 8.2l-6.845 9.289c-.163.217-.407.359-.676.394-.268.035-.54-.039-.754-.206l-4.888-3.908c-.431-.345-.501-.975-.156-1.406.345-.431.975-.501 1.406-.156l4.076 3.261 6.227-8.451c.204-.306.56-.476.927-.441.366.035.684.268.827.608.143.34.087.73-.144 1.016z\" />\n </svg>`,\n checkmark: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M19.592 4.187c-.45-.321-1.074-.218-1.396.23L8.834 17.47l-3.126-3.127c-.252-.253-.62-.352-.966-.26-.345.093-.615.363-.708.708-.092.345.006.714.259.966l3.959 3.959c.21.202.497.304.788.28.29-.023.557-.17.732-.404l10.05-14.008c.322-.45.219-1.075-.23-1.397z\" transform=\"translate(-401 -3476) translate(401 3476)\"/>\n </svg>`,\n clinic: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_4366_10250)\">\n <path d=\"M5.25098 24C4.00998 24 3.00098 22.991 3.00098 21.75V12.75C3.00098 12.336 3.33698 12 3.75098 12C4.16498 12 4.50098 12.336 4.50098 12.75V21.75C4.50098 22.164 4.83698 22.5 5.25098 22.5H18.751C19.165 22.5 19.501 22.164 19.501 21.75V12.75C19.501 12.336 19.837 12 20.251 12C20.665 12 21.001 12.336 21.001 12.75V21.75C21.001 22.991 19.992 24 18.751 24H5.25098Z\"/>\n <path d=\"M23.2509 12C23.0609 12 22.8789 11.928 22.7399 11.798L12.0009 1.776L1.2619 11.798C1.1229 11.928 0.940899 12 0.750899 12C0.543899 12 0.343899 11.913 0.202899 11.762C-0.0791012 11.46 -0.0631012 10.984 0.238899 10.702L11.4889 0.202C11.6279 0.072 11.8099 0 12.0009 0C12.1919 0 12.3739 0.072 12.5129 0.202L23.7629 10.702C23.9089 10.839 23.9939 11.024 24.0009 11.224C24.0079 11.424 23.9369 11.615 23.7999 11.762C23.6569 11.913 23.4569 12 23.2509 12Z\"/>\n <path d=\"M11.251 19.5C10.424 19.5 9.75098 18.827 9.75098 18V16.5H8.25098C7.42398 16.5 6.75098 15.827 6.75098 15V13.5C6.75098 12.673 7.42398 12 8.25098 12H9.75098V10.5C9.75098 9.673 10.424 9 11.251 9H12.751C13.578 9 14.251 9.673 14.251 10.5V12H15.751C16.578 12 17.251 12.673 17.251 13.5V15C17.251 15.827 16.578 16.5 15.751 16.5H14.251V18C14.251 18.827 13.578 19.5 12.751 19.5H11.251ZM8.25098 15H10.501C10.915 15 11.251 15.336 11.251 15.75V18H12.751V15.75C12.751 15.336 13.087 15 13.501 15H15.751V13.5H13.501C13.087 13.5 12.751 13.164 12.751 12.75V10.5H11.251V12.75C11.251 13.164 10.915 13.5 10.501 13.5H8.25098V15Z\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_4366_10250\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n copy: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.75 24C1.509 24 .5 22.991.5 21.75V5.25c0-.414.336-.75.75-.75s.75.336.75.75v16.5c0 .414.336.75.75.75h13.5c.414 0 .75.336.75.75s-.336.75-.75.75H2.75z\" transform=\"translate(1)\" />\n <path d=\"M5.25 21c-.965 0-1.75-.785-1.75-1.75V1.75C3.5.785 4.285 0 5.25 0h14.5c.965 0 1.75.785 1.75 1.75v17.5c0 .965-.785 1.75-1.75 1.75H5.25zm0-19.5c-.138 0-.25.112-.25.25v17.5c0 .138.112.25.25.25h14.5c.138 0 .25-.112.25-.25V1.75c0-.138-.112-.25-.25-.25H5.25z\" transform=\"translate(1)\" />\n </g>\n </svg>`,\n coworker: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 7.5C9.932 7.5 8.25 5.818 8.25 3.75C8.25 1.682 9.932 0 12 0C14.068 0 15.75 1.682 15.75 3.75C15.75 5.818 14.068 7.5 12 7.5ZM12 1.5C10.759 1.5 9.75 2.509 9.75 3.75C9.75 4.991 10.759 6 12 6C13.241 6 14.25 4.991 14.25 3.75C14.25 2.509 13.241 1.5 12 1.5Z\"/>\n <path d=\"M9.75 24C9.363 24 9.042 23.71 9.004 23.325L8.321 16.5H6.75C6.336 16.5 6 16.164 6 15.75V13.5C6 10.192 8.692 7.5 12 7.5C15.308 7.5 18 10.192 18 13.5V15.75C18 16.164 17.664 16.5 17.25 16.5H15.679L14.996 23.325C14.958 23.709 14.637 24 14.25 24H9.75ZM13.571 22.5L14.254 15.675C14.292 15.291 14.613 15 15 15H16.5V13.5C16.5 11.019 14.481 9 12 9C9.519 9 7.5 11.019 7.5 13.5V15H9C9.387 15 9.708 15.29 9.746 15.675L10.428 22.5H13.571Z\"/>\n </svg>`,\n coworkers: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 9C2.846 9 1.5 7.654 1.5 6C1.5 4.346 2.846 3 4.5 3C6.154 3 7.5 4.346 7.5 6C7.5 7.654 6.154 9 4.5 9ZM4.5 4.5C3.673 4.5 3 5.173 3 6C3 6.827 3.673 7.5 4.5 7.5C5.327 7.5 6 6.827 6 6C6 5.173 5.327 4.5 4.5 4.5Z\"/>\n <path d=\"M3 22.5C2.623 22.5 2.303 22.218 2.256 21.843L1.588 16.5H0.75C0.336 16.5 0 16.164 0 15.75V13.5C0 11.019 2.019 9 4.5 9C4.914 9 5.25 9.336 5.25 9.75C5.25 10.164 4.914 10.5 4.5 10.5C2.846 10.5 1.5 11.846 1.5 13.5V15H2.25C2.627 15 2.947 15.282 2.994 15.657L3.662 21H6C6.414 21 6.75 21.336 6.75 21.75C6.75 22.164 6.414 22.5 6 22.5H3Z\"/>\n <path d=\"M19.5 9C17.846 9 16.5 7.654 16.5 6C16.5 4.346 17.846 3 19.5 3C21.154 3 22.5 4.346 22.5 6C22.5 7.654 21.154 9 19.5 9ZM19.5 4.5C18.673 4.5 18 5.173 18 6C18 6.827 18.673 7.5 19.5 7.5C20.327 7.5 21 6.827 21 6C21 5.173 20.327 4.5 19.5 4.5Z\"/>\n <path d=\"M18 22.5C17.586 22.5 17.25 22.164 17.25 21.75C17.25 21.336 17.586 21 18 21H20.338L21.006 15.657C21.053 15.282 21.373 15 21.75 15H22.5V13.5C22.5 11.846 21.154 10.5 19.5 10.5C19.086 10.5 18.75 10.164 18.75 9.75C18.75 9.336 19.086 9 19.5 9C21.981 9 24 11.019 24 13.5V15.75C24 16.164 23.664 16.5 23.25 16.5H22.412L21.744 21.843C21.697 22.218 21.377 22.5 21 22.5H18Z\"/>\n <path d=\"M12 7.5C9.932 7.5 8.25 5.818 8.25 3.75C8.25 1.682 9.932 0 12 0C14.068 0 15.75 1.682 15.75 3.75C15.75 5.818 14.068 7.5 12 7.5ZM12 1.5C10.759 1.5 9.75 2.509 9.75 3.75C9.75 4.991 10.759 6 12 6C13.241 6 14.25 4.991 14.25 3.75C14.25 2.509 13.241 1.5 12 1.5Z\"/>\n <path d=\"M9.75 24C9.363 24 9.042 23.71 9.004 23.325L8.321 16.5H6.75C6.336 16.5 6 16.164 6 15.75V13.5C6 10.192 8.692 7.5 12 7.5C15.308 7.5 18 10.192 18 13.5V15.75C18 16.164 17.664 16.5 17.25 16.5H15.679L14.996 23.325C14.958 23.709 14.637 24 14.25 24H9.75ZM13.571 22.5L14.254 15.675C14.292 15.291 14.613 15 15 15H16.5V13.5C16.5 11.019 14.481 9 12 9C9.519 9 7.5 11.019 7.5 13.5V15H9C9.387 15 9.708 15.29 9.746 15.675L10.428 22.5H13.571Z\"/>\n </svg>`,\n counselingPerson: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 7.5C3.932 7.5 2.25 5.818 2.25 3.75C2.25 1.682 3.932 0 6 0C8.068 0 9.75 1.682 9.75 3.75C9.75 5.818 8.068 7.5 6 7.5ZM6 1.5C4.759 1.5 3.75 2.509 3.75 3.75C3.75 4.991 4.759 6 6 6C7.241 6 8.25 4.991 8.25 3.75C8.25 2.509 7.241 1.5 6 1.5Z\"/>\n <path d=\"M3.75 24C3.363 24 3.042 23.71 3.004 23.325L2.321 16.5H0.75C0.336 16.5 0 16.164 0 15.75V13.5C0.001 11.358 1.156 9.364 3.014 8.298C3.92 7.777 4.95 7.502 5.992 7.502C8.141 7.502 10.139 8.656 11.206 10.515C11.306 10.689 11.332 10.891 11.28 11.084C11.228 11.277 11.103 11.439 10.929 11.538C10.816 11.603 10.687 11.638 10.556 11.638C10.288 11.638 10.039 11.494 9.905 11.261C9.105 9.867 7.606 9.002 5.993 9.002C5.212 9.002 4.44 9.208 3.76 9.599C2.367 10.399 1.501 11.894 1.5 13.501V15H3C3.387 15 3.708 15.29 3.746 15.675L4.429 22.5H7.572L7.827 19.942C7.865 19.563 8.191 19.266 8.569 19.266C8.597 19.266 8.626 19.268 8.655 19.271C8.848 19.29 9.027 19.386 9.154 19.542C9.281 19.697 9.34 19.892 9.32 20.091L8.997 23.324C8.958 23.71 8.637 24 8.25 24H3.75Z\"/>\n <path d=\"M17.25 24C13.528 24 10.5 20.972 10.5 17.25C10.5 13.528 13.528 10.5 17.25 10.5C20.972 10.5 24 13.528 24 17.25C24 20.972 20.972 24 17.25 24ZM17.25 12C14.355 12 12 14.355 12 17.25C12 20.145 14.355 22.5 17.25 22.5C20.145 22.5 22.5 20.145 22.5 17.25C22.5 14.355 20.145 12 17.25 12Z\"/>\n <path d=\"M17.25 18.75C16.836 18.75 16.5 18.414 16.5 18C16.5 17.586 16.836 17.25 17.25 17.25C17.87 17.25 18.375 16.745 18.375 16.125C18.375 15.505 17.87 15 17.25 15C16.63 15 16.125 15.505 16.125 16.125C16.125 16.539 15.789 16.875 15.375 16.875C14.961 16.875 14.625 16.539 14.625 16.125C14.625 14.677 15.802 13.5 17.25 13.5C18.698 13.5 19.875 14.677 19.875 16.125C19.875 17.573 18.698 18.75 17.25 18.75Z\"/>\n <path d=\"M17.25 21.75C16.63 21.75 16.125 21.245 16.125 20.625C16.125 20.005 16.63 19.5 17.25 19.5C17.554 19.501 17.836 19.618 18.048 19.831C18.26 20.044 18.376 20.326 18.375 20.627C18.375 21.246 17.87 21.75 17.25 21.75Z\"/>\n </svg>`,\n counseling: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\" transform=\"translate(-1121 -3428) translate(1121 3428)\">\n <path d=\"M5.25 10.5C2.355 10.5 0 8.145 0 5.25S2.355 0 5.25 0s5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9C3.182 1.5 1.5 3.182 1.5 5.25S3.182 9 5.25 9 9 7.318 9 5.25 7.318 1.5 5.25 1.5z\"/>\n <path d=\"M5.25 6c-.414 0-.75-.336-.75-.75V3c0-.414.336-.75.75-.75S6 2.586 6 3v1.5h.75c.414 0 .75.336.75.75S7.164 6 6.75 6h-1.5zM23.25 24c-.414 0-.75-.336-.75-.75V21h-.75c-.414 0-.75-.336-.75-.75s.336-.75.75-.75.75-.336.75-.75-.336-.75-.75-.75-.75-.336-.75-.75.336-.75.75-.75c1.241 0 2.25 1.009 2.25 2.25 0 .34-.075.668-.221.969.137.136.221.324.221.531v3c0 .414-.336.75-.75.75zM.75 24c-.414 0-.75-.336-.75-.75v-3c0-.414.336-.75.75-.75h3.681L.543 14.964C.154 14.48-.02 13.89.045 13.292c.066-.598.36-1.134.828-1.51.397-.318.896-.494 1.407-.494.632 0 1.237.266 1.661.729L7.785 16.5h3.465c.414 0 .75.336.75.75s-.336.75-.75.75H7.44c-.219 0-.427-.095-.569-.262l-4.052-4.726c-.128-.14-.326-.225-.535-.225-.172 0-.339.059-.471.165-.156.125-.254.304-.276.503-.022.199.035.395.161.551l4.485 5.231c.141.167.348.263.567.263h4.5c.414 0 .75.336.75.75s-.336.75-.75.75H1.5v2.25c0 .414-.336.75-.75.75zM16.5 8.25c-1.861 0-3.375-1.514-3.375-3.375S14.639 1.5 16.5 1.5s3.375 1.514 3.375 3.375S18.361 8.25 16.5 8.25zm0-5.25c-1.034 0-1.875.841-1.875 1.875S15.466 6.75 16.5 6.75s1.875-.841 1.875-1.875S17.534 3 16.5 3zM15.75 24c-1.241 0-2.25-1.009-2.25-2.25v-5.378c-.885-.314-1.5-1.162-1.5-2.122V12c0-2.068 1.682-3.75 3.75-3.75h1.5C19.318 8.25 21 9.932 21 12v2.25c0 .96-.615 1.808-1.5 2.122v5.378c0 1.241-1.009 2.25-2.25 2.25h-1.5zm0-14.25c-1.241 0-2.25 1.009-2.25 2.25v2.25c0 .414.336.75.75.75s.75.336.75.75v6c0 .414.336.75.75.75h1.5c.414 0 .75-.336.75-.75v-6c0-.414.336-.75.75-.75s.75-.336.75-.75V12c0-1.241-1.009-2.25-2.25-2.25h-1.5z\"/>\n </g>\n </svg>`,\n cross: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M13.533 12.118c-.032-.031-.05-.074-.05-.118s.018-.087.05-.118l6.174-6.175c.39-.39.39-1.024 0-1.414-.392-.39-1.025-.39-1.415 0l-6.175 6.172c-.03.032-.073.05-.118.05-.044 0-.086-.018-.118-.05L5.707 4.294c-.39-.391-1.023-.391-1.414 0-.39.39-.39 1.023 0 1.413l6.173 6.175c.032.031.05.074.05.118s-.018.087-.05.118l-6.173 6.175c-.253.253-.351.62-.259.966.093.345.362.615.707.707.346.092.714-.006.966-.26l6.174-6.174c.032-.032.074-.05.118-.05.045 0 .087.018.118.05l6.175 6.175c.39.39 1.023.39 1.414 0 .39-.39.39-1.023 0-1.414l-6.173-6.175z\" transform=\"translate(-711 -502) translate(709 500) translate(2 2)\"/>\n </svg>`,\n delete: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6.631 23.25c-1.161 0-2.146-.906-2.242-2.064L3.06 5.25H1.5c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6V3C7.5 1.759 8.509.75 9.75.75h4.5C15.491.75 16.5 1.759 16.5 3v.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-1.56l-1.328 15.937c-.096 1.157-1.081 2.063-2.242 2.063H6.631zm-.748-2.188c.032.386.36.688.748.688H17.37c.387 0 .716-.302.747-.688L19.435 5.25H4.565l1.318 15.812zM15 3.75V3c0-.414-.336-.75-.75-.75h-4.5c-.414 0-.75.336-.75.75v.75h6z\" transform=\"translate(-209 -3428) translate(209 3428)\"/>\n <path d=\"M9.75 18c-.414 0-.75-.336-.75-.75v-7.5c0-.414.336-.75.75-.75s.75.336.75.75v7.5c0 .414-.336.75-.75.75zM14.25 18c-.414 0-.75-.336-.75-.75v-7.5c0-.414.336-.75.75-.75s.75.336.75.75v7.5c0 .414-.336.75-.75.75z\" transform=\"translate(-209 -3428) translate(209 3428)\"/>\n </g>\n </svg>`,\n download: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 18.75c-.088 0-.175-.016-.26-.047l-.022-.008c-.096-.039-.179-.094-.249-.165L7.72 14.78c-.292-.292-.292-.768 0-1.061.142-.142.33-.22.53-.22s.389.078.53.22l2.47 2.47V6.75c0-.414.336-.75.75-.75s.75.336.75.75v9.439l2.47-2.47c.142-.142.33-.22.53-.22s.389.078.53.22c.292.292.292.768 0 1.061l-3.75 3.75c-.07.07-.153.125-.246.164l-.026.01c-.085.031-.171.046-.258.046z\" />\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n </g>\n </svg>`,\n edit: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\">\n <path d=\"M2.626 21.997c-.167 0-.323-.065-.441-.182-.181-.18-.235-.449-.136-.684l2.55-6.105L4.61 15c.01-.024.03-.06.056-.096l.026-.034c.014-.018.026-.032.04-.045l8.815-8.81c.007-.01.015-.019.022-.026l.037-.033 2.529-2.529c-.248-.116-.518-.176-.798-.176-.501 0-.97.193-1.323.545L11.36 6.45c-.118.118-.275.183-.441.183-.168 0-.325-.065-.443-.184-.243-.243-.243-.64.001-.884l2.655-2.652C13.719 2.324 14.503 2 15.34 2c.632 0 1.25.192 1.767.546.525-.35 1.149-.54 1.782-.54.634 0 1.25.186 1.78.539.69.49 1.143 1.212 1.284 2.036.14.824-.048 1.652-.531 2.332-.1.142-.214.275-.336.398L9.153 19.244c-.01.01-.024.021-.037.031-.052.045-.104.079-.162.103l-6.084 2.57c-.079.033-.16.049-.244.049zm1.167-1.796l3.82-1.614-2.22-2.219-1.6 3.833zm4.918-2.283l7.955-7.955-2.65-2.65-7.956 7.953 2.651 2.652zM17.55 9.08l2.652-2.652c.073-.074.14-.154.2-.238.6-.843.401-2.016-.442-2.615-.313-.208-.685-.32-1.07-.32-.535 0-1.054.222-1.425.61L14.9 6.429l2.65 2.65z\" transform=\"translate(-257 -3428) translate(257 3428)\"/>\n </g>\n </svg>`,\n email: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M2.25 20.5C1.009 20.5 0 19.491 0 18.25v-12c0-.537.195-1.059.548-1.468.013-.016.031-.037.051-.056C1.025 4.265 1.626 4 2.25 4h19.5c.625 0 1.226.265 1.652.727.018.018.035.037.051.057.351.404.547.927.547 1.466v12c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V6.437l-5.616 3.873 3.125 2.889c.304.281.322.756.042 1.06-.142.153-.343.241-.551.241-.189 0-.37-.071-.509-.199l-3.373-3.118-1.825 1.259c-.526.364-1.146.556-1.793.556-.646 0-1.266-.192-1.793-.556l-1.825-1.258-3.373 3.118c-.139.127-.32.198-.509.198-.208 0-.409-.088-.551-.24-.281-.304-.262-.78.041-1.06l3.125-2.889L1.5 6.437V18.25zm9.559-7.043c.276.191.601.291.941.291.34 0 .665-.101.941-.291L21.217 5.5H2.783l8.276 5.707z\" transform=\"translate(-305 -3428) translate(305 3428)\"/>\n </svg>`,\n expand: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M19.5 16.498c-.2 0-.389-.078-.53-.22-.141-.142-.22-.33-.22-.53s.078-.389.22-.53l2.47-2.47H2.561l2.47 2.47c.142.142.22.33.22.53s-.078.389-.22.53c-.142.142-.33.22-.53.22s-.389-.078-.53-.22l-3.75-3.75c-.07-.07-.125-.152-.163-.245l-.01-.026C.016 12.172 0 12.086 0 11.998c0-.089.016-.176.048-.261l.008-.021c.04-.097.095-.179.166-.249L3.97 7.718c.142-.142.33-.22.53-.22s.389.078.53.22c.142.141.22.33.22.53s-.078.389-.22.53l-2.47 2.47h18.879l-2.47-2.47c-.142-.141-.22-.33-.22-.53s.078-.389.22-.53c.142-.141.33-.22.53-.22s.389.078.53.22l3.75 3.75c.07.07.125.152.163.245l.01.026c.032.081.048.17.048.259 0 .087-.016.174-.047.258l-.006.016c-.042.104-.098.187-.168.257l-3.749 3.749c-.141.142-.33.22-.53.22z\" />\n </svg>`,\n external: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.251 16.498c-.2 0-.389-.078-.53-.22-.292-.292-.292-.768 0-1.061l13.72-13.72h-4.939c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6.75c.089 0 .176.016.261.048l.032.012c.176.072.324.221.4.404l.01.026c.031.081.047.17.047.26v6.75c0 .414-.336.75-.75.75s-.75-.336-.75-.75V2.559l-13.72 13.72c-.142.141-.331.219-.531.219z\" />\n <path d=\"M2.251 23.998c-1.241 0-2.25-1.009-2.25-2.25v-15c0-1.241 1.009-2.25 2.25-2.25h9c.414 0 .75.336.75.75s-.336.75-.75.75h-9c-.414 0-.75.336-.75.75v15c0 .414.336.75.75.75h15c.414 0 .75-.336.75-.75v-9c0-.414.336-.75.75-.75s.75.336.75.75v9c0 1.241-1.009 2.25-2.25 2.25h-15z\" />\n </g>\n </svg>`,\n flag: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M.75 24c-.414 0-.75-.336-.75-.75V.75C0 .336.336 0 .75 0s.75.336.75.75v1.88l2.184-.671c.988-.304 2.014-.458 3.047-.458 1.919 0 3.797.531 5.43 1.537 1.396.859 3.005 1.313 4.651 1.313.823 0 1.64-.114 2.428-.339l2.369-.677c.167-.047.339-.072.512-.072.502 0 .973.195 1.327.548.356.353.552.824.552 1.325v11.728c0 .833-.559 1.574-1.36 1.803l-2.987.854c-.921.262-1.874.395-2.833.395-1.928 0-3.811-.532-5.445-1.54-1.397-.86-3.003-1.314-4.644-1.314-.884 0-1.761.132-2.606.392l-2.625.808v4.988c0 .414-.336.75-.75.75zm5.981-8.438c1.919 0 3.796.531 5.43 1.537 1.399.862 3.01 1.317 4.659 1.317.821 0 1.635-.114 2.421-.337l2.987-.854c.16-.046.272-.194.272-.361V5.137c0-.1-.039-.194-.11-.265-.071-.071-.165-.11-.266-.11-.035 0-.07.005-.104.014l-2.368.677c-.922.263-1.878.397-2.84.397-1.925 0-3.806-.531-5.438-1.535-1.397-.86-3.003-1.314-4.644-1.314-.884 0-1.761.132-2.606.392L1.5 4.199v12.494l2.184-.672c.988-.304 2.013-.459 3.047-.459z\" transform=\"translate(-449 -3428) translate(449 3428)\"/>\n </svg>`,\n fullscreen: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M.75 23.998c-.088 0-.175-.016-.26-.047l-.022-.008c-.188-.077-.336-.226-.412-.41l-.009-.023c-.03-.082-.047-.171-.047-.262v-6.75c0-.414.336-.75.75-.75s.75.336.75.75v4.939l7.72-7.72c.142-.142.33-.22.53-.22s.389.078.53.22c.142.142.22.33.22.53s-.078.389-.22.53l-7.72 7.72H7.5c.414 0 .75.336.75.75s-.336.75-.75.75H.75v.001zM14.25 10.498c-.2 0-.389-.078-.53-.22-.142-.141-.22-.33-.22-.53s.078-.389.22-.53l7.72-7.72H16.5c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6.75c.089 0 .176.016.261.048l.032.012c.176.072.324.221.4.404l.01.026c.031.082.047.171.047.26v6.75c0 .414-.336.75-.75.75s-.75-.336-.75-.75V2.559l-7.72 7.72c-.141.141-.33.219-.53.219z\" />\n </g>\n </svg>`,\n happy: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n <circle cx=\"8.25\" cy=\"9\" r=\"1.125\" />\n <circle cx=\"15.75\" cy=\"9\" r=\"1.125\" />\n <path d=\"M11.986 19.503a7.412 7.412 0 0 1-3.319-.779 7.546 7.546 0 0 1-3.391-3.391.746.746 0 0 1 .339-1.005.745.745 0 0 1 1.005.339 6.032 6.032 0 0 0 2.713 2.713 5.933 5.933 0 0 0 2.653.623 5.977 5.977 0 0 0 5.389-3.336.745.745 0 0 1 1.005-.339.75.75 0 0 1 .339 1.005 7.463 7.463 0 0 1-6.733 4.17z\" />\n </g>\n </svg>`,\n information: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M13.5 17.25A2.252 2.252 0 0111.25 15v-3.75h-.75a.75.75 0 010-1.5h.75c.827 0 1.5.673 1.5 1.5V15c0 .414.336.75.75.75h.75a.75.75 0 010 1.5h-.75z\" />\n <circle cx=\"11.625\" cy=\"7.125\" r=\"1.125\" />\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n </g>\n </svg>`,\n invoice: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.75 24C1.509 24 .5 22.991.5 21.75V2.25C.5 1.009 1.509 0 2.75 0h10.629c.601 0 1.165.234 1.59.658l5.872 5.872c.425.425.659.99.659 1.59v13.63c0 1.241-1.009 2.25-2.25 2.25H2.75zm0-22.5c-.414 0-.75.336-.75.75v19.5c0 .414.336.75.75.75h16.5c.414 0 .75-.336.75-.75V9h-5.25c-1.241 0-2.25-1.009-2.25-2.25V1.5H2.75zM14 6.75c0 .414.336.75.75.75h4.939L14 1.811V6.75z\" transform=\"translate(-1025 -3428) translate(1025 3428) translate(1)\"/>\n <path d=\"M7.062 14.25c-.414 0-.75-.336-.75-.75v-.353c-.675-.153-1.285-.542-1.709-1.099-.121-.159-.173-.356-.146-.555.027-.198.129-.375.289-.496.131-.1.289-.153.454-.153.236 0 .454.108.597.296.277.364.716.581 1.175.581l.057-.001c.774 0 1.342-.421 1.342-.797 0-.376-.56-.796-1.309-.796-1.551 0-2.812-1.031-2.812-2.298 0-1.052.849-1.943 2.062-2.213V5.25c0-.414.336-.75.75-.75s.75.336.75.75v.356c.676.154 1.284.542 1.705 1.096.121.159.173.356.146.555-.027.199-.13.375-.289.496-.131.1-.288.153-.453.153-.233 0-.457-.111-.597-.296-.276-.364-.714-.581-1.17-.581l-.06.001c-.776.001-1.344.422-1.344.798 0 .377.561.798 1.312.798 1.549 0 2.809 1.03 2.809 2.296 0 1.05-.848 1.941-2.059 2.212v.366c0 .414-.336.75-.75.75zM11 15.75c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM5.75 20.25c-.414 0-.75-.336-.75-.75s.336-.75.75-.75H17c.414 0 .75.336.75.75s-.336.75-.75.75H5.75z\" transform=\"translate(-1025 -3428) translate(1025 3428) translate(1)\"/>\n </g>\n </svg>`,\n logout: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14.634 21.607c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h4.32c.398 0 .72-.323.72-.72v-1.44c0-.398.323-.72.72-.72.398 0 .72.322.72.72v1.44c0 1.191-.968 2.16-2.16 2.16h-4.32zM20.394 7.207c-.397 0-.72-.323-.72-.72v-1.44c0-.398-.322-.72-.72-.72h-4.32c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h4.32c1.192 0 2.16.968 2.16 2.16v1.44c0 .396-.323.72-.72.72zM11.033 23.046c-.068 0-.137-.005-.205-.016L2.19 21.797c-.705-.101-1.236-.713-1.237-1.425V3.58c0-.676.478-1.268 1.139-1.41L10.71.043c.112-.024.216-.035.32-.035.676 0 1.27.478 1.412 1.136.02.1.031.201.031.303v20.16c0 .385-.15.747-.422 1.018-.272.272-.634.422-1.019.422zM2.416 3.573l-.023.008.001 16.79 8.642 1.234-.002-20.16-8.618 2.128zM20.395 15.846c-.192 0-.373-.075-.509-.211-.135-.137-.21-.317-.21-.51 0-.191.074-.373.21-.508l1.652-1.651h-6.184c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h6.182l-1.652-1.651c-.136-.136-.21-.317-.21-.51 0-.191.074-.373.21-.508.137-.135.317-.211.51-.211.191 0 .373.075.508.211l2.881 2.88c.014.014.03.034.043.052.04.047.071.098.097.151.015.031.025.061.035.093.015.05.025.099.03.147.003.04.004.07.003.1-.003.06-.014.116-.032.178-.01.033-.02.06-.032.09-.025.055-.06.11-.102.16-.012.018-.027.034-.04.048l-2.88 2.88c-.136.134-.318.21-.51.21z\" transform=\"translate(-593 -3428) translate(593 3428)\"/>\n <path d=\"M8.514 12.607c-.595 0-1.08-.485-1.08-1.08 0-.55.408-1.008.953-1.073.042-.007.084-.011.127-.011.597.002 1.081.487 1.08 1.082 0 .595-.485 1.082-1.08 1.082z\" transform=\"translate(-593 -3428) translate(593 3428)\"/>\n </g>\n </svg>`,\n login: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.25 22.507C13.836 22.507 13.5 22.171 13.5 21.757C13.5 21.343 13.836 21.007 14.25 21.007H18.75C19.164 21.007 19.5 20.671 19.5 20.257V18.757C19.5 18.343 19.836 18.007 20.25 18.007C20.664 18.007 21 18.343 21 18.757V20.257C21 21.498 19.991 22.507 18.75 22.507H14.25Z\" />\n <path d=\"M20.25 7.50702C19.836 7.50702 19.5 7.17102 19.5 6.75702V5.25702C19.5 4.84302 19.164 4.50702 18.75 4.50702H14.25C13.836 4.50702 13.5 4.17102 13.5 3.75702C13.5 3.34302 13.836 3.00702 14.25 3.00702H18.75C19.991 3.00702 21 4.01602 21 5.25702V6.75702C21 7.17002 20.664 7.50702 20.25 7.50702Z\" />\n <path d=\"M10.499 24.006C10.428 24.006 10.356 24.001 10.285 23.99L1.288 22.705C0.553 22.601 0 21.963 0 21.22V3.728C0 3.025 0.498 2.408 1.186 2.261L10.163 0.0449956C10.28 0.0199956 10.388 0.00799561 10.495 0.00799561C11.2 0.00799561 11.819 0.505996 11.966 1.192C11.989 1.295 12 1.401 12 1.507V22.507C12 22.908 11.844 23.285 11.56 23.568C11.277 23.851 10.9 24.006 10.499 24.006ZM1.523 3.722L1.5 21.221C1.5 21.221 10.501 22.506 10.502 22.506L10.5 1.506L1.523 3.722Z\" />\n <path d=\"M18 16.506C17.8 16.506 17.611 16.428 17.47 16.286L14.47 13.286C14.457 13.273 14.444 13.258 14.432 13.242C14.377 13.179 14.336 13.113 14.307 13.042C14.301 13.027 14.296 13.012 14.292 12.997C14.269 12.929 14.257 12.859 14.253 12.786C14.252 12.761 14.253 12.737 14.255 12.714C14.26 12.642 14.272 12.58 14.292 12.521C14.301 12.493 14.31 12.467 14.323 12.44C14.358 12.361 14.407 12.288 14.47 12.226L17.47 9.22598C17.612 9.08398 17.8 9.00598 18 9.00598C18.2 9.00598 18.389 9.08398 18.53 9.22598C18.672 9.36698 18.75 9.55598 18.75 9.75598C18.75 9.95598 18.672 10.145 18.53 10.286L16.81 12.006H23.249C23.663 12.006 23.999 12.342 23.999 12.756C23.999 13.17 23.663 13.506 23.249 13.506H16.81L18.53 15.226C18.672 15.368 18.75 15.556 18.75 15.756C18.75 15.956 18.672 16.145 18.53 16.286C18.388 16.427 18.2 16.506 18 16.506Z\" />\n <path d=\"M7.875 13.132C7.255 13.132 6.75 12.627 6.75 12.007C6.75 11.434 7.175 10.957 7.742 10.89C7.786 10.882 7.83 10.878 7.875 10.878C8.177 10.879 8.46 10.997 8.672 11.209C8.884 11.422 9.001 11.705 9 12.005C9 12.626 8.495 13.132 7.875 13.132Z\" />\n </svg>`,\n more: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\" transform=\"translate(-641 -3428) translate(641 3428)\">\n <g fill-rule=\"nonzero\" transform=\"translate(3 9)\">\n <circle cx=\"2.438\" cy=\"3\" r=\"2.438\"/>\n <circle cx=\"9\" cy=\"3\" r=\"2.438\"/>\n <circle cx=\"15.563\" cy=\"3\" r=\"2.438\"/>\n </g>\n </g>\n </svg>`,\n notificationOn: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_26141_2697)\">\n <path d=\"M11.99 24.001C11.52 24.001 11.051 23.881 10.634 23.653C9.96901 23.29 9.48501 22.689 9.27201 21.962C9.15501 21.565 9.38301 21.148 9.78001 21.031C9.84901 21.011 9.92001 21.001 9.99101 21.001C10.321 21.001 10.617 21.222 10.711 21.539C10.812 21.882 11.04 22.165 11.353 22.337C11.55 22.444 11.77 22.501 11.991 22.501C12.118 22.501 12.246 22.482 12.37 22.446C12.808 22.317 13.147 21.978 13.276 21.54C13.369 21.223 13.665 21.001 13.996 21.001C14.067 21.001 14.137 21.011 14.206 21.031C14.603 21.148 14.832 21.565 14.715 21.962C14.442 22.893 13.723 23.612 12.792 23.885C12.53 23.962 12.26 24.001 11.99 24.001Z\" />\n <path d=\"M2.99099 19.501C2.70599 19.501 2.44199 19.336 2.31699 19.08C2.18999 18.82 2.22299 18.517 2.39999 18.289C2.40599 18.28 3.74099 16.35 3.74099 10.501C3.74099 6.20801 7.00699 2.66601 11.241 2.28501V0.751007C11.241 0.337007 11.577 0.00100708 11.991 0.00100708C12.405 0.00100708 12.741 0.337007 12.741 0.751007V2.28501C16.975 2.66601 20.241 6.20801 20.241 10.501C20.241 16.804 21.487 18.187 21.499 18.2C21.717 18.399 21.796 18.732 21.686 19.018C21.572 19.311 21.299 19.501 20.991 19.501H2.99099ZM19.701 18.001C19.219 16.769 18.74 14.531 18.74 10.501C18.74 6.77901 15.712 3.75101 11.99 3.75101C8.26799 3.75101 5.23999 6.77901 5.23999 10.501C5.23999 14.458 4.65999 16.778 4.19399 18.001H19.701Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_26141_2697\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n notificationOff: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.50101 24C1.30101 24 1.11201 23.922 0.971007 23.78C0.829007 23.638 0.751007 23.45 0.751007 23.25C0.751007 23.05 0.829007 22.861 0.971007 22.72L21.971 1.72C22.113 1.578 22.301 1.5 22.501 1.5C22.701 1.5 22.89 1.578 23.031 1.72C23.173 1.861 23.251 2.05 23.251 2.25C23.251 2.45 23.173 2.639 23.031 2.78L2.03101 23.78C1.89001 23.922 1.70101 24 1.50101 24Z\" />\n <path d=\"M11.999 24.001C11.529 24.001 11.06 23.881 10.643 23.653C9.978 23.29 9.494 22.689 9.281 21.962C9.165 21.565 9.393 21.147 9.79 21.031C9.858 21.01 9.929 21 10 21C10.33 21 10.626 21.221 10.719 21.538C10.82 21.881 11.048 22.164 11.361 22.335C11.558 22.443 11.779 22.5 12 22.5C12.127 22.5 12.255 22.481 12.379 22.445C12.818 22.316 13.156 21.978 13.285 21.539C13.379 21.221 13.675 21 14.005 21C14.076 21 14.146 21.01 14.214 21.03C14.612 21.147 14.84 21.564 14.724 21.961C14.451 22.892 13.732 23.611 12.801 23.884C12.539 23.962 12.269 24.001 11.999 24.001Z\" />\n <path d=\"M10.5 19.5C10.086 19.5 9.75 19.164 9.75 18.75C9.75 18.336 10.086 18 10.5 18H19.71C19.228 16.768 18.75 14.531 18.75 10.5C18.74 10.253 18.711 9.974 18.667 9.708C18.634 9.511 18.68 9.312 18.797 9.149C18.914 8.986 19.087 8.878 19.284 8.845C19.324 8.838 19.367 8.834 19.409 8.834C19.776 8.834 20.087 9.098 20.147 9.462C20.202 9.794 20.237 10.134 20.25 10.471C20.25 16.629 21.405 18.082 21.49 18.181C21.723 18.381 21.811 18.706 21.709 18.998C21.603 19.298 21.319 19.5 21 19.5H10.5Z\" />\n <path d=\"M4.5 16.5C4.086 16.5 3.75 16.164 3.75 15.75V10.5C3.751 8.843 4.244 7.243 5.174 5.872C6.412 4.049 8.285 2.816 10.45 2.402C10.712 2.352 10.981 2.314 11.252 2.289V0.75C11.252 0.336 11.588 0 12.002 0C12.416 0 12.752 0.336 12.752 0.75V2.288C14.136 2.413 15.472 2.891 16.634 3.68C16.976 3.912 17.065 4.379 16.833 4.722C16.694 4.928 16.462 5.051 16.212 5.051C16.062 5.051 15.916 5.006 15.791 4.922C14.665 4.158 13.36 3.755 12.015 3.755C11.588 3.755 11.156 3.796 10.732 3.877C8.96 4.215 7.427 5.223 6.415 6.715C5.654 7.836 5.251 9.145 5.25 10.501V15.751C5.25 16.164 4.914 16.5 4.5 16.5Z\" />\n </svg>`,\n phone: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M18.262 23.077c-1.145 0-2.267-.329-3.247-.952l-.027-.017c-5.178-3.5-9.576-7.9-13.075-13.078C.372 6.607.705 3.513 2.72 1.498l.743-.743c.47-.47 1.095-.728 1.761-.728.667 0 1.292.258 1.761.728l3.131 3.135c.97.971.97 2.55-.001 3.52-.41.41-.41 1.077 0 1.487l5.023 5.024c.186.184.45.294.73.294.28 0 .544-.11.742-.307.47-.47 1.095-.73 1.762-.73.666 0 1.29.26 1.761.729l3.13 3.13c.971.97.971 2.55 0 3.521l-.742.743c-1.146 1.146-2.659 1.776-4.259 1.776zm-2.478-2.17c.766.48 1.616.728 2.48.728 1.216 0 2.365-.48 3.237-1.352l.743-.743c.41-.41.41-1.077 0-1.487l-3.13-3.129c-.197-.198-.461-.306-.742-.306-.282 0-.546.11-.744.307-.469.47-1.095.729-1.76.729-.662 0-1.284-.256-1.751-.72l-5.02-5.02c-.97-.972-.97-2.552 0-3.522.408-.408.41-1.074.002-1.484l-.026-.026-3.107-3.11c-.197-.197-.461-.305-.742-.305-.281 0-.545.11-.744.307l-.743.742C2.204 4.05 1.946 6.4 3.11 8.23c3.39 5.016 7.654 9.284 12.674 12.679z\" transform=\"translate(-689 -3428) translate(689 3428)\"/>\n </svg>`,\n pin: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M10 15.003c-2.895 0-5.25-2.355-5.25-5.25s2.355-5.25 5.25-5.25 5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9c-2.068 0-3.75 1.682-3.75 3.75s1.682 3.75 3.75 3.75 3.75-1.682 3.75-3.75-1.682-3.75-3.75-3.75z\" transform=\"translate(-1169 -3428) translate(1169 3428) translate(2)\"/>\n <path d=\"M9.999 23.901c-.261 0-.518-.068-.743-.197-.875-.5-3.126-1.911-5.142-4.209C1.55 16.573.25 13.295.25 9.752.25 4.376 4.624.002 10 .002s9.75 4.374 9.75 9.75c0 3.544-1.3 6.822-3.865 9.744-2.017 2.299-4.268 3.708-5.142 4.208-.225.129-.483.197-.744.197zM10 1.503c-4.549 0-8.25 3.701-8.25 8.25 0 1.861.595 8.272 8.25 12.649 7.655-4.372 8.25-10.787 8.25-12.649 0-4.549-3.701-8.25-8.25-8.25z\" transform=\"translate(-1169 -3428) translate(1169 3428) translate(2)\"/>\n </g>\n </svg>`,\n power: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M10 11.996c-.414 0-.75-.336-.75-.75v-9.75c0-.414.336-.75.75-.75s.75.336.75.75v9.75c0 .413-.336.75-.75.75z\" transform=\"translate(-737 -3428) translate(737 3428) translate(2)\"/>\n <path d=\"M10.008 23.245c-4.128 0-7.826-2.613-9.2-6.501-1.792-5.069.873-10.65 5.942-12.442.081-.029.165-.044.25-.044.317 0 .601.201.707.5.067.189.056.392-.03.573-.086.182-.238.318-.427.385C2.961 7.232.706 11.955 2.222 16.244c1.163 3.29 4.292 5.501 7.786 5.5.933 0 1.855-.159 2.742-.472 4.289-1.517 6.544-6.24 5.028-10.528-.835-2.361-2.668-4.194-5.028-5.028-.189-.067-.341-.203-.427-.384-.086-.181-.097-.384-.03-.573.106-.299.39-.5.707-.5.086 0 .17.015.251.043 2.789.986 4.955 3.152 5.942 5.942 1.792 5.069-.874 10.65-5.942 12.442-1.048.371-2.138.558-3.243.559.001 0 0 0 0 0z\" transform=\"translate(-737 -3428) translate(737 3428) translate(2)\"/>\n </g>\n </svg>`,\n question: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(-785 -3428) translate(785 3428)\">\n <path d=\"M12 15c-.414 0-.75-.336-.75-.75v-1.006c-.001-.952.602-1.805 1.5-2.122.897-.317 1.5-1.17 1.5-2.121 0-.601-.234-1.166-.659-1.591-.424-.425-.989-.659-1.591-.659-.601 0-1.166.234-1.591.659-.425.424-.659.989-.659 1.59 0 .413-.336.75-.75.75s-.75-.337-.75-.75c0-1.002.391-1.943 1.099-2.651.708-.708 1.65-1.098 2.651-1.098 2.068 0 3.75 1.683 3.75 3.75 0 1.586-1.005 3.006-2.5 3.535-.299.106-.5.39-.5.707v1.007c0 .414-.336.75-.75.75z\"/>\n <circle cx=\"12\" cy=\"17.625\" r=\"1.125\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\"/>\n </g>\n </g>\n </svg>`,\n settings: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.156 23.988c-.676 0-1.323-.25-1.822-.704-.598-.544-.92-1.32-.883-2.128l.072-1.404c.034-.665-.479-1.234-1.144-1.269l-.062-.002c-.021 0-.041 0-.062.002l-1.401.071c-.047.002-.096.004-.144.004-.668 0-1.311-.247-1.809-.696-.537-.484-.854-1.148-.892-1.871-.043-.817.281-1.6.887-2.149l1.042-.94c.239-.216.38-.513.397-.836.016-.323-.094-.633-.31-.873-.027-.03-.056-.059-.087-.087L.896 10.16C.36 9.674.046 9.009.011 8.286c-.036-.722.213-1.415.699-1.951.512-.565 1.242-.889 2.002-.889.044 0 .089.001.133.003l1.402.071c.021.002.063.002.063.002.644 0 1.174-.503 1.208-1.144.002-.042.002-.085 0-.127l-.067-1.406C5.381 1.352 6.538.081 8.03.011l.129-.003c.76 0 1.489.323 2.001.886l.941 1.039c.217.241.513.382.835.399l.066.002c.301 0 .579-.107.805-.31.031-.028.06-.057.087-.088l.95-1.042c.483-.535 1.148-.85 1.871-.887l.136-.003c.673 0 1.319.248 1.818.699.607.548.931 1.331.889 2.148l-.071 1.4c-.033.665.481 1.233 1.146 1.267l.061.002.057-.001 1.4-.071.138-.003c.672 0 1.316.249 1.815.702.536.486.851 1.152.887 1.874.04.815-.284 1.596-.889 2.143l-1.042.94c-.239.216-.38.513-.396.836-.017.323.094.633.31.872.028.031.056.06.086.086l1.042.941c.537.485.853 1.15.89 1.873.037.723-.21 1.417-.695 1.953-.513.567-1.247.892-2.015.892l-.131-.003-1.402-.071-.066-.002c-.302 0-.58.108-.806.311-.24.216-.381.512-.397.835-.002.041-.002.083 0 .125l.071 1.4c.032.725-.219 1.418-.708 1.953-.489.535-1.156.847-1.878.879-.043.002-.088.003-.133.003-.75 0-1.474-.321-1.986-.88l-.944-1.044c-.229-.253-.556-.398-.899-.398-.3 0-.587.11-.809.311-.03.027-.06.056-.087.087l-.946 1.042c-.512.561-1.243.883-2.005.883zm-3.839-7.006c.046 0 .092.001.138.004 1.492.077 2.643 1.353 2.566 2.844l-.072 1.4c-.016.357.127.703.394.946.226.206.507.314.812.314l.059-.001c.322-.015.62-.155.837-.394l.944-1.04c.06-.067.125-.132.193-.194.499-.45 1.143-.698 1.815-.698.766 0 1.499.325 2.012.892l.941 1.041c.226.247.552.389.896.389l.049-.001c.664-.03 1.182-.596 1.152-1.262l-.071-1.395c-.005-.092-.005-.185 0-.278.037-.722.353-1.387.89-1.871.499-.45 1.141-.698 1.809-.698.048 0 .096.001.145.004l1.399.071.069.002c.336 0 .66-.145.889-.399.217-.24.327-.55.311-.872-.016-.323-.157-.619-.397-.836l-1.042-.94c-.068-.061-.133-.126-.195-.195-1.001-1.108-.914-2.825.195-3.827l1.042-.94c.27-.244.414-.592.396-.956-.016-.323-.156-.62-.396-.837-.223-.202-.51-.313-.809-.313l-.062.002-1.399.071c-.044.002-.089.003-.133.003-.046 0-.092-.001-.137-.004-1.491-.075-2.643-1.349-2.568-2.84l.071-1.401c.019-.365-.126-.714-.397-.958-.226-.205-.503-.312-.802-.312l-.068.002c-.324.016-.621.157-.837.397l-.948 1.04c-.059.066-.126.133-.196.196-.498.449-1.142.696-1.814.696l-.138-.003c-.723-.038-1.387-.354-1.871-.891L9.05 1.902c-.228-.25-.554-.394-.894-.394l-.057.001c-.665.031-1.181.599-1.15 1.265l.067 1.4c.005.091.005.187 0 .283-.076 1.438-1.264 2.565-2.705 2.565-.047 0-.094-.001-.141-.004l-1.399-.07-.057-.002c-.339 0-.665.145-.893.396-.217.239-.328.548-.312.87.016.322.156.619.395.836l1.041.945c.067.061.132.125.193.194 1.001 1.109.914 2.826-.195 3.827l-1.041.94c-.27.244-.414.594-.395.958.017.322.158.619.398.835.222.2.509.31.807.31.021 0 .043 0 .064-.002l1.401-.071.14-.002z\" transform=\"translate(-833 -3428) translate(833 3428)\"/>\n <path d=\"M12 17.25c-2.895 0-5.25-2.355-5.25-5.25S9.105 6.75 12 6.75s5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9c-2.068 0-3.75 1.682-3.75 3.75s1.682 3.75 3.75 3.75 3.75-1.682 3.75-3.75S14.068 8.25 12 8.25z\" transform=\"translate(-833 -3428) translate(833 3428)\"/>\n </g>\n </svg>`,\n service: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\" transform=\"translate(-1073 -3428) translate(1073 3428)\">\n <path d=\"M12.75 24c-1.241 0-2.25-1.009-2.25-2.25v-9c0-1.241 1.009-2.25 2.25-2.25h9c1.241 0 2.25 1.009 2.25 2.25v9c0 1.241-1.009 2.25-2.25 2.25h-9zm0-12c-.414 0-.75.336-.75.75v9c0 .414.336.75.75.75h9c.414 0 .75-.336.75-.75v-9c0-.414-.336-.75-.75-.75h-9z\"/>\n <path d=\"M14.25 15c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM14.25 18c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM14.25 21c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h2.25c.414 0 .75.336.75.75s-.336.75-.75.75h-2.25zM6 7.5c-2.068 0-3.75-1.682-3.75-3.75S3.932 0 6 0s3.75 1.682 3.75 3.75S8.068 7.5 6 7.5zm0-6c-1.241 0-2.25 1.009-2.25 2.25S4.759 6 6 6s2.25-1.009 2.25-2.25S7.241 1.5 6 1.5zM3.75 24c-.387 0-.708-.29-.746-.675L2.321 16.5H.75c-.414 0-.75-.336-.75-.75V13.5c0-1.473.54-2.891 1.52-3.99 1.066-1.197 2.534-1.907 4.134-2 .119-.007.237-.01.355-.01 1.467 0 2.882.54 3.982 1.52.309.275.336.75.061 1.059-.142.16-.346.251-.56.251-.184 0-.361-.068-.499-.19C8.168 9.405 7.106 9 6.003 9c-.087 0-.175.003-.263.008-1.2.069-2.301.602-3.1 1.499-.735.825-1.14 1.888-1.14 2.993V15H3c.387 0 .708.29.746.675l.683 6.825h3.142l.191-1.91c.038-.385.358-.676.743-.676.027 0 .054.001.082.004.408.041.709.409.668.82l-.258 2.585c-.039.387-.36.677-.747.677h-4.5z\"/>\n </g>\n </svg>`,\n sort: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21.5005C11.6684 21.5009 11.3526 21.3585 11.1335 21.1096L6.21658 15.5207C5.89336 15.1355 5.93676 14.5627 6.31433 14.2306C6.6919 13.8985 7.26552 13.9286 7.6063 14.2983L11.9058 19.1857C11.9296 19.2128 11.9639 19.2284 12 19.2284C12.0361 19.2284 12.0704 19.2128 12.0942 19.1857L16.3937 14.2983C16.7345 13.9286 17.3081 13.8985 17.6857 14.2306C18.0632 14.5627 18.1066 15.1355 17.7834 15.5207L12.868 21.1076C12.6485 21.3571 12.3323 21.5002 12 21.5005Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.5002C12.3316 2.49979 12.6474 2.64223 12.8665 2.89111L17.7834 8.48008C18.1066 8.86527 18.0632 9.43804 17.6857 9.77013C17.3081 10.1022 16.7345 10.0722 16.3937 9.70242L12.0942 4.81507C12.0704 4.78793 12.0361 4.77237 12 4.77237C11.9639 4.77237 11.9296 4.78793 11.9058 4.81507L7.6063 9.70242C7.26552 10.0722 6.6919 10.1022 6.31433 9.77013C5.93676 9.43804 5.89336 8.86527 6.21658 8.48008L11.132 2.89311C11.3515 2.64363 11.6677 2.50052 12 2.5002Z\" />\n </svg>`,\n ascending: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.24947C12.3316 2.24906 12.6474 2.39149 12.8665 2.64038L17.7834 8.22935C18.1066 8.61454 18.0632 9.18731 17.6857 9.5194C17.3081 9.85148 16.7345 9.82142 16.3937 9.45168L12.0942 4.56434C12.0704 4.5372 12.0361 4.52164 12 4.52164C11.9639 4.52164 11.9296 4.5372 11.9058 4.56434L7.6063 9.45168C7.26552 9.82142 6.6919 9.85148 6.31433 9.5194C5.93676 9.18731 5.89336 8.61454 6.21658 8.22935L11.132 2.64238C11.3515 2.3929 11.6677 2.24978 12 2.24947Z\" />\n </svg>\n `,\n descending: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21.7505C11.6684 21.7509 11.3526 21.6085 11.1335 21.3596L6.21658 15.7707C5.89336 15.3855 5.93676 14.8127 6.31433 14.4806C6.6919 14.1485 7.26552 14.1786 7.6063 14.5483L11.9058 19.4357C11.9296 19.4628 11.9639 19.4784 12 19.4784C12.0361 19.4784 12.0704 19.4628 12.0942 19.4357L16.3937 14.5483C16.7345 14.1786 17.3081 14.1485 17.6857 14.4806C18.0632 14.8127 18.1066 15.3855 17.7834 15.7707L12.868 21.3576C12.6485 21.6071 12.3323 21.7502 12 21.7505Z\" />\n </svg>\n `,\n switchUser: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.5 22.5C13.086 22.5 12.75 22.164 12.75 21.75C12.75 21.336 13.086 21 13.5 21C18.463 21 22.5 16.963 22.5 12C22.5 7.037 18.463 3 13.5 3C8.954 3 5.139 6.447 4.575 10.865L6.22 9.22C6.361 9.078 6.55 9 6.75 9C6.95 9 7.139 9.078 7.28 9.22C7.422 9.361 7.5 9.55 7.5 9.75C7.5 9.95 7.422 10.139 7.28 10.28L4.28 13.28C4.21 13.35 4.127 13.405 4.034 13.444C4.026 13.447 4.017 13.451 4.007 13.454C3.923 13.485 3.837 13.5 3.75 13.5C3.662 13.5 3.575 13.484 3.49 13.453C3.482 13.45 3.475 13.448 3.468 13.445C3.372 13.406 3.289 13.351 3.219 13.28L0.22 10.28C0.078 10.139 0 9.95 0 9.75C0 9.55 0.078 9.361 0.22 9.22C0.361 9.078 0.55 9 0.75 9C0.95 9 1.139 9.078 1.28 9.22L3.051 10.991C3.564 5.685 8.084 1.5 13.5 1.5C19.29 1.5 24 6.21 24 12C24 17.79 19.29 22.5 13.5 22.5Z\"/>\n <path d=\"M8.52001 18C8.33801 18 8.16201 17.933 8.02501 17.813C7.71501 17.54 7.68401 17.065 7.95701 16.754C8.16401 16.519 8.38601 16.297 8.61901 16.092C9.96801 14.904 11.7 14.249 13.494 14.249C13.651 14.249 13.809 14.254 13.967 14.264C15.936 14.389 17.739 15.273 19.043 16.754C19.316 17.064 19.286 17.539 18.976 17.813C18.839 17.934 18.663 18 18.48 18C18.264 18 18.059 17.907 17.917 17.746C16.878 16.566 15.441 15.861 13.872 15.762C13.744 15.754 13.616 15.75 13.489 15.75C12.063 15.75 10.685 16.272 9.60901 17.219C9.42401 17.382 9.24601 17.559 9.08201 17.746C8.94101 17.907 8.73501 18 8.52001 18Z\"/>\n <path d=\"M13.5 15C11.019 15 9 12.981 9 10.5C9 8.019 11.019 6 13.5 6C15.981 6 18 8.019 18 10.5C18 12.981 15.981 15 13.5 15ZM13.5 7.5C11.846 7.5 10.5 8.846 10.5 10.5C10.5 12.154 11.846 13.5 13.5 13.5C15.154 13.5 16.5 12.154 16.5 10.5C16.5 8.846 15.154 7.5 13.5 7.5Z\"/>\n </svg>`,\n subtractCircle: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 12.75C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H7.5Z\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n </svg>`,\n success: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"49\" height=\"48\" viewBox=\"0 0 49 48\">\n <g fill-rule=\"evenodd\">\n <path d=\"M22.844 30.98a2.61 2.61 0 01-1.856-.768l-5.072-5.073a1.039 1.039 0 111.47-1.466l5.071 5.073a.551.551 0 00.833-.062l8.453-11.269a1.04 1.04 0 011.453-.207 1.037 1.037 0 01.208 1.453L24.952 29.93a2.65 2.65 0 01-2.108 1.05z\" />\n <path d=\"M24.606 48a4.332 4.332 0 01-3.377-1.624l-3.084-3.841a2.319 2.319 0 00-2.071-.858l-4.902.534a4.266 4.266 0 01-3.181-.93 4.303 4.303 0 01-1.594-2.905 4.344 4.344 0 010-.94l.534-4.903a2.318 2.318 0 00-.858-2.068l-3.84-3.084a4.335 4.335 0 010-6.759l3.842-3.087c.624-.5.946-1.274.858-2.07l-.534-4.9a4.304 4.304 0 01.93-3.184 4.305 4.305 0 013.376-1.616c.156 0 .312.008.465.024l4.906.534a2.32 2.32 0 002.07-.856l3.085-3.845A4.311 4.311 0 0124.614 0a4.337 4.337 0 013.377 1.624l3.088 3.843a2.308 2.308 0 002.069.856l4.904-.534a4.326 4.326 0 014.771 3.851c.032.31.032.62 0 .926l-.534 4.903a2.324 2.324 0 00.858 2.07l3.843 3.088a4.3 4.3 0 011.596 2.905 4.308 4.308 0 01-.926 3.184c-.196.244-.422.47-.67.67l-3.843 3.089a2.314 2.314 0 00-.858 2.068l.534 4.903a4.332 4.332 0 01-4.774 4.773l-4.903-.534a2.314 2.314 0 00-2.069.858l-3.086 3.84A4.329 4.329 0 0124.606 48zm-8.274-8.337c1.315 0 2.545.59 3.373 1.618l3.085 3.843a2.305 2.305 0 001.818.874c.714 0 1.378-.318 1.822-.874l3.085-3.839a4.304 4.304 0 013.843-1.594l4.904.534a2.122 2.122 0 00.505 0 2.332 2.332 0 002.064-2.57l-.534-4.902a4.312 4.312 0 011.594-3.844l3.841-3.087a2.315 2.315 0 00.862-2.076 2.32 2.32 0 00-.858-1.564l-3.843-3.087a4.31 4.31 0 01-1.594-3.846l.534-4.9a2.327 2.327 0 00-2.568-2.57l-4.9.532a4.31 4.31 0 01-3.844-1.59l-3.09-3.845a2.305 2.305 0 00-1.817-.874c-.714 0-1.378.318-1.822.874l-3.087 3.843a4.311 4.311 0 01-3.847 1.592l-4.903-.534a2.542 2.542 0 00-.498.002 2.307 2.307 0 00-1.568.856 2.305 2.305 0 00-.502 1.713l.534 4.901a4.315 4.315 0 01-1.594 3.846l-3.843 3.087a2.323 2.323 0 00-.86 2.076c.068.62.374 1.176.858 1.564l3.843 3.085a4.304 4.304 0 011.594 3.844l-.534 4.903a2.31 2.31 0 00.858 2.069 2.302 2.302 0 001.714.5l4.903-.534c.158-.018.314-.026.472-.026z\" />\n </g>\n </svg>`,\n upload: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 18c-.414 0-.75-.336-.75-.75V7.811l-2.47 2.47c-.142.142-.33.22-.53.22s-.389-.078-.53-.22c-.142-.142-.22-.331-.22-.531s.078-.389.22-.53l3.749-3.749c.07-.07.152-.125.245-.163l.025-.009c.086-.033.173-.049.261-.049.089 0 .177.016.261.048l.02.007c.097.04.179.095.25.166L16.28 9.22c.142.141.22.33.22.53s-.078.389-.22.53c-.142.141-.33.22-.53.22s-.389-.078-.53-.22l-2.47-2.47v9.439c0 .415-.336.751-.75.751z\" transform=\"translate(-881 -3428) translate(881 3428)\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" transform=\"translate(-881 -3428) translate(881 3428)\"/>\n </g>\n </svg>`,\n viewOff: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.78324 20.5C2.58024 20.5 2.38324 20.416 2.24224 20.27C2.10324 20.125 2.02924 19.936 2.03309 19.735C2.03724 19.535 2.11924 19.348 2.26424 19.209L21.0142 1.209C21.1542 1.074 21.3392 1 21.5332 1C21.7362 1 21.9332 1.084 22.0742 1.231C22.2132 1.375 22.2872 1.565 22.2834 1.766C22.2792 1.966 22.1972 2.153 22.0532 2.292L3.30324 20.292C3.16224 20.426 2.97724 20.5 2.78324 20.5Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.9882 19L11.8782 19.001C10.8302 19.001 9.77523 18.838 8.74123 18.518C8.34623 18.395 8.12523 17.974 8.24723 17.58C8.34523 17.264 8.63323 17.052 8.96423 17.052C9.03923 17.052 9.11423 17.063 9.18623 17.086C10.0742 17.362 10.9862 17.502 11.8952 17.502L12.1442 17.503C15.9972 17.503 19.9002 14.717 22.2692 12.11C22.5812 11.764 22.5812 11.239 22.2672 10.89C21.3762 9.91201 20.3802 9.01901 19.3082 8.23701C19.1462 8.11901 19.0402 7.94501 19.0092 7.74701C18.9782 7.54901 19.0262 7.35101 19.1442 7.18901C19.2852 6.99601 19.5112 6.88101 19.7502 6.88101C19.9092 6.88101 20.0622 6.93101 20.1922 7.02501C21.3452 7.86601 22.4172 8.82801 23.3792 9.88301C24.2112 10.806 24.2112 12.195 23.3822 13.116C20.7962 15.962 16.4872 19.002 12.1452 19.002L11.9882 19Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.77824 15.761C3.61224 15.761 3.44924 15.705 3.31824 15.603C2.35524 14.855 1.44924 14.019 0.625239 13.117C-0.206761 12.193 -0.207761 10.804 0.622239 9.88299C3.20824 7.03799 7.51824 3.99899 11.8582 3.99899L12.0952 3.99999C12.9412 3.99999 13.7822 4.10199 14.5952 4.30499C14.9962 4.40499 15.2412 4.81199 15.1422 5.21399C15.0592 5.54899 14.7592 5.78299 14.4142 5.78299C14.3532 5.78299 14.2922 5.77499 14.2322 5.76099C13.5382 5.58799 12.8222 5.50099 12.1032 5.50099H11.8742C8.01124 5.50099 4.10324 8.28599 1.73424 10.892C1.42224 11.238 1.42224 11.763 1.73624 12.112C2.49924 12.947 3.34224 13.725 4.23924 14.422C4.39724 14.545 4.49824 14.722 4.52324 14.921C4.54824 15.12 4.49424 15.316 4.37124 15.474C4.22824 15.655 4.01224 15.761 3.77824 15.761Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.25024 12.25C7.83724 12.25 7.50024 11.914 7.50024 11.5C7.50024 10.3 7.96824 9.171 8.81824 8.32C9.66824 7.469 10.7972 7 11.9972 7C12.2042 7 12.3712 7.167 12.3722 7.374L12.3742 8.124C12.3742 8.224 12.3352 8.319 12.2652 8.39C12.1952 8.461 12.1002 8.5 12.0002 8.5C11.1992 8.5 10.4462 8.813 9.87924 9.38C9.31224 9.947 9.00024 10.7 9.00024 11.5C9.00024 11.7 8.92224 11.888 8.78124 12.03C8.63924 12.172 8.45024 12.25 8.25024 12.25Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.0012 16C11.7942 16 11.6262 15.833 11.6262 15.625L11.6252 14.875C11.6252 14.776 11.6642 14.68 11.7352 14.61C11.8052 14.539 11.9012 14.5 12.0002 14.5C12.8022 14.5 13.5552 14.188 14.1222 13.621C14.6882 13.054 15.0002 12.3 15.0002 11.499C15.0002 11.085 15.3362 10.749 15.7502 10.749C16.1642 10.749 16.5002 11.085 16.5002 11.499C16.5002 12.701 16.0332 13.831 15.1832 14.681C14.3332 15.531 13.2032 16 12.0012 16Z\"/>\n </svg>`,\n viewOn: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.843 18.999C7.50999 18.999 3.20699 15.959 0.623989 13.115C-0.207011 12.192 -0.207012 10.803 0.621988 9.883C3.20599 7.038 7.51399 4 11.856 4C11.907 4 11.956 4 12.007 4.001C12.049 4 12.104 4 12.16 4C16.488 4 20.794 7.038 23.379 9.881C24.21 10.804 24.211 12.193 23.381 13.114C20.795 15.96 16.484 19 12.136 19L11.987 18.999H11.843ZM11.854 5.499C8.00299 5.499 4.10099 8.283 1.73399 10.889C1.42199 11.235 1.42199 11.76 1.73599 12.109C4.10199 14.714 8.00299 17.499 11.856 17.499L11.987 17.498L12.123 17.499C15.99 17.499 19.899 14.714 22.268 12.107C22.58 11.761 22.58 11.236 22.266 10.887C19.898 8.283 15.994 5.5 12.143 5.5C12.143 5.5 11.989 5.501 11.987 5.501L11.854 5.499Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.999 15.998C10.797 15.998 9.66699 15.529 8.81699 14.679C7.96699 13.829 7.49899 12.699 7.49999 11.497C7.49999 9.01599 9.51899 6.99799 12 6.99799C13.202 6.99799 14.332 7.46599 15.182 8.31499C16.032 9.16499 16.5 10.294 16.5 11.496C16.5 12.702 16.031 13.831 15.181 14.681C14.331 15.53 13.202 15.998 12 15.998H11.999ZM12.001 8.49799C10.347 8.49799 9.00099 9.84299 9.00099 11.497C9.00099 12.298 9.31299 13.052 9.87899 13.618C10.446 14.185 11.199 14.497 12 14.497C12.802 14.497 13.555 14.185 14.121 13.619C14.687 13.053 15 12.299 15 11.498C15 10.694 14.688 9.94099 14.121 9.37499C13.555 8.80999 12.802 8.49799 12.001 8.49799Z\"/>\n </svg>`,\n warning: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path d=\"M23.759 20.51L13.874 1.633C13.509.937 12.787.5 12 .5c-.787 0-1.509.437-1.874 1.133L.241 20.51c-.343.656-.319 1.443.065 2.076.383.634 1.07 1.02 1.81 1.02h19.769c.74 0 1.426-.386 1.81-1.02.383-.633.407-1.42.064-2.076zM10.942 8.267c0-.584.474-1.057 1.058-1.057.584 0 1.058.473 1.058 1.057v6.345c0 .584-.474 1.058-1.058 1.058-.584 0-1.058-.474-1.058-1.058V8.267zm1.11 12.172h-.029c-.866-.003-1.576-.688-1.61-1.554-.015-.42.139-.826.427-1.13.288-.305.686-.48 1.105-.488h.03c.866 0 1.577.685 1.611 1.551.017.42-.137.828-.425 1.133-.289.306-.688.481-1.108.488z\" transform=\"translate(-161 -3524) translate(161 3524)\"/>\n </g>\n </g>\n </svg>`,\n hamburgerClose: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 23.999C5.383 23.999 0 18.616 0 11.999C0 5.38199 5.383 -0.00100708 12 -0.00100708C18.617 -0.00100708 24 5.38199 24 11.999C24 18.616 18.617 23.999 12 23.999ZM12 1.49899C6.21 1.49899 1.5 6.20899 1.5 11.999C1.5 17.789 6.21 22.499 12 22.499C17.79 22.499 22.5 17.789 22.5 11.999C22.5 6.20899 17.79 1.49899 12 1.49899Z\"/>\n <path d=\"M16.5 17.249C16.3 17.249 16.111 17.171 15.97 17.029L12 13.06L8.03 17.03C7.888 17.172 7.7 17.25 7.5 17.25C7.3 17.25 7.111 17.172 6.97 17.03C6.678 16.738 6.678 16.262 6.97 15.969L10.94 11.999L6.97 8.02899C6.828 7.88799 6.75 7.69899 6.75 7.49899C6.75 7.29899 6.828 7.10999 6.97 6.96899C7.111 6.82699 7.3 6.74899 7.5 6.74899C7.7 6.74899 7.889 6.82699 8.03 6.96899L12 10.939L15.97 6.96899C16.112 6.82699 16.3 6.74899 16.5 6.74899C16.7 6.74899 16.889 6.82699 17.03 6.96899C17.172 7.10999 17.25 7.29899 17.25 7.49899C17.25 7.69899 17.172 7.88799 17.03 8.02899L13.06 11.999L17.03 15.969C17.322 16.261 17.322 16.737 17.03 17.03C16.889 17.171 16.7 17.249 16.5 17.249Z\"/>\n </svg>`,\n hamburgerOpen: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n <path d=\"M7.5 9C7.086 9 6.75 8.664 6.75 8.25C6.75 7.836 7.086 7.5 7.5 7.5H16.5C16.914 7.5 17.25 7.836 17.25 8.25C17.25 8.664 16.914 9 16.5 9H7.5Z\"/>\n <path d=\"M7.5 12.75C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H7.5Z\"/>\n <path d=\"M7.5 16.5C7.086 16.5 6.75 16.164 6.75 15.75C6.75 15.336 7.086 15 7.5 15H16.5C16.914 15 17.25 15.336 17.25 15.75C17.25 16.164 16.914 16.5 16.5 16.5H7.5Z\"/>\n </svg>`,\n dial: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.6501 2.80019C2.28528 2.80019 2.80019 2.28528 2.80019 1.6501C2.80019 1.01492 2.28528 0.5 1.6501 0.5C1.01492 0.5 0.5 1.01492 0.5 1.6501C0.5 2.28528 1.01492 2.80019 1.6501 2.80019Z\"/>\n <path d=\"M7.01722 2.80022C6.38339 2.80022 5.86713 2.28396 5.86713 1.65013C5.86713 1.02856 6.35477 0.524566 6.97735 0.503098C6.98144 0.502075 7.00087 0.502075 7.01927 0.502075C7.02745 0.502075 7.05812 0.503098 7.06629 0.50412C7.67763 0.522521 8.16732 1.02652 8.16732 1.65013C8.16732 2.28396 7.65105 2.80022 7.01722 2.80022Z\" />\n <path d=\"M12.3843 2.80019C11.7505 2.80019 11.2342 2.28393 11.2342 1.6501C11.2342 1.01627 11.7505 0.5 12.3843 0.5C12.3986 0.5 12.417 0.501022 12.4324 0.503067C12.4426 0.504089 12.4497 0.504089 12.4569 0.505112C13.0529 0.532714 13.5344 1.03671 13.5344 1.6501C13.5344 2.28393 13.0181 2.80019 12.3843 2.80019Z\" />\n <path d=\"M1.6501 8.16732C1.01627 8.16732 0.5 7.65105 0.5 7.01722C0.5 6.40486 0.97844 5.90291 1.5908 5.87122C1.5908 5.87122 1.61125 5.86917 1.62147 5.86815C1.62147 5.86815 1.60716 5.86917 1.59489 5.87019C1.61227 5.86815 1.63374 5.86713 1.6501 5.86713C2.28393 5.86713 2.80019 6.38339 2.80019 7.01722C2.80019 7.65105 2.28393 8.16732 1.6501 8.16732Z\" />\n <path d=\"M7.01722 8.16735C6.38339 8.16735 5.86713 7.65108 5.86713 7.01725C5.86713 6.39569 6.35477 5.89169 6.97735 5.87022C6.98144 5.8692 7.00087 5.8692 7.01927 5.8692C7.02745 5.8692 7.05812 5.87022 7.06629 5.87125C7.67763 5.88965 8.16732 6.39365 8.16732 7.01725C8.16732 7.65108 7.65105 8.16735 7.01722 8.16735Z\" />\n <path d=\"M1.6501 13.5344C1.01627 13.5344 0.5 13.0182 0.5 12.3843C0.5 11.772 0.97844 11.27 1.5908 11.2383C1.5908 11.2383 1.61125 11.2363 1.62147 11.2353C1.62147 11.2353 1.60716 11.2363 1.59489 11.2373C1.61227 11.2353 1.63374 11.2332 1.6501 11.2332C2.28393 11.2342 2.80019 11.7505 2.80019 12.3843C2.80019 13.0182 2.28393 13.5344 1.6501 13.5344Z\" />\n <path d=\"M7.01722 13.5344C7.6524 13.5344 8.16732 13.0195 8.16732 12.3843C8.16732 11.7492 7.6524 11.2343 7.01722 11.2343C6.38204 11.2343 5.86713 11.7492 5.86713 12.3843C5.86713 13.0195 6.38204 13.5344 7.01722 13.5344Z\" />\n <path d=\"M22.7352 23.5019C22.312 23.5019 21.9685 23.1584 21.9685 22.7352V21.0453C21.9777 19.0774 20.4473 17.4632 18.4844 17.3671L15.0679 17.3681C14.6446 17.3681 14.3011 17.0246 14.3011 16.6014V8.16733C14.3011 7.32188 13.6131 6.63386 12.7677 6.63386C11.9222 6.63386 11.2342 7.32188 11.2342 8.16733V19.6683C11.2342 20.0087 11.0155 20.3031 10.6893 20.4023C10.6178 20.4238 10.5431 20.435 10.4675 20.435C10.2109 20.435 9.9727 20.3072 9.82957 20.0936L7.98942 17.3333C7.7042 16.9081 7.22167 16.6535 6.70029 16.6535C6.43653 16.6535 6.17585 16.722 5.94685 16.8508C5.587 17.0532 5.32733 17.3845 5.21692 17.7821C5.10549 18.1798 5.1566 18.5979 5.36004 18.9578L7.30038 22.3549C7.50996 22.7219 7.38217 23.1912 7.01516 23.4007C6.89862 23.4672 6.76674 23.5019 6.63384 23.5019C6.35884 23.5019 6.10428 23.3537 5.96729 23.1155L4.02491 19.7143C3.61905 18.9946 3.51785 18.1624 3.73866 17.3701C3.95948 16.5779 4.47575 15.9185 5.19239 15.5147C5.64936 15.257 6.16869 15.1211 6.69518 15.1211C7.73078 15.1211 8.6897 15.6292 9.26219 16.4807L9.69872 17.136V8.16733C9.69872 6.47643 11.0747 5.1004 12.7656 5.1004C14.4565 5.1004 15.8326 6.47643 15.8326 8.16733V15.8346H18.5202C21.3336 15.9706 23.5132 18.2606 23.4999 21.0484V22.7352C23.5019 23.1584 23.1584 23.5019 22.7352 23.5019Z\" />\n </svg>`,\n undo: () => `\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.56 22.12C11.1957 22.113 10.9 21.8173 10.9 21.46C10.9 21.0966 11.1966 20.8 11.56 20.8C11.5609 20.8 11.5653 20.8 11.5662 20.8C16.6578 20.8 20.8026 16.657 20.8062 11.5653C20.8088 6.47008 16.6666 2.32264 11.5714 2.32C7.96872 2.32 4.7444 4.37656 3.21848 7.6H8.26C8.62432 7.6 8.92 7.89568 8.92 8.26C8.92 8.62432 8.62432 8.92 8.26 8.92H1.66C1.29656 8.92 1 8.62432 1 8.26V1.66C1 1.29568 1.29568 1 1.66 1C2.02432 1 2.32 1.29568 2.32 1.66V6.46568C4.15744 3.14632 7.70912 1 11.5662 1C17.3953 1.00352 22.1297 5.7432 22.1262 11.5662C22.1226 17.3856 17.3856 22.12 11.5662 22.12C11.5644 22.12 11.5618 22.12 11.56 22.12Z\" />\n </svg>`,\n /** REMOVE BELOW ICONS... */\n test: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M12,23.5 C11.724,23.5 11.5,23.276 11.5,23 L11.5,12.5 L1,12.5 C0.724,12.5 0.5,12.276 0.5,12 C0.5,11.724 0.724,11.5 1,11.5 L11.5,11.5 L11.5,1 C11.5,0.724 11.724,0.5 12,0.5 C12.276,0.5 12.5,0.724 12.5,1 L12.5,11.5 L23,11.5 C23.276,11.5 23.5,11.724 23.5,12 C23.5,12.276 23.276,12.5 23,12.5 L12.5,12.5 L12.5,23 C12.5,23.276 12.276,23.5 12,23.5 Z\" />\n </svg>`,\n down: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M13 8c.001.442-.189.863-.52 1.155l-7.452 6.556c-.514.431-1.278.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.516-5.732c.036-.032.057-.078.057-.126s-.02-.094-.057-.126L3.398 2.142c-.493-.455-.533-1.22-.09-1.723.442-.503 1.206-.561 1.72-.13l7.449 6.554c.332.292.523.714.524 1.157z\" transform=\"translate(-359 -1642) translate(64 1622) translate(295 20) rotate(90 8 8)\"/>\n </svg>`,\n left: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17.0007096,12 C17.0012557,12.442161 16.8113416,12.8631373 16.4794988,13.1553479 L9.02753796,19.7112292 C8.51395208,20.1421822 7.75025823,20.0843144 7.30747318,19.5808938 C6.86468814,19.0774731 6.90477276,18.3126397 7.39775563,17.8582623 L13.9142121,12.1256249 C13.9503992,12.0939052 13.9711504,12.0481212 13.9711504,12 C13.9711504,11.9518788 13.9503992,11.9060948 13.9142121,11.8743751 L7.39775563,6.14173773 C6.90477276,5.68736032 6.86468814,4.92252687 7.30747318,4.41910624 C7.75025823,3.9156856 8.51395208,3.85781778 9.02753796,4.28877077 L16.476826,10.8426474 C16.809472,11.1353584 17.0002877,11.5569053 17.0007096,12 Z\" transform=\"rotate(180 12 12)\"/>\n </svg>`,\n right: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M13 8c.001.442-.189.863-.52 1.155l-7.452 6.556c-.514.431-1.278.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.516-5.732c.036-.032.057-.078.057-.126s-.02-.094-.057-.126L3.398 2.142c-.493-.455-.533-1.22-.09-1.723.442-.503 1.206-.561 1.72-.13l7.449 6.554c.332.292.523.714.524 1.157z\" />\n </svg>`,\n filter: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M2.25098 24C1.00998 24 0.000976562 22.991 0.000976562 21.75V2.25C0.000976563 1.009 1.00998 0 2.25098 0H21.751C22.992 0 24.001 1.009 24.001 2.25V21.75C24.001 22.991 22.992 24 21.751 24H2.25098ZM2.25098 1.5C1.83698 1.5 1.50098 1.836 1.50098 2.25V21.75C1.50098 22.164 1.83698 22.5 2.25098 22.5H21.751C22.165 22.5 22.501 22.164 22.501 21.75V2.25C22.501 1.836 22.165 1.5 21.751 1.5H2.25098Z\" />\n <path d=\"M10.501 18.75C9.13098 18.75 7.93698 17.803 7.59898 16.5H5.25098C4.83698 16.5 4.50098 16.164 4.50098 15.75C4.50098 15.336 4.83698 15 5.25098 15H7.59998C7.93798 13.697 9.13098 12.75 10.5 12.75C11.871 12.75 13.065 13.697 13.403 15H18.751C19.165 15 19.501 15.336 19.501 15.75C19.501 16.164 19.165 16.5 18.751 16.5H13.403C13.065 17.803 11.871 18.75 10.501 18.75ZM10.5 14.25C9.67298 14.25 9.00098 14.923 9.00098 15.75C9.00098 16.577 9.67398 17.25 10.501 17.25C11.328 17.25 12.001 16.577 12.001 15.75C12.001 14.923 11.328 14.25 10.5 14.25Z\" />\n <path d=\"M16.5 11.25C15.131 11.249 13.938 10.302 13.6 9H5.25098C4.83698 9 4.50098 8.664 4.50098 8.25C4.50098 7.836 4.83698 7.5 5.25098 7.5H13.599C13.937 6.197 15.131 5.25 16.501 5.25C18.155 5.25 19.501 6.596 19.501 8.25C19.5 9.904 18.154 11.25 16.5 11.25ZM16.501 6.75C15.674 6.75 15.001 7.423 15.001 8.25C15.001 9.077 15.674 9.75 16.501 9.75C17.328 9.75 18.001 9.077 18.001 8.25C18.001 7.423 17.328 6.75 16.501 6.75Z\" />\n </svg>`,\n chain: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"26\" width=\"26\" viewBox=\"-0.5 -0.5 16 16\">\n <path d=\"m5.9814375 11.652750000000001 -1.3096875 1.2726875000000002c-0.3434375 0.3434375 -0.80925 0.5363125 -1.2949374999999999 0.5363125s-0.9514374999999999 -0.192875 -1.294875 -0.5363125c-0.3434375 -0.34349999999999997 -0.5363749999999999 -0.8091875 -0.5363749999999999 -1.294875 0 -0.48575 0.19293749999999998 -0.9515625 0.5363749999999999 -1.2949374999999999l3.359375 -3.3668125c0.32968749999999997 -0.3308125 0.7739375 -0.5221875 1.240875 -0.5345624999999999 0.466875 -0.0124375 0.9206875000000001 0.155125 1.2675 0.468l0.0888125 0.07400000000000001c0.1403125 0.1373125 0.3295 0.2133125 0.5258125 0.21125000000000002 0.196375 -0.0020625 0.38387499999999997 -0.0820625 0.52125 -0.222375 0.137375 -0.140375 0.21337499999999998 -0.3295 0.21131250000000001 -0.5258125 -0.0020625 -0.196375 -0.0820625 -0.38387499999999997 -0.2224375 -0.52125 -0.041749999999999995 -0.054000000000000006 -0.0861875 -0.1058125 -0.13318750000000001 -0.15537499999999999 -0.631625 -0.5495625 -1.4485000000000001 -0.8384999999999999 -2.28525 -0.8082499999999999s-1.6306875 0.377375 -2.2210625 0.9710625l-3.4037499999999996 3.3668125C0.4528125 9.9218125 0.14 10.7504375 0.1580625 11.605125000000001c0.018125000000000002 0.8547499999999999 0.36568749999999994 1.6694375 0.9701875 2.273875 0.6045625 0.6045625 1.4191875 0.9521250000000001 2.2739375 0.9702500000000001 0.8546874999999999 0.018125000000000002 1.6833125 -0.29475 2.312875 -0.8730625000000001l1.280125 -1.2505c0.126375 -0.1379375 0.19587500000000002 -0.3185625 0.19443749999999999 -0.505625 -0.0013750000000000001 -0.18706250000000002 -0.073625 -0.366625 -0.20206249999999998 -0.5025625 -0.12843749999999998 -0.13599999999999998 -0.30362500000000003 -0.21825 -0.4903125 -0.2303125 -0.1866875 -0.0119375 -0.37093750000000003 0.0471875 -0.5158125 0.1655625ZM13.891562500000001 1.1158125C13.2690625 0.4971875 12.4271875 0.15 11.549562499999999 0.15s-1.7195 0.3471875 -2.3419375000000002 0.9658125L7.927499999999999 2.3663125c-0.126375 0.137875 -0.19587500000000002 0.3185625 -0.19443749999999999 0.5055624999999999 0.0013750000000000001 0.18706250000000002 0.073625 0.366625 0.20206249999999998 0.502625 0.12843749999999998 0.1359375 0.3036875 0.2181875 0.490375 0.23025 0.18662499999999999 0.011999999999999999 0.37093750000000003 -0.047125 0.51575 -0.16549999999999998l1.280125 -1.27275c0.343375 -0.3434375 0.8091875 -0.5363749999999999 1.2949374999999999 -0.5363749999999999 0.4856875 0 0.9515 0.19293749999999998 1.294875 0.5363749999999999 0.3434375 0.3434375 0.5364375 0.80925 0.5364375 1.2949374999999999 0 0.4856875 -0.193 0.9515 -0.5364375 1.2949374999999999l-3.359375 3.3668125c-0.32968749999999997 0.33075 -0.774 0.5221250000000001 -1.240875 0.5345 -0.4669375 0.0124375 -0.9207500000000001 -0.1550625 -1.2675625 -0.4679375l-0.0888125 -0.07400000000000001c-0.14024999999999999 -0.137375 -0.32937500000000003 -0.21337499999999998 -0.5258125 -0.21131250000000001 -0.196375 0.0020625 -0.3838125 0.0820625 -0.5211875 0.2224375 -0.137375 0.1403125 -0.21337499999999998 0.3294375 -0.21131250000000001 0.5258125 0.0021249999999999997 0.1963125 0.08212499999999999 0.3838125 0.2224375 0.5211875 0.05374999999999999 0.05499999999999999 0.11056250000000001 0.10687500000000001 0.1701875 0.1554375 0.6324375 0.5478124999999999 1.4489375 0.8356874999999999 2.2851875 0.8055 0.8361875000000001 -0.030187500000000003 1.6298750000000002 -0.3761875 2.2210625 -0.9683124999999999l3.3668125 -3.3668125c0.6225 -0.6185625 0.975125 -1.45825 0.980625 -2.3358125 0.0055625 -0.8775624999999999 -0.336375 -1.7216875 -0.9510625 -2.3480625Z\" fill-rule=\"evenodd\" stroke-width=\"1\"></path>\n </svg>`,\n report: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16420_1008)\">\n <g clip-path=\"url(#clip1_16420_1008)\">\n <path d=\"M17.25 24C13.528 24 10.5 20.972 10.5 17.25C10.5 13.528 13.528 10.5 17.25 10.5C20.972 10.5 24 13.528 24 17.25C24 20.972 20.972 24 17.25 24ZM17.25 12C14.355 12 12 14.355 12 17.25C12 20.145 14.355 22.5 17.25 22.5C20.145 22.5 22.5 20.145 22.5 17.25C22.5 14.355 20.145 12 17.25 12Z\" />\n <path d=\"M17.25 21C16.836 21 16.5 20.664 16.5 20.25V18H14.25C13.836 18 13.5 17.664 13.5 17.25C13.5 16.836 13.836 16.5 14.25 16.5H16.5V14.25C16.5 13.836 16.836 13.5 17.25 13.5C17.664 13.5 18 13.836 18 14.25V16.5H20.25C20.664 16.5 21 16.836 21 17.25C21 17.664 20.664 18 20.25 18H18V20.25C18 20.664 17.664 21 17.25 21Z\" />\n <path d=\"M3.75 7.5C3.336 7.5 3 7.164 3 6.75C3 6.336 3.336 6 3.75 6H14.25C14.664 6 15 6.336 15 6.75C15 7.164 14.664 7.5 14.25 7.5H3.75Z\" />\n <path d=\"M3.75 12C3.336 12 3 11.664 3 11.25C3 10.836 3.336 10.5 3.75 10.5H9.75C10.164 10.5 10.5 10.836 10.5 11.25C10.5 11.664 10.164 12 9.75 12H3.75Z\" />\n <path d=\"M3.75 16.5C3.336 16.5 3 16.164 3 15.75C3 15.336 3.336 15 3.75 15H7.5C7.914 15 8.25 15.336 8.25 15.75C8.25 16.164 7.914 16.5 7.5 16.5H3.75Z\" />\n <path d=\"M2.25 21C1.009 21 0 19.991 0 18.75V2.25C0 1.009 1.009 0 2.25 0H12.879C13.48 0 14.044 0.234 14.469 0.658L17.341 3.53C17.766 3.955 18 4.52 18 5.121V7.5C18 7.914 17.664 8.25 17.25 8.25C16.836 8.25 16.5 7.914 16.5 7.5V5.121C16.5 4.924 16.42 4.731 16.281 4.591L13.409 1.719C13.267 1.578 13.079 1.5 12.879 1.5H2.25C1.836 1.5 1.5 1.836 1.5 2.25V18.75C1.5 19.164 1.836 19.5 2.25 19.5H7.5C7.914 19.5 8.25 19.836 8.25 20.25C8.25 20.664 7.914 21 7.5 21H2.25Z\" />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_16420_1008\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n <clipPath id=\"clip1_16420_1008\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n export: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g clip-path=\"url(#a)\">\n <path d=\"M12 16.5a.75.75 0 0 1-.75-.75V5.56L8.03 8.78a.75.75 0 0 1-1.06 0 .74.74 0 0 1 0-1.06l4.5-4.5a.74.74 0 0 1 .24-.16l.03-.01a.74.74 0 0 1 .52 0h.02c.1.05.18.1.25.17l4.5 4.5a.74.74 0 0 1 0 1.06.75.75 0 0 1-1.06 0l-3.22-3.22v10.19c0 .41-.34.75-.75.75Z\" />\n <path d=\"M3.75 21A3.75 3.75 0 0 1 0 17.25v-1.5a.75.75 0 0 1 1.5 0v1.5c0 1.24 1.01 2.25 2.25 2.25h16.5c1.24 0 2.25-1 2.25-2.25v-1.5a.75.75 0 0 1 1.5 0v1.5A3.75 3.75 0 0 1 20.25 21H3.75Z\" />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>`,\n import: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g clip-path=\"url(#a)\">\n <path d=\"M12.001 16.5a.755.755 0 0 1-.26-.047l-.022-.008a.732.732 0 0 1-.249-.165l-4.499-4.5a.743.743 0 0 1-.22-.53c0-.2.078-.389.22-.53a.743.743 0 0 1 .53-.22c.2 0 .389.078.53.22l3.22 3.22V3.75a.75.75 0 0 1 1.5 0v10.189l3.22-3.22a.744.744 0 0 1 1.06 0c.142.141.22.33.22.53s-.078.389-.22.53l-4.5 4.5a.763.763 0 0 1-.246.164l-.026.01a.726.726 0 0 1-.258.047Z\" />\n <path d=\"M3.751 21a3.754 3.754 0 0 1-3.75-3.75v-1.5a.75.75 0 0 1 1.5 0v1.5a2.252 2.252 0 0 0 2.25 2.25h16.5a2.252 2.252 0 0 0 2.25-2.25v-1.5a.75.75 0 0 1 1.5 0v1.5a3.754 3.754 0 0 1-3.75 3.75h-16.5Z\" />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>`,\n}\n\nexport type IconName = keyof IconMap // resolves to `string`\nexport default icons\n","<script setup lang=\"ts\">\nimport icons, { type IconMap } from '../../assets/icons'\nimport { computed } from 'vue'\nimport type { FdsIconProps } from './types'\n\nconst props = withDefaults(defineProps<FdsIconProps>(), {\n size: 24,\n title: undefined,\n})\n\nfunction normalizeSvg(svg: string): string {\n // Replace explicit width/height with 100% to allow container sizing\n return svg.replace(/width=\"(.*?)\"/g, 'width=\"100%\"').replace(/height=\"(.*?)\"/g, 'height=\"100%\"')\n}\n\nconst svgHtml = computed(() => {\n const map = icons as IconMap\n const entry = map[props.name]\n if (!entry) return ''\n const raw = typeof entry === 'function' ? entry() : entry\n const withTitle = props.title ? raw.replace('<svg', `<svg aria-label=\"${props.title}\" role=\"img\"`) : raw\n return normalizeSvg(withTitle)\n})\n\nconst pixelSize = computed(() => (typeof props.size === 'number' ? `${props.size}px` : props.size))\n</script>\n\n<template>\n <span\n class=\"inline-flex items-center justify-center align-middle\"\n :style=\"{ width: pixelSize, height: pixelSize }\"\n v-html=\"svgHtml\"\n ></span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsIconButtonProps } from './types'\n\nconst props = withDefaults(defineProps<FdsIconButtonProps>(), {\n size: 24,\n disabled: false,\n loading: false,\n type: 'button',\n ariaLabel: undefined,\n})\n\n// Remove padding of button (4px) from the size to get the icon size\nconst iconSize = computed(() => props.size - 4)\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst buttonClasses = computed(() => [\n 'inline-flex items-center justify-center rounded-md p-[2px] max-w-[48px] max-h-[48px] transition-colors duration-200 fill-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200 focus-visible:outline-dashed focus-visible:outline-2 outline-blue-500',\n props.disabled ? 'opacity-20 cursor-not-allowed' : 'cursor-pointer',\n])\n\nfunction onClick(ev: MouseEvent) {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n</script>\n\n<template>\n <button\n :id=\"id\"\n :type=\"type\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-disabled=\"ariaDisabled\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <FdsIcon v-if=\"!loading\" :size=\"iconSize\" :name=\"icon\" />\n <FdsIcon v-else :size=\"iconSize\" name=\"spinner\" class=\"animate-spin\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsButtonIcon from '../../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsAlertBlockProps } from './types'\n\nconst props = withDefaults(defineProps<FdsAlertBlockProps>(), {\n id: undefined,\n visible: true,\n closeable: false,\n collapsable: false,\n expanded: false,\n label: '',\n locale: 'sv',\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'toggle'): void\n (e: 'update:visible', value: boolean): void\n}>()\n\nconst isExpanded = ref(props.expanded)\nconst isVisible = ref<boolean>(props.visible)\nconst expandLabel = computed(() => (props.locale === 'sv' ? 'Visa mer' : 'Show more'))\nconst collapseLabel = computed(() => (props.locale === 'sv' ? 'Visa mindre' : 'Show less'))\nconst closeLabel = computed(() => (props.locale === 'sv' ? 'Stäng' : 'Close'))\n\nconst hasSlot = useHasSlot()\n\nwatch(\n () => props.visible,\n (v) => {\n isVisible.value = v\n },\n)\n\nconst alertClasses = computed(() => [\n 'bg-yellow-200 border-yellow-300 border-1 rounded-md p-4 mb-4',\n (props.collapsable && !isExpanded.value) || !hasSlot.value ? 'pb-4' : 'pb-6',\n])\n\nconst autoId = `fds-alert-${Math.random().toString(36).slice(2, 9)}`\nconst alertId = computed(() => props.id ?? autoId)\n\nfunction handleClose() {\n isVisible.value = false\n emit('update:visible', false)\n emit('close')\n}\n\nfunction handleToggle() {\n isExpanded.value = !isExpanded.value\n emit('toggle')\n}\n</script>\n\n<template>\n <div v-if=\"isVisible\" :id=\"alertId\" :class=\"alertClasses\">\n <div>\n <div>\n <div\n v-if=\"label\"\n class=\"font-bold w-full justify-between items-center h-[24px] flex gap-2\"\n :class=\"{ 'mb-4': (isExpanded || !collapsable) && hasSlot }\"\n >\n <div class=\"flex items-center gap-2\">\n <FdsIcon name=\"alert\" :size=\"24\" class=\"fill-yellow-700\" />\n <span>{{ label }}</span>\n </div>\n <div class=\"relative\">\n <FdsButtonIcon\n v-if=\"closeable\"\n icon=\"cross\"\n :size=\"24\"\n @click=\"handleClose\"\n :ariaLabel=\"closeLabel\"\n :class=\"['fill-gray-900! hover:bg-gray-100 active:bg-gray-200']\"\n />\n <FdsButtonIcon\n v-if=\"collapsable\"\n icon=\"arrowDown\"\n :size=\"24\"\n @click=\"handleToggle\"\n :ariaLabel=\"isExpanded ? collapseLabel : expandLabel\"\n :class=\"[\n 'fill-gray-900! hover:bg-gray-100 active:bg-gray-200',\n '[&_svg]:transition-transform [&_svg]:duration-200',\n isExpanded ? '[&_svg]:-rotate-180' : '[&_svg]:rotate-0',\n ]\"\n />\n </div>\n </div>\n <div v-if=\"isExpanded || !collapsable\" class=\"fds-block-alert-slot mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type Slot } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport type { FdsContentBlockProps } from './types'\n\nconst hasSlot = useHasSlot()\n\nconst props = withDefaults(defineProps<FdsContentBlockProps>(), {\n borderLeft: undefined,\n tight: false,\n heading: undefined,\n})\n\nconst contentClasses = computed(() => [\n 'rounded-md p-4 bg-white mb-4',\n props.tight && 'pb-2',\n props.tight && 'p-4!',\n props.borderLeft && 'border-l-4',\n hasSlot.value ? 'pb-6' : 'pb-4',\n])\n\nconst headerClasses = computed(() => ['mt-0 mb-4 text-lg font-bold tracking-wide', !hasSlot.value && 'mb-0!'])\n\nconst borderLeftStyle = computed(() => {\n if (!props.borderLeft) return {}\n\n const colorMap: Record<string, string> = {\n green: 'var(--color-green-600)',\n yellow: 'var(--color-yellow-400)',\n red: 'var(--color-red-500)',\n }\n\n return { 'border-left-color': colorMap[props.borderLeft] || props.borderLeft }\n})\n\nconst autoId = `fds-content-block-${Math.random().toString(36).slice(2, 9)}`\nconst contentBlockId = computed(() => props.id ?? autoId)\n\ndefineSlots<{\n default?: Slot\n headerInfo?: Slot\n}>()\n</script>\n\n<template>\n <div :id=\"contentBlockId\" :class=\"contentClasses\" :style=\"borderLeftStyle\">\n <header v-if=\"heading\" class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-center gap-3\">\n <h3 :class=\"headerClasses\">{{ heading }}</h3>\n </div>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsExpanderBlockProps } from './types'\n\nconst props = withDefaults(defineProps<FdsExpanderBlockProps>(), {\n disabled: false,\n label: '',\n open: false,\n preIcon: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'toggle'): void\n}>()\n\nconst isOpen = ref(props.open)\n\n// Watch for changes to the open prop\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n },\n)\n\nconst expanderClasses = computed(() => [\n 'expander-root block w-full rounded-2xl mb-4 shadow-[0_4px_16px_0_rgba(59,130,246,0.2)] transition-colors',\n props.disabled && 'shadow-none border-2 border-gray-200 border-dashed',\n])\n\nconst headerClasses = computed(() => [\n 'flex w-full items-start text-left justify-between bg-white text-blue-600 rounded-2xl p-[calc(1rem-2px)] border-2 border-white transition-colors border-2 border-white hover:border-blue-500 active:bg-blue_t-100 active:border-white focus-visible:border-blue-500 focus-visible:border-dashed focus-visible:outline-0',\n props.disabled ? 'cursor-not-allowed hover:border-2 hover:border-transparent active:bg-white' : 'cursor-pointer',\n isOpen.value ? 'rounded-b-none' : 'rounded-b-2xl',\n])\n\nfunction handleToggle() {\n if (props.disabled) return\n isOpen.value = !isOpen.value\n emit('toggle')\n}\n</script>\n\n<template>\n <div :class=\"expanderClasses\">\n <button type=\"button\" :class=\"headerClasses\" @click=\"handleToggle\">\n <span class=\"inline-flex items-center\">\n <span v-if=\"preIcon\" class=\"flex items-center mr-4\">\n <FdsIcon :name=\"preIcon\" :size=\"24\" class=\"fill-blue-500\" :class=\"{ 'fill-gray-500': disabled }\" />\n </span>\n <span class=\"inline-flex items-center\">\n <span class=\"font-bold font-heading text-lg leading-md\" :class=\"{ 'text-gray-500': disabled }\">\n {{ label }}\n </span>\n </span>\n </span>\n <FdsIcon\n name=\"arrowDown\"\n :size=\"24\"\n class=\"ml-4 transition-transform duration-200 fill-blue-500 min-w-6 min-h-6\"\n :class=\"{ 'rotate-180': isOpen, 'fill-gray-500': disabled }\"\n />\n </button>\n <div :aria-hidden=\"!isOpen\" class=\"mb-0-last-child block px-4 pb-6 rounded-b-2xl bg-white\" v-show=\"isOpen\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type Slot } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsBlockInfoProps } from './types'\n\nconst props = withDefaults(defineProps<FdsBlockInfoProps>(), {\n icon: undefined,\n size: 'small',\n heading: undefined,\n dataTestid: undefined,\n})\n\nconst hasSlot = useHasSlot()\n\nconst contentClasses = computed(() => [\n 'rounded-md bg-blue_t-100 mb-4',\n !hasSlot.value && 'mb-0!',\n props.size === 'small' && 'p-4',\n props.size === 'small' && hasSlot.value && 'pb-6',\n props.size === 'large' && props.icon && 'p-6',\n])\n\nconst smallIconSize = 24\nconst largeIconSize = 48\n\nconst autoId = `fds-content-block-${Math.random().toString(36).slice(2, 9)}`\nconst contentBlockId = computed(() => props.id ?? autoId)\n\ndefineSlots<{\n default?: Slot\n header?: Slot\n headerInfo?: Slot\n}>()\n</script>\n\n<template>\n <div :id=\"contentBlockId\" :class=\"contentClasses\">\n <!-- Large icon layout: icon left, header + content right -->\n <div v-if=\"size === 'large' && icon\" class=\"flex items-start gap-4\">\n <FdsIcon :name=\"icon\" :size=\"largeIconSize\" class=\"fill-blue-500\" />\n <div class=\"flex-1\">\n <div v-if=\"heading\" class=\"mb-1\">\n <header class=\"flex items-start justify-between gap-4\">\n <h3 class=\"m-0 text-base font-main font-bold tracking-wide\">{{ heading }}</h3>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n </div>\n <div v-if=\"hasSlot\" class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n\n <!-- Small icon or no icon: icon in header only, content below -->\n <div v-else>\n <div v-if=\"heading\" :class=\"{ 'mb-4': hasSlot }\">\n <header class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-center gap-3\">\n <FdsIcon v-if=\"icon && size === 'small'\" :name=\"icon\" :size=\"smallIconSize\" class=\"fill-blue-500\" />\n <h3 class=\"m-0 text-base font-main font-bold tracking-wide\">{{ heading }}</h3>\n </div>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n </div>\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsInteractionBlockProps } from './types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\nconst props = withDefaults(defineProps<FdsInteractionBlockProps>(), {\n arrow: false,\n disabled: false,\n download: undefined,\n href: undefined,\n target: undefined,\n rel: undefined,\n icon: undefined,\n interactive: true,\n as: 'router-link',\n})\n\nconst hasSlot = useHasSlot()\nconst hasStickerSlot = useHasSlot('sticker')\n\nconst emit = defineEmits<{\n (e: 'click', event: Event): void\n}>()\n\nconst innerClasses = computed(() => [\n props.disabled ? 'cursor-not-allowed shadow-none hover:border-transparent active:bg-transparent' : 'cursor-pointer',\n !props.interactive && 'cursor-auto',\n])\n\nconst slotWrapperClasses = computed(() => [\n 'flex flex-col sm:flex-row justify-between h-fit gap-y-2 gap-x-4',\n !hasSlot.value && 'justify-end',\n])\n\nconst headerClasses = computed(() => [\n !props.arrow && !props.icon && 'mb-2',\n !hasSlot.value && 'mb-0!',\n props.icon && 'flex-1',\n])\n\nconst contentClasses = computed(() => [props.icon ? 'items-start gap-3' : 'flex-col'])\nconst containerClasses = computed(() => [props.icon && 'flex-1'])\nconst iconClasses = computed(() => [props.disabled && 'text-gray-700'])\nconst arrowClasses = computed(() => [props.disabled && 'hidden'])\nconst headerTextClasses = computed(() => [props.disabled ? 'text-gray-700' : 'text-blue-600'])\n\nfunction handleClick(event: Event) {\n if (props.disabled || !props.interactive) {\n event.preventDefault()\n return\n }\n emit('click', event)\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n handleClick(event)\n }\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n // Auto-detect: if href exists and no 'as' specified, use 'a'\n if (props.href && !props.as) return { href: props.href }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n\nconst componentType = computed(() => {\n if (props.as) return props.as\n return props.href ? 'a' : 'button'\n})\n</script>\n\n<template>\n <component\n :is=\"componentType\"\n v-bind=\"componentAttrs\"\n class=\"box-border appearance-none text-left w-full flex items-start bg-white p-[calc(1rem-2px)] mb-3 text-blue-600 shadow-lg shadow-blue-200 rounded-2xl no-underline border-2 border-transparent transition-all duration-200 hover:border-blue-600 hover:border-2 active:border-transparent active:shadow-none active:bg-blue_t-100 focus-visible:border-blue-500 focus-visible:border-dashed focus-visible:outline-0\"\n :class=\"innerClasses\"\n :target=\"componentType === 'a' ? target : undefined\"\n :rel=\"componentType === 'a' ? rel : undefined\"\n :download=\"componentType === 'a' ? download : undefined\"\n :disabled=\"componentType === 'button' ? disabled : undefined\"\n :aria-disabled=\"disabled\"\n @click=\"handleClick\"\n @keydown=\"handleKeydown\"\n >\n <div class=\"flex w-full flex-1\" :class=\"contentClasses\">\n <FdsIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"24\"\n class=\"flex items-center justify-center w-6 h-6 fill-blue-500\"\n :class=\"iconClasses\"\n />\n <div\n class=\"flex flex-col text-gray-700 font-normal text-base leading-6 tracking-normal\"\n :class=\"containerClasses\"\n >\n <div class=\"flex items-center gap-4\" :class=\"headerClasses\">\n <h3 class=\"flex-1 font-heading text-lg tracking-normal m-0 leading-md\" :class=\"headerTextClasses\">\n {{ label }}\n </h3>\n </div>\n <div :class=\"slotWrapperClasses\">\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n <div v-if=\"hasStickerSlot\" class=\"flex items-end\">\n <slot name=\"sticker\" />\n </div>\n </div>\n </div>\n </div>\n <FdsIcon v-if=\"arrow\" name=\"arrowRight\" :size=\"20\" class=\"ml-3 fill-blue-500\" :class=\"arrowClasses\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsSpinnerProps } from './types'\n\nconst props = withDefaults(\n defineProps<{\n size?: string\n color?: FdsSpinnerProps['color']\n label?: string\n labelPosition?: FdsSpinnerProps['labelPosition']\n }>(),\n { size: '48px', color: 'inherit', label: '', labelPosition: 'bottom' },\n)\n\nconst boxStyle = computed(() => ({ width: props.size, height: props.size }))\n\nconst colorClass = computed(() => {\n switch (props.color) {\n case 'black':\n return 'text-black'\n case 'white':\n return 'text-white'\n case 'blue':\n return 'text-blue-500'\n case 'inherit':\n default:\n return 'text-inherit'\n }\n})\n\nconst wrapperClasses = computed(() =>\n props.label\n ? props.labelPosition === 'right'\n ? 'flex items-center gap-2'\n : 'inline-flex flex-col items-center gap-2'\n : 'inline-block',\n)\n</script>\n\n<template>\n <div\n :class=\"wrapperClasses\"\n role=\"status\"\n :aria-label=\"label || 'Laddar'\"\n >\n <div\n class=\"relative\"\n :style=\"boxStyle\"\n >\n <svg\n class=\"animate-spin block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n :class=\"colorClass\"\n >\n <path\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n d=\"M22.942 14.523a11.42 11.42 0 01-1.087 2.848m-2.04 2.66a12.161 12.161 0 01-2.456 1.81M12.993.747c1.017.09 2.017.32 2.971.682m2.924 1.636c.81.622 1.528 1.355 2.131 2.178M22.6 8.2a10.5 10.5 0 01.614 2.984M14.25 22.972C8.162 24.215 2.218 20.286.975 14.197-.267 8.108 3.662 2.165 9.75.922\"\n />\n </svg>\n <svg\n class=\"animate-spin-reverse absolute top-0 left-0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n :class=\"colorClass\"\n >\n <path\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n d=\"M12 4.447a7.5 7.5 0 11-7.5 7.5\"\n />\n </svg>\n </div>\n <div\n v-if=\"label\"\n :class=\"labelPosition === 'bottom' ? 'font-bold' : ''\"\n >\n {{ label }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\ninterface FdsButtonMinorProps extends FdsButtonBaseProps {\n invert?: boolean\n}\n\nconst props = withDefaults(defineProps<FdsButtonMinorProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n textSelection: false,\n as: 'button',\n href: undefined,\n target: undefined,\n rel: undefined,\n type: 'button',\n invert: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-start justify-center w-fit cursor-pointer shadow-none p-0.5 text-base select-none m-0 rounded-md text-left align-start no-underline transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst variantClasses = computed(() =>\n props.invert\n ? 'border-0 font-normal text-white bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white hover:bg-white-100 active:bg-white-200'\n : 'border-0 font-normal text-blue-600 bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200',\n)\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() =>\n props.icon && props.iconPos === 'right' ? 'order-2 ml-2 mr-0' : props.icon && 'mr-2',\n)\n\nconst buttonClasses = computed(() => [\n elBase,\n variantClasses.value,\n blockElClasses.value,\n props.textSelection && 'select-text',\n])\n\nconst iconFillClass = computed(() => (props.invert ? 'fill-white' : 'fill-blue-500'))\n\nfunction onClick(ev: MouseEvent) {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"componentAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :target=\"as === 'a' ? target : undefined\"\n :rel=\"as === 'a' ? rel : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner class=\"mr-2\" size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span class=\"pt-0.5\">\n {{ text }}\n </span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsButtonMinor from '../FdsButtonMinor/FdsButtonMinor.vue'\nimport type { FdsCopyButtonProps } from './types'\n\nconst props = withDefaults(defineProps<FdsCopyButtonProps>(), {\n value: '',\n label: 'Kopiera',\n copiedLabel: 'Kopierat!',\n timeoutMs: 800,\n disabled: false,\n})\n\nconst isCopied = ref(false)\nlet resetTimer: ReturnType<typeof setTimeout> | null = null\n\nasync function copyToClipboard(text: string) {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // ignore and try fallback\n }\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.focus()\n textarea.select()\n let ok = false\n try {\n ok = document.execCommand('copy')\n } catch {\n ok = false\n }\n document.body.removeChild(textarea)\n return ok\n}\n\nasync function onClick() {\n if (props.disabled) return\n let textToCopy = props.value\n if (props.targetId) {\n const el = document.getElementById(props.targetId)\n if (el) {\n textToCopy = (el as HTMLElement).innerText || (el as HTMLElement).textContent || ''\n }\n }\n if (!textToCopy) return\n const ok = await copyToClipboard(textToCopy)\n if (!ok) return\n isCopied.value = true\n if (resetTimer) clearTimeout(resetTimer)\n resetTimer = setTimeout(() => (isCopied.value = false), props.timeoutMs)\n}\n\nonMounted(() => {\n if (resetTimer) {\n clearTimeout(resetTimer)\n resetTimer = null\n }\n})\n\ndefineEmits<{ (e: 'click'): void }>()\n</script>\n\n<template>\n <div v-if=\"isCopied\" class=\"flex items-center gap-2 h-7\">\n <FdsIcon name=\"bigSuccess\" />\n <span>{{ props.copiedLabel }}</span>\n </div>\n <FdsButtonMinor\n v-else\n type=\"button\"\n :disabled=\"props.disabled\"\n icon=\"copy\"\n :text=\"isCopied ? props.copiedLabel : props.label\"\n @click=\"onClick\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\ninterface DownloadOptions {\n token: string\n accept?: string\n headerAuthKey?: string\n headerAuthValuePrefix?: string\n errorHandler?: (error: unknown) => void\n onFinishCallback?: () => void\n}\n\ntype FdsButtonDownloadProps = Omit<FdsButtonBaseProps, 'as' | 'icon'> & {\n downloadOptions?: DownloadOptions\n}\n\nconst props = withDefaults(defineProps<FdsButtonDownloadProps>(), {\n loading: false,\n disabled: false,\n iconPos: 'left',\n href: undefined,\n downloadOptions: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst isDownloading = ref(false)\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n])\n\nconst elBase = computed(() => [\n 'box-border appearance-none w-full inline-flex items-center justify-center shadow-none p-0.5 text-base',\n 'select-none m-0 rounded-md align-middle whitespace-nowrap no-underline',\n 'transition-[box-shadow,border-color,background-color] duration-200 font-main text-base',\n 'leading-5 tracking-normal',\n])\n\nconst stateClasses = computed(() => [\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4',\n 'focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200',\n])\n\nconst iconOrderClasses = computed(() => (props.iconPos === 'right' ? 'order-2 ml-2 mr-0' : 'mr-2'))\n\nconst buttonClasses = computed(() => [\n elBase.value,\n stateClasses.value,\n 'border-0 font-normal bg-transparent',\n isDownloading.value ? 'cursor-not-allowed text-gray-500' : 'cursor-pointer text-blue-600',\n])\n\nconst iconFillClass = computed(() => (isDownloading.value ? 'fill-gray-500' : 'fill-blue-500'))\n\nasync function handleDownload(ev: MouseEvent) {\n if (props.disabled || props.loading || isDownloading.value) {\n ev.preventDefault()\n return\n }\n\n // If no downloadOptions, just emit click and let default link behavior handle it\n if (!props.downloadOptions || !props.href) {\n emit('click', ev)\n return\n }\n\n ev.preventDefault()\n\n isDownloading.value = true\n\n const options = props.downloadOptions\n const authHeader: Record<string, string> = {}\n authHeader[options.headerAuthKey || 'Authorization'] = `${options.headerAuthValuePrefix || 'Bearer '}${options.token}`\n\n if (options.accept) {\n authHeader.Accept = options.accept\n }\n\n try {\n const response = await fetch(props.href, {\n method: 'GET',\n headers: authHeader,\n })\n\n if (!response.ok) {\n throw new Error(`Download failed: ${response.status} ${response.statusText}`)\n }\n\n // Get blob from response\n const blob = await response.blob()\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n\n // Try to get filename from Content-Disposition header\n const contentDisposition = response.headers.get('content-disposition')\n let fileName = props.href.substring(props.href.lastIndexOf('/') + 1)\n\n if (contentDisposition) {\n const fileNameMatch = contentDisposition.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/)\n if (fileNameMatch && fileNameMatch[1]) {\n fileName = fileNameMatch[1].replace(/['\"]/g, '')\n // Decode URL encoding\n fileName = fileName.replace(/\\+/g, '%20')\n fileName = decodeURIComponent(fileName)\n }\n }\n\n link.setAttribute('download', fileName)\n document.body.appendChild(link)\n\n link.dispatchEvent(\n new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n }),\n )\n\n setTimeout(() => {\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n }, 100)\n\n if (options.onFinishCallback) {\n options.onFinishCallback()\n }\n } catch (error) {\n if (options.errorHandler) {\n options.errorHandler(error)\n } else {\n throw error\n }\n } finally {\n isDownloading.value = false\n }\n}\n\nfunction onClick(ev: MouseEvent) {\n if (props.downloadOptions) {\n handleDownload(ev)\n } else {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n }\n}\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <button\n v-bind=\"$attrs\"\n :class=\"buttonClasses\"\n :disabled=\"disabled || loading || isDownloading\"\n type=\"button\"\n @click=\"onClick\"\n >\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" name=\"download\" :size=\"24\" />\n </span>\n {{ text }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\nconst props = withDefaults(defineProps<FdsButtonBaseProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n size: 'md',\n textSelection: false,\n as: 'button',\n href: undefined,\n type: 'button',\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst sizeClasses: Record<string, string> = {\n sm: 'text-sm h-7 px-3',\n md: 'text-base h-12 px-4',\n lg: 'text-lg h-[68px] px-6',\n}\n\nconst variantClasses =\n 'bg-red-600 border border-red-700 text-white hover:bg-red-700 active:bg-red-800 active:border-red-800'\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() => (props.icon && props.iconPos === 'right' ? 'order-2' : ''))\n\nconst buttonClasses = computed(() => [\n elBase,\n sizeClasses[props.size || 'm'],\n variantClasses,\n blockElClasses.value,\n props.textSelection && 'select-text',\n (props.icon || props.text) && 'gap-2',\n])\n\nconst iconFillClass = 'fill-white'\n\nfunction onClick(ev: MouseEvent) {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"linkAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span v-if=\"text\">{{ text }}</span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\nconst props = withDefaults(defineProps<FdsButtonBaseProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n size: 'md',\n textSelection: false,\n as: 'button',\n href: undefined,\n type: 'button',\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst sizeClasses: Record<string, string> = {\n sm: 'text-sm h-7 px-3',\n md: 'text-base h-12 px-4',\n lg: 'text-lg h-[68px] px-6',\n}\n\nconst variantClasses =\n 'bg-white border-2 border-blue-500 text-blue-600 hover:border-blue-600 active:bg-blue-600 active:border-blue-600 active:text-white'\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() => (props.icon && props.iconPos === 'right' ? 'order-2' : ''))\n\nconst buttonClasses = computed(() => [\n elBase,\n sizeClasses[props.size || 'm'],\n variantClasses,\n blockElClasses.value,\n props.textSelection && 'select-text',\n (props.icon || props.text) && 'gap-2',\n])\n\nconst iconFillClass = 'fill-blue-500'\n\nfunction onClick(ev: MouseEvent) {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"linkAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span v-if=\"text\">{{ text }}</span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useHasSlot } from '../../composables/useHasSlots'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsIcon from '../FdsIcon/FdsIcon.vue'\nimport type { FdsModalProps } from './types'\n\nconst props = withDefaults(defineProps<FdsModalProps>(), {\n open: false,\n heading: '',\n size: 'md',\n alignTop: false,\n alignLeftFooter: false,\n stickyFooter: false,\n strict: false,\n lockScroll: false,\n info: undefined,\n locale: 'sv',\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'update:open', value: boolean): void\n}>()\n\nconst isOpen = ref(props.open)\nlet cleanupFocusTrap: (() => void) | null = null\nconst previouslyFocusedElement = ref<HTMLElement | null>(null)\n\nconst hasFooterSlot = useHasSlot('modal-footer')\n\nconst modalOuterClasses = computed(() => ['fixed top-0 left-0 w-full h-full overflow-auto z-100'])\n\nconst modalInnerClasses = computed(() => [\n 'relative min-w-[288px] w-[calc(100%-5rem)] bg-white rounded-lg overflow-auto z-[99999] shadow-lg px-6 pt-6.5 left-1/2',\n 'max-h-[80%] top-1/2 translate-x-[-50%]',\n props.alignTop ? 'top-[10rem]' : 'translate-y-[-50%]',\n props.stickyFooter ? 'pb-0' : 'pb-8',\n {\n 'max-w-[480px]': props.size === 'sm',\n 'max-w-[588px]': props.size === 'md',\n 'max-w-[768px]': props.size === 'lg',\n 'max-w-[1200px]': props.size === 'xl',\n },\n])\n\nconst headerTitleClasses = computed(() => ['m-0'])\n\nconst iconName = computed(() => {\n if (props.info === 'valid') return 'check'\n if (props.info === 'invalid' || props.info === 'warning') return 'alert'\n return null\n})\n\nconst iconClasses = computed(() => [\n 'inline mr-2 float-left',\n {\n 'fill-green-600': props.info === 'valid',\n 'fill-red-600': props.info === 'invalid',\n 'fill-yellow-600': props.info === 'warning',\n },\n])\n\nconst closeLabel = computed(() => (props.locale === 'sv' ? 'Stäng dialogruta' : 'Close modal window'))\n\nconst footerClasses = computed(() => [\n 'mt-6 flex flex-col gap-4 left-0 right-0',\n {\n 'sm:flex-row sm:justify-end': !props.alignLeftFooter,\n 'sm:flex-row sm:justify-start': props.alignLeftFooter,\n 'sticky bg-white bottom-0 shadow-[0px_-8px_16px_0px_rgba(255,255,255,0.59)] z-[2] -mx-6 px-6 pb-6':\n props.stickyFooter,\n },\n])\n\nconst setHtmlOverflow = (value: 'auto' | 'hidden') => {\n if (typeof document === 'undefined') return\n const htmlEl = document.documentElement\n if (htmlEl) {\n htmlEl.style.overflow = value\n }\n}\n\nconst handleBackdropClick = () => {\n handleClose('backdrop')\n}\n\nconst handleClose = (context: 'backdrop' | 'icon' | 'keydown') => {\n if (props.strict && context === 'icon') {\n return\n }\n isOpen.value = false\n setHtmlOverflow('auto')\n\n // Restore focus to the element that opened the modal\n nextTick(() => {\n if (previouslyFocusedElement.value) {\n previouslyFocusedElement.value.focus()\n previouslyFocusedElement.value = null\n }\n })\n\n emit('close')\n emit('update:open', false)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isOpen.value && e.code === 'Escape') {\n handleClose('keydown')\n }\n}\n\nconst getTabList = (modal: Element) =>\n modal.querySelectorAll(\n 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])',\n )\n\nconst trapFocus = () => {\n if (!isOpen.value) return\n\n nextTick(() => {\n const modal = document.querySelector('.fds-modal-inner')\n if (!modal) return\n\n const tabList = getTabList(modal)\n\n if (tabList.length > 0) {\n ;(tabList[0] as HTMLElement).focus()\n }\n\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return\n\n const currentTabList = getTabList(modal)\n if (currentTabList.length === 0) return\n\n const firstFocusableEl = currentTabList[0] as HTMLElement\n const lastFocusableEl = currentTabList[currentTabList.length - 1] as HTMLElement\n const isTabOrderReversed = e.shiftKey\n\n // Prevent leaving modal\n if (isTabOrderReversed && document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus()\n e.preventDefault()\n } else if (!isTabOrderReversed && document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus()\n e.preventDefault()\n }\n }\n\n // Add event listener to the modal element\n modal.addEventListener('keydown', handleTabKey as EventListener, true)\n\n cleanupFocusTrap = () => {\n modal.removeEventListener('keydown', handleTabKey as EventListener, true)\n }\n })\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n if (newValue) {\n // Save the currently focused element before opening the modal\n previouslyFocusedElement.value = document.activeElement as HTMLElement\n if (props.lockScroll) {\n setHtmlOverflow('hidden')\n }\n trapFocus()\n } else {\n setHtmlOverflow('auto')\n if (cleanupFocusTrap) {\n cleanupFocusTrap()\n cleanupFocusTrap = null\n }\n\n // Restore focus to the element that opened the modal\n nextTick(() => {\n if (previouslyFocusedElement.value) {\n previouslyFocusedElement.value.focus()\n previouslyFocusedElement.value = null\n }\n })\n }\n },\n)\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeyDown, true)\n\n if (props.open) {\n // Save the currently focused element before opening the modal\n previouslyFocusedElement.value = document.activeElement as HTMLElement\n\n if (props.lockScroll) {\n setHtmlOverflow('hidden')\n }\n trapFocus()\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('keydown', handleKeyDown, true)\n setHtmlOverflow('auto')\n if (cleanupFocusTrap) {\n cleanupFocusTrap()\n }\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div v-if=\"isOpen\" @click=\"handleBackdropClick\" :class=\"modalOuterClasses\">\n <!-- Backdrop -->\n <div class=\"fixed top-0 left-0 w-full h-full bg-black/34 z-99\"></div>\n\n <!-- Modal Inner -->\n <div class=\"fds-modal-inner\" :class=\"modalInnerClasses\" role=\"alertdialog\" aria-modal=\"true\" @click.stop>\n <!-- Header -->\n <div class=\"flex justify-between mb-4\">\n <h3 tabindex=\"-1\" :class=\"headerTitleClasses\">\n <FdsIcon v-if=\"iconName\" :name=\"iconName\" :size=\"24\" :class=\"iconClasses\" />\n {{ heading }}\n </h3>\n <FdsButtonIcon\n v-if=\"!strict\"\n icon=\"cross\"\n :size=\"28\"\n @click=\"handleClose('icon')\"\n :ariaLabel=\"closeLabel\"\n class=\"ml-4\"\n />\n </div>\n\n <!-- Content -->\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooterSlot\" :class=\"footerClasses\">\n <slot name=\"modal-footer\" />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._rawInputValue = '';\n this.history = new InputHistory();\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl('auto');\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl('auto');\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n undo: this._onUndo,\n redo: this._onRedo\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) this.updateValue();\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!this.optionsIsChanged(opts)) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n this.doCommit();\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (inserted === void 0) {\n inserted = '';\n }\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n pad(flags) {\n return this._appendPlaceholder();\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n if (!state) {\n this.reset();\n return;\n }\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.DEFAULTS,\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\n }));\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null || _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.DEFAULTS,\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: enum_,\n ...eopts\n } = opts;\n if (enum_) {\n const lengths = enum_.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = enum_;\n }\n super._update(eopts);\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n // just drop tail\n return new ContinuousTailDetails('', fromPos);\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\n};\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nvar _MaskedNumber;\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.DEFAULTS,\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [_MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n// @ts-ignore - IMask types may not be resolved in build\nimport IMask from 'imask'\nimport FdsButtonIcon from '../../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsButtonMinor from '../../Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsInputProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsInputProps>(), {\n value: undefined,\n label: undefined,\n disabled: false,\n valid: undefined,\n optional: false,\n required: false,\n labelLeft: false,\n meta: undefined,\n type: 'text',\n passwordLabels: undefined,\n clearButton: false,\n name: undefined,\n id: undefined,\n mask: undefined,\n maskOptions: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'clearInput'): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-input-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst clearButtonLabel = computed(() => (props.locale === 'sv' ? 'Rensa input' : 'Clear input'))\n\nconst showInvalidMessage = computed(() => props.valid === 'false' && !props.optional && props.invalidMessage)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\nconst isValid = computed(() => props.valid === 'true')\nconst showPasswordToggle = computed(() => isPasswordType.value && internalValue.value.length > 0)\n\nconst inputClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-[calc(0.75rem-1px)] mb-6',\n 'focus:outline-2 focus:outline-blue-500 -outline-offset-2 focus:border-transparent',\n props.disabled ? 'outline-dashed outline-2 outline-gray-400 cursor-not-allowed border-transparent' : 'bg-white',\n isInvalid.value && 'outline-2 outline-red-600',\n])\n\nconst validationIconClasses = computed(() => [\n 'absolute flex gap-2 right-4 top-1/2 -translate-y-1/2 flex items-center justify-end',\n])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () =>\n // If modelValue is explicitly set (via v-model), use it\n // Otherwise fall back to value prop\n modelValue.value !== undefined ? modelValue.value : (props.value ?? ''),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n\nfunction onClear() {\n internalValue.value = ''\n emit('clearInput')\n}\n\nconst showPassword = ref(false)\nconst isPasswordType = computed(() => props.type === 'password')\n\nfunction toggleShowPassword() {\n showPassword.value = !showPassword.value\n}\n\n// IMask setup\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nlet maskInstance: any = null\n\nconst createMask = () => {\n // Destroy existing mask if any\n if (maskInstance) {\n maskInstance.destroy()\n maskInstance = null\n }\n\n // Create new mask if mask prop is provided and input exists\n if (props.mask && inputRef.value) {\n const maskConfig = {\n mask: props.mask,\n ...props.maskOptions,\n }\n\n maskInstance = IMask(inputRef.value, maskConfig as any)\n\n // Sync mask value with internalValue\n if (internalValue.value) {\n maskInstance.value = internalValue.value\n }\n\n // Update internalValue when mask value changes\n maskInstance.on('accept', () => {\n if (maskInstance) {\n internalValue.value = maskInstance.value\n }\n })\n }\n}\n\nonMounted(() => {\n nextTick(() => {\n createMask()\n })\n})\n\nonBeforeUnmount(() => {\n if (maskInstance) {\n maskInstance.destroy()\n maskInstance = null\n }\n})\n\n// Watch for mask prop changes and recreate mask\nwatch(\n () => props.mask,\n () => {\n nextTick(() => {\n createMask()\n })\n },\n)\n\n// Watch for external value changes and update mask\nwatch(\n () => props.value,\n (newValue) => {\n if (maskInstance && newValue !== undefined && newValue !== maskInstance.value) {\n maskInstance.value = newValue\n }\n },\n)\n\nwatch(\n () => modelValue.value,\n (newValue) => {\n if (maskInstance && newValue !== undefined && newValue !== maskInstance.value) {\n maskInstance.value = newValue\n }\n },\n)\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <div :class=\"{ 'flex flex-row gap-4': labelLeft }\">\n <div>\n <label\n v-if=\"label\"\n :for=\"inputId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >{{ label }}</label\n >\n <div\n v-if=\"meta\"\n class=\"font-thin\"\n :class=\"{ 'mb-1': !labelLeft }\"\n >\n {{ meta }}\n </div>\n </div>\n <div :class=\"{ 'flex-1': labelLeft }\">\n <div class=\"relative\">\n <input\n ref=\"inputRef\"\n :id=\"inputId\"\n :name=\"name || undefined\"\n :type=\"isPasswordType ? (showPassword ? 'text' : 'password') : type\"\n :disabled=\"disabled\"\n :required=\"required\"\n :size=\"size as any\"\n :maxlength=\"maxlength as any\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"inputClasses\"\n v-bind=\"$attrs\"\n @input=\"$emit('input', $event)\"\n />\n <div :class=\"validationIconClasses\">\n <FdsIcon\n v-if=\"isInvalid\"\n name=\"alert\"\n class=\"fill-red-600\"\n />\n <FdsIcon\n v-if=\"isValid\"\n name=\"bigSuccess\"\n />\n <FdsButtonIcon\n v-if=\"clearButton && !!internalValue && !disabled\"\n icon=\"cross\"\n :ariaLabel=\"clearButtonLabel\"\n @click=\"onClear\"\n />\n <FdsButtonMinor\n v-if=\"showPasswordToggle\"\n :icon=\"showPassword ? 'viewOff' : 'viewOn'\"\n text=\"\"\n @click=\"toggleShowPassword\"\n />\n </div>\n </div>\n </div>\n </div>\n <div\n v-if=\"showInvalidMessage\"\n class=\"text-red-600 font-bold mt-1\"\n >\n {{ invalidMessage }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsSpinner from '../FdsSpinner/FdsSpinner.vue'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport type { FdsPaginationProps } from './types'\n\nconst props = withDefaults(defineProps<FdsPaginationProps>(), {\n id: undefined,\n loading: false,\n})\n\nconst emit = defineEmits<{\n (e: 'paginate', payload: { target: { id: string }; detail: number }): void\n}>()\n\nconst loadingIndicator = ref<'start' | 'prev' | 'input' | 'next' | 'end' | ''>('')\nconst internalValue = ref(props.current)\n\nconst autoId = `fds-pagination-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst inputValue = computed(() => String(internalValue.value))\n\nwatch(\n () => props.current,\n (newValue) => {\n internalValue.value = newValue\n },\n)\n\nconst debounce = <T extends (...args: any[]) => void>(fn: T, delay = 300) => {\n let timer: ReturnType<typeof setTimeout>\n return (...args: Parameters<T>) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n\nconst handlePageChange = debounce((event: Event) => {\n const target = event.target as HTMLInputElement\n const incomingPage = Number.parseInt(target.value)\n\n if (Number.isNaN(incomingPage)) {\n internalValue.value = props.current\n return\n }\n\n loadingIndicator.value = 'input'\n\n let page = props.current\n if (incomingPage > props.max) {\n page = props.max\n } else if (incomingPage < 1) {\n page = 1\n } else {\n page = incomingPage\n }\n\n internalValue.value = page\n emit('paginate', { target: { id: inputId.value }, detail: page })\n}, 500)\n\nconst handlePagination = (action: 'start' | 'prev' | 'next' | 'end') => {\n let page = 0\n\n switch (action) {\n case 'start':\n if (props.current === 1) return\n loadingIndicator.value = 'start'\n page = 1\n break\n case 'prev':\n if (props.current === 1) return\n loadingIndicator.value = 'prev'\n page = props.current === 1 ? props.current : props.current - 1\n break\n case 'next':\n if (props.current === props.max) return\n loadingIndicator.value = 'next'\n page = props.current === props.max ? props.current : props.current + 1\n break\n case 'end':\n if (props.current === props.max) return\n loadingIndicator.value = 'end'\n page = props.max\n break\n }\n\n emit('paginate', { target: { id: inputId.value }, detail: page })\n}\n</script>\n\n<template>\n <div class=\"my-6 flex items-between justify-between gap-2\" :id=\"inputId\">\n <!-- Prev -->\n <div class=\"flex items-center justify-start gap-1 w-[100px]\">\n <FdsSpinner v-if=\"loading && loadingIndicator === 'start'\" size=\"32px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"first\"\n :size=\"28\"\n :disabled=\"current === 1\"\n :ariaDisabled=\"current === 1\"\n :class=\"{ 'hidden!': current === 1 }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('start')\"\n />\n\n <FdsSpinner v-if=\"loading && loadingIndicator === 'prev'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"arrowLeft\"\n :size=\"28\"\n :disabled=\"current === 1\"\n :ariaDisabled=\"current === 1\"\n :class=\"{ 'hidden!': current === 1 }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('prev')\"\n />\n </div>\n\n <!-- Numbers -->\n <div class=\"flex items-center justify-center w-auto gap-2 order-0 sm:order-0\">\n <FdsSpinner\n v-if=\"loading && loadingIndicator === 'input'\"\n size=\"24px\"\n color=\"blue\"\n label=\"Laddar\"\n label-position=\"right\"\n />\n <template v-else>\n <FdsInput\n :value=\"inputValue\"\n type=\"text\"\n :size=\"max.toString().length\"\n :maxlength=\"max.toString().length\"\n @input=\"handlePageChange\"\n class=\"mb-0! text-center\"\n />\n <div class=\"whitespace-nowrap\">/ {{ max }}</div>\n </template>\n </div>\n\n <!-- Next -->\n <div class=\"flex items-center justify-end gap-1 order-2 sm:order-0 w-[100px]\">\n <FdsSpinner v-if=\"loading && loadingIndicator === 'next'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"arrowRight\"\n :size=\"28\"\n :disabled=\"current === max\"\n :ariaDisabled=\"current === max\"\n :class=\"{ 'hidden!': current === max }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('next')\"\n />\n\n <FdsSpinner v-if=\"loading && loadingIndicator === 'end'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"last\"\n :size=\"28\"\n :disabled=\"current === max\"\n :ariaDisabled=\"current === max\"\n :class=\"{ 'hidden!': current === max }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('end')\"\n />\n </div>\n </div>\n</template>\n","import type { Ref } from 'vue'\n\n/**\n * Composable for bolding search query matches in text\n * @param searchTerm - Reactive search term (Ref<string>)\n * @returns Function that takes text and returns HTML with matched query bolded\n */\nexport function useBoldQuery(searchTerm: Ref<string>) {\n const boldQuery = (text: string): string => {\n const query = searchTerm.value.trim()\n if (!query) return text\n\n const lowerText = text.toLowerCase()\n const lowerQuery = query.toLowerCase()\n const matchIndex = lowerText.indexOf(lowerQuery)\n\n if (matchIndex === -1) return text\n\n const beforeMatch = text.substring(0, matchIndex)\n const match = text.substring(matchIndex, matchIndex + query.length)\n const afterMatch = text.substring(matchIndex + query.length)\n\n return `${beforeMatch}<b>${match}</b>${afterMatch}`\n }\n\n return {\n boldQuery,\n }\n}\n","import { computed, type Ref } from 'vue'\n\n/**\n * Check if a string looks like a personnummer (Swedish personal identity number)\n * @param value - String value to check\n * @returns Boolean indicating if the value looks like a personnummer\n */\nexport function isPidString(value: string): boolean {\n const digitsOnly = value.replace(/\\D/g, '')\n\n // Personnummer has 12 digits total (8 digits before dash, 4 after)\n // Activate detection when user has typed 6+ digits (likely a date yyyymmdd)\n // This avoids detecting phone numbers which typically start with +46, 0, or have different patterns\n if (digitsOnly.length < 6) {\n return false\n }\n\n // Check if it looks like a date (first 6 digits should be reasonable year + month)\n // Years are typically 19xx-20xx, months 01-12\n const firstSix = digitsOnly.substring(0, 6)\n const year = parseInt(firstSix.substring(0, 4))\n const month = parseInt(firstSix.substring(4, 6))\n\n // Valid year range (1900-2099) and valid month (01-12)\n if (year >= 1900 && year <= 2099 && month >= 1 && month <= 12) {\n return true\n }\n\n // If user has typed 8+ digits, assume it's a personnummer\n if (digitsOnly.length >= 8) {\n return true\n }\n\n return false\n}\n\n/**\n * Composable for detecting if a string looks like a personnummer (Swedish personal identity number)\n * @param value - Reactive string value to check (Ref<string>)\n * @returns Computed boolean indicating if the value looks like a personnummer\n */\nexport function useIsPid(value: Ref<string>) {\n const isPid = computed(() => isPidString(value.value))\n\n return {\n isPid,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useBoldQuery } from '../../composables/useBoldQuery'\nimport { isPidString, useIsPid } from '../../composables/useIsPid'\nimport FdsIcon from '../FdsIcon/FdsIcon.vue'\nimport FdsPagination from '../FdsPagination/FdsPagination.vue'\nimport FdsSpinner from '../FdsSpinner/FdsSpinner.vue'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport type { FdsSearchSelectProps } from './types'\n\nconst props = withDefaults(defineProps<FdsSearchSelectProps>(), {\n items: () => [],\n page: undefined,\n totalPages: undefined,\n totalCount: undefined,\n loading: false,\n searchFields: () => [],\n preserveOrder: false,\n initialValue: '',\n disabled: false,\n dropdownAbsolute: false,\n labelLeft: false,\n label: '',\n meta: undefined,\n singleItemLabel: '',\n searchContext: () => ({ context: '', linkWord: '' }),\n valid: undefined,\n invalidMessage: '',\n noResultPrompt: '',\n borderless: false,\n marginless: false,\n maxListHeight: undefined,\n locale: 'sv',\n clearTrigger: false,\n})\n\nconst searchFields = computed(() => props.searchFields ?? [])\n\nconst emit = defineEmits<{\n (e: 'searchSelected', value: Record<string, unknown> | null): void\n (e: 'paginate', value: number): void\n (e: 'total', value: number): void\n (e: 'change', value: string): void\n}>()\n\nconst dropdownVisible = ref(false)\nconst singleItemName = ref('')\nconst searchTerm = ref('')\nconst matchingItems = ref<Array<Record<string, unknown>>>([])\nconst displayedItems = ref<Array<Record<string, unknown>>>([])\nconst selectedItem = ref<Record<string, unknown> | null>(null)\nconst focusedIndex = ref<number>(-1)\nconst valid = ref<string | undefined>(props.valid)\n\n// Use prop.totalCount if provided, otherwise calculate from items.length\nconst totalCount = computed(() => {\n if (props.totalCount !== undefined) {\n return props.totalCount\n }\n return props.items?.length || 0\n})\n\nwatch(\n () => props.valid,\n (newValue) => {\n valid.value = newValue\n },\n)\n\nconst componentRef = ref<HTMLElement | null>(null)\nconst inputId = `searchSelectInput-${Math.random().toString(36).slice(2, 9)}`\n\nconst hasInputValue = computed(() => searchTerm.value.length > 0)\n\nconst listWrapperClasses = computed(() => [\n 'rounded-md box-border overflow-hidden z-4 w-full bg-white mt-2',\n props.marginless ? 'mb-0' : 'mb-8',\n props.borderless ? 'shadow-lg border-none' : 'border border-gray-200',\n props.dropdownAbsolute ? 'absolute right-0 z-50' : 'relative',\n props.maxListHeight && 'overflow-y-scroll',\n])\n\nconst listItemClasses = computed(() => [\n 'block m-0',\n 'outline-none! hover:bg-blue_t-100 active:bg-blue_t-200',\n props.borderless && 'border-b border-blue_t-200',\n])\n\nconst listWrapperStyle = computed(() => {\n if (!props.maxListHeight) return null\n\n // Convert to number in case it's passed as a string\n const maxHeight = typeof props.maxListHeight === 'string' ? parseInt(props.maxListHeight, 10) : props.maxListHeight\n\n return { maxHeight: `${maxHeight}px` }\n})\n\nconst sortResponse = (response: Array<Record<string, unknown>>) => {\n if (!response.length) return []\n const firstItem = response[0] ?? {}\n const allKeys = [...searchFields.value, ...Object.keys(firstItem).filter((k) => !searchFields.value.includes(k))]\n return response.map((item) => {\n const sorted: Record<string, unknown> = {}\n allKeys.forEach((key) => {\n sorted[key] = item[key] || `${key}: den här uppgiften saknas.`\n })\n return sorted\n })\n}\n\nconst matchesSearchTerm = (item: Record<string, unknown>): boolean => {\n if (!searchTerm.value) return true\n\n // When mask is active, use unmasked value (digits only) for searching\n // This ensures we can search even when user has partially typed a PID\n const searchValue = isPid.value ? searchTerm.value.replace(/\\D/g, '') : searchTerm.value\n\n const searchLower = searchValue.toLowerCase()\n const pidRegex = /^\\d{8}[a-zA-Z0-9]{4}$/\n\n // If search term matches PID pattern (unmasked), include all items\n if (pidRegex.test(searchValue)) return true\n\n // Check if any searchFields field contains the search term\n // For PID fields, also check unmasked version\n return searchFields.value.some((key) => {\n const value = item[key]\n if (!value) return false\n\n const stringValue = String(value)\n const valueLower = stringValue.toLowerCase()\n const unmaskedValue = stringValue.replace(/\\D/g, '')\n\n // Check both masked and unmasked versions\n return valueLower.includes(searchLower) || (unmaskedValue.length > 0 && unmaskedValue.includes(searchValue))\n })\n}\n\nconst filterAndPaginate = () => {\n if (!props.items?.length) {\n matchingItems.value = []\n displayedItems.value = []\n emit('total', 0)\n return\n }\n\n // Filter items based on search term\n let sourceData = props.items ?? []\n if (props.preserveOrder && sourceData.length) {\n sourceData = sortResponse(sourceData)\n }\n\n const matchedArray = sourceData.filter((item) => matchesSearchTerm(item))\n matchingItems.value = matchedArray\n\n // Never paginate internally - just show all filtered items\n // Parent component is responsible for pagination if needed\n displayedItems.value = matchedArray\n\n emit('total', matchingItems.value.length)\n}\n\nconst handleClear = () => {\n searchTerm.value = ''\n selectedItem.value = null\n valid.value = 'null'\n emit('searchSelected', null)\n dropdownVisible.value = false\n filterAndPaginate()\n}\n\nwatch(\n () => props.clearTrigger,\n (value) => value && handleClear(),\n)\n\nwatch(\n () => props.items,\n () => {\n filterAndPaginate()\n },\n { immediate: true },\n)\n\nconst formatPidWithDash = (value: string): string => {\n // Only format if it looks like a personnummer\n if (!isPidString(value)) {\n // If it's not a PID, remove any trailing dash that might be left\n return value.replace(/-$/, '')\n }\n\n // Remove all non-digits\n const digits = value.replace(/\\D/g, '')\n\n // Only add dash if there are digits after the first 8\n if (digits.length > 8) {\n return `${digits.substring(0, 8)}-${digits.substring(8)}`\n }\n\n // If exactly 8 digits or less, return without dash\n return digits\n}\n\nconst debounce = <T extends (...args: any[]) => void>(fn: T, delay: number) => {\n let timeout: ReturnType<typeof setTimeout>\n return (...args: Parameters<T>) => {\n clearTimeout(timeout)\n timeout = setTimeout(() => fn(...args), delay)\n }\n}\n\nconst debouncedEmitChange = debounce((value: string) => {\n const formattedValue = formatPidWithDash(value)\n emit('change', formattedValue)\n}, 500)\n\nwatch(\n () => searchTerm.value,\n (newValue) => {\n filterAndPaginate()\n if (selectedItem.value === null) {\n debouncedEmitChange(newValue)\n }\n },\n)\n\nwatch(\n () => props.page,\n () => {\n filterAndPaginate()\n },\n)\n\n// Reset focused index when items change\nwatch(\n () => displayedItems.value,\n () => {\n focusedIndex.value = -1\n },\n)\n\nconst onClickOutside = (e: PointerEvent) => {\n const target = e.target as Element\n if (componentRef.value?.contains(target)) return\n\n dropdownVisible.value = false\n if (props.initialValue === searchTerm.value && props.initialValue.length) {\n valid.value = 'true'\n } else if (searchTerm.value.length > 0 && selectedItem.value === null) {\n valid.value = 'false'\n }\n}\n\nconst totalPages = computed(() => {\n // Only return totalPages if both page and totalPages props are provided\n if (props.page !== undefined && props.totalPages !== undefined) {\n return props.totalPages\n }\n return null\n})\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement\n const { value } = target\n\n searchTerm.value = value\n dropdownVisible.value = true\n selectedItem.value = null\n focusedIndex.value = -1\n valid.value = 'null'\n filterAndPaginate()\n}\n\n// Personnummer detection using composable\nconst { isPid } = useIsPid(searchTerm)\n\n// Bold query matches using composable\nconst { boldQuery } = useBoldQuery(searchTerm)\n\n// Mask configuration for personnummer (yyyymmdd-nnnn)\nconst pidMask = computed(() => {\n if (isPid.value) {\n return '00000000-0000'\n }\n return undefined\n})\n\nconst handleMatchingString = (item: Record<string, unknown>): string => {\n const values = searchFields.value.map((key) => String(item[key] || ''))\n\n let result = ''\n if (values.length === 1) {\n result = values[0] || ''\n } else {\n // Format PID if second value is 12 digits\n if (values[1]?.length === 12 && parseInt(values[1])) {\n values[1] = formatPidWithDash(values[1])\n }\n\n if (props.preserveOrder) {\n // Combine first two values, then join remaining with <br>\n const combined = `${values[0]} (${values[1]})`\n const rest = values.slice(2).join('<br>')\n result = rest ? `${combined}<br>${rest}` : combined\n } else {\n result = `${values.join(' (')})`\n }\n }\n\n if (searchTerm.value) {\n const formattedTerm = formatPidWithDash(searchTerm.value)\n if (formattedTerm !== searchTerm.value) {\n searchTerm.value = formattedTerm\n }\n\n const escaped = formattedTerm.replace(/[()]/g, '\\\\$&')\n if (new RegExp(escaped, 'i').test(result)) {\n return boldQuery(result)\n }\n }\n\n return result\n}\n\nconst handlePagination = (payload: { target: { id: string }; detail: number }) => {\n const newPage = payload.detail\n emit('paginate', newPage)\n}\n\nconst selectItem = (item: Record<string, unknown>) => {\n selectedItem.value = item\n valid.value = 'true'\n emit('searchSelected', item)\n}\n\nconst handleClick = (e: MouseEvent | KeyboardEvent, item: Record<string, unknown>) => {\n const keyEvent = e as KeyboardEvent\n if (keyEvent.key === 'Enter' || keyEvent.code === 'Space' || e.type === 'mouseup') {\n // Prevent event from bubbling and triggering other handlers\n e.preventDefault()\n e.stopPropagation()\n\n const firstField = searchFields.value[0]\n searchTerm.value = (firstField ? (item[firstField] as string) : '') || ''\n selectItem(item)\n focusedIndex.value = -1\n dropdownVisible.value = false\n\n // Focus input after a short delay to prevent dropdown from reopening\n setTimeout(() => {\n const input = document.getElementById(inputId) as HTMLInputElement\n if (input) {\n input.focus()\n }\n }, 100)\n }\n}\n\nconst handleInputFocus = () => {\n // Only open dropdown if an item hasn't been selected and there are items to show\n if (!selectedItem.value && displayedItems.value.length > 0) {\n dropdownVisible.value = true\n }\n}\n\nconst handleListKeyDown = (e: KeyboardEvent) => {\n // Handle keyboard events when focus is anywhere in the list (including radio buttons)\n // Only handle if the target is a radio button or list item\n const target = e.target as HTMLElement\n const isRadioButton = target.tagName === 'INPUT' && (target as HTMLInputElement).type === 'radio'\n const isListItem = target.closest('li[role=\"option\"]')\n if (isRadioButton || isListItem) {\n handleInputKeyDown(e)\n }\n}\n\nconst handleInputKeyDown = (e: KeyboardEvent) => {\n if (!dropdownVisible.value && displayedItems.value.length > 0) {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n e.preventDefault()\n dropdownVisible.value = true\n focusedIndex.value = 0\n setTimeout(() => {\n const firstRadioButton = document.getElementById(`search-select-radio-0`) as HTMLInputElement\n if (firstRadioButton) {\n firstRadioButton.focus()\n firstRadioButton.setAttribute('checked', 'true')\n }\n }, 0)\n return\n }\n }\n\n if (!dropdownVisible.value) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n e.stopPropagation()\n if (focusedIndex.value < displayedItems.value.length - 1) {\n focusedIndex.value++\n } else {\n focusedIndex.value = 0\n }\n break\n\n case 'ArrowUp':\n e.preventDefault()\n e.stopPropagation()\n if (focusedIndex.value > 0) {\n focusedIndex.value--\n } else {\n focusedIndex.value = displayedItems.value.length - 1\n }\n break\n\n case 'Enter':\n e.preventDefault()\n if (focusedIndex.value >= 0 && focusedIndex.value < displayedItems.value.length) {\n const focusedItem = displayedItems.value[focusedIndex.value]\n if (focusedItem) {\n handleClick(e, focusedItem)\n }\n } else if (displayedItems.value.length === 1) {\n const onlyItem = displayedItems.value[0]\n if (onlyItem) {\n handleClick(e, onlyItem)\n }\n }\n break\n\n case 'Escape':\n e.preventDefault()\n dropdownVisible.value = false\n focusedIndex.value = -1\n const input = document.getElementById(inputId) as HTMLInputElement\n input?.focus()\n break\n\n case 'Tab':\n // Let default tab behavior handle focus navigation\n // When list is open, first list-item has tabindex=\"0\" so Tab will go there\n // When list is closed, Tab will go to next element normally\n if (!dropdownVisible.value) {\n dropdownVisible.value = false\n focusedIndex.value = -1\n }\n break\n }\n}\n\nonMounted(() => {\n if (props.initialValue) {\n searchTerm.value = props.initialValue\n valid.value = 'true'\n }\n\n window.addEventListener('mouseup', onClickOutside as EventListener)\n\n nextTick(() => {\n const input = document.getElementById(inputId)\n if (input) {\n input.addEventListener('keydown', handleInputKeyDown)\n input.addEventListener('focus', handleInputFocus)\n }\n })\n\n filterAndPaginate()\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('mouseup', onClickOutside as EventListener)\n const input = document.getElementById(inputId)\n if (input) {\n input.removeEventListener('keydown', handleInputKeyDown)\n input.removeEventListener('focus', handleInputFocus)\n }\n})\n</script>\n\n<template>\n <div\n ref=\"componentRef\"\n class=\"fds-search-select block mb-6\"\n >\n <div class=\"relative block\">\n <div\n v-if=\"!singleItemName.length\"\n class=\"relative\"\n >\n <div class=\"relative\">\n <FdsInput\n :label=\"label\"\n :meta=\"meta ?? undefined\"\n :labelLeft=\"labelLeft\"\n class=\"relative mb-0! w-full!\"\n :valid=\"valid\"\n :invalidMessage=\"invalidMessage\"\n :disabled=\"disabled\"\n :locale=\"locale\"\n type=\"search\"\n :value=\"searchTerm\"\n :id=\"inputId\"\n :clearButton=\"!!searchTerm\"\n :mask=\"pidMask\"\n :maskOptions=\"{ lazy: true }\"\n @input=\"handleInput\"\n @clearInput=\"handleClear\"\n />\n <FdsIcon\n v-if=\"!disabled && !hasInputValue\"\n name=\"search\"\n :size=\"24\"\n class=\"absolute right-3 bottom-6 translate-y-1/2 fill-blue-500\"\n />\n </div>\n </div>\n <div v-else>\n <div class=\"font-bold mb-2 tracking-wide\">{{ singleItemLabel }}</div>\n <div>{{ singleItemName }}</div>\n </div>\n\n <!-- Dropdown List -->\n <div\n v-if=\"dropdownVisible && !singleItemName.length && !disabled\"\n :class=\"listWrapperClasses\"\n :style=\"listWrapperStyle\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"false\"\n aria-controls=\"select-dropdown\"\n >\n <!-- Loading -->\n <div\n v-if=\"loading\"\n class=\"flex justify-center p-4\"\n >\n <FdsSpinner\n color=\"blue\"\n size=\"48px\"\n />\n </div>\n\n <!-- Results -->\n <template v-else-if=\"displayedItems && displayedItems.length\">\n <!-- Header -->\n <div\n v-if=\"searchTerm && searchTerm.length\"\n class=\"block m-0 font-light p-6 border-b border-gray-200 rounded-t-md\"\n >\n {{ displayedItems.length }} {{ searchContext.linkWord }} {{ totalCount }}\n {{ searchContext.context }}\n </div>\n <div\n v-else-if=\"!searchTerm.length\"\n class=\"block m-0 font-light p-4 border-b border-gray-200 rounded-t-md\"\n >\n {{ totalCount }} {{ searchContext.context }}\n </div>\n\n <!-- List -->\n <ul\n class=\"block m-0 list-none p-0\"\n role=\"listbox\"\n id=\"select-dropdown\"\n @keydown=\"handleListKeyDown\"\n >\n <li\n v-for=\"(item, index) in displayedItems\"\n :key=\"index\"\n :id=\"`search-select-item-${index}`\"\n class=\"block m-0 hover:outline-none focus:outline-2 focus:outline-blue-500 -outline-offset-2\"\n :class=\"[focusedIndex === index && 'outline-dashed outline-2 outline-blue-500 -outline-offset-2 ']\"\n role=\"option\"\n :aria-selected=\"focusedIndex === index\"\n :tabindex=\"dropdownVisible && focusedIndex === index ? 0 : -1\"\n @mouseup=\"(e) => handleClick(e, item)\"\n @mouseenter=\"focusedIndex = index\"\n @keydown.enter=\"(e) => handleClick(e, item)\"\n @keydown.space.prevent=\"(e) => handleClick(e, item)\"\n >\n <input\n type=\"radio\"\n :id=\"`search-select-radio-${index}`\"\n name=\"social-account\"\n class=\"absolute left-0 opacity-0\"\n :checked=\"focusedIndex === index\"\n :key=\"`radio-${index}-${focusedIndex}`\"\n tabindex=\"-1\"\n />\n <label\n :for=\"`search-select-radio-${index}`\"\n class=\"block p-4 text-gray-700 cursor-pointer no-underline\"\n :class=\"listItemClasses\"\n v-html=\"handleMatchingString(item)\"\n ></label>\n </li>\n </ul>\n\n <!-- Pagination -->\n <FdsPagination\n v-if=\"page !== undefined && totalPages !== null && totalPages > 1\"\n :current=\"page\"\n :max=\"totalPages\"\n @paginate=\"handlePagination\"\n class=\"my-4! px-2\"\n />\n </template>\n\n <!-- No Results -->\n <ul\n v-else-if=\"!loading\"\n class=\"block m-0 list-none p-0\"\n >\n <li class=\"p-4\">\n {{ noResultPrompt }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsStickerProps } from './types'\n\nconst props = withDefaults(defineProps<FdsStickerProps>(), {\n variant: 'blue',\n bullet: false,\n})\n\nconst stickerClasses = computed(() => [\n 'inline-block font-bold text-sm leading-[18px] tracking-normal py-0.5 px-3 rounded-xl border border-transparent whitespace-nowrap max-w-full',\n props.bullet\n ? 'text-base! bg-transparent flex-wrap justify-start items-baseline text-base font-normal text-gray-700 border-transparent p-0 mr-3'\n : '',\n // Variant colors\n props.variant === 'blue' && !props.bullet && 'bg-blue-600 text-white',\n props.variant === 'green' && !props.bullet && 'bg-green-700 text-white',\n props.variant === 'red' && !props.bullet && 'bg-red-600 text-white',\n props.variant === 'yellow' && !props.bullet && 'bg-yellow-200 text-gray-700 border-yellow-300',\n props.variant === 'gray' && !props.bullet && 'bg-gray-200 text-gray-700 border-gray-300!',\n props.variant === 't_blue' && !props.bullet && 'bg-blue_t-100 text-gray-700 border-blue_t-200!',\n])\n\nconst bulletDotClasses = computed(() => [\n 'inline-block w-3 h-3 rounded-full mr-1.5',\n // Bullet dot colors\n props.variant === 'blue' && 'bg-blue-600',\n props.variant === 'green' && 'bg-green-700',\n props.variant === 'red' && 'bg-red-600',\n props.variant === 'yellow' && 'bg-yellow-200 border border-yellow-300',\n props.variant === 'gray' && 'bg-gray-400',\n props.variant === 't_blue' && 'bg-blue-200 border border-blue-300',\n])\n</script>\n\n<template>\n <span :class=\"stickerClasses\">\n <span\n v-if=\"bullet\"\n :class=\"bulletDotClasses\"\n ></span>\n <slot />\n </span>\n</template>\n","import type { FdsTreeNode } from './types'\n\nconst getTitleFromProperties = (node: FdsTreeNode, titleTemplate?: string) => {\n if (!titleTemplate) {\n return node.title\n }\n\n const template = titleTemplate ?? ''\n\n // Extract all occurrences of content inside [[]] in the template string\n const templateVariables = extractTemplateVariables(template)\n\n // Replace template variables with actual values\n let result = template\n templateVariables.forEach((variable) => {\n const value = getNodePropertyValue(node, variable)\n const regex = new RegExp(`\\\\[\\\\[${variable.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\]\\\\]`, 'g')\n result = result.replace(regex, value)\n })\n\n return result\n}\n\n/**\n * Extract all occurrences of content inside [[]] in a string\n * @param template - The template string containing [[]] placeholders\n * @returns Array of variable names found in the template\n */\nconst extractTemplateVariables = (template: string): string[] => {\n const regex = /\\[\\[([^\\]]+)\\]\\]/g\n const matches: string[] = []\n let match\n\n while ((match = regex.exec(template)) !== null) {\n if (match[1]) {\n matches.push(match[1])\n }\n }\n\n return matches\n}\n\n/**\n * Get property value from node object\n * @param node - The tree node\n * @param property - The property name to extract\n * @returns The property value as string\n */\nconst getNodePropertyValue = (node: FdsTreeNode, property: string): string => {\n // Handle direct properties\n if (property in node) {\n const value = node[property as keyof FdsTreeNode]\n return value ? String(value) : ''\n }\n\n // Handle nested data properties\n if (node.data && typeof node.data === 'object') {\n const dataRecord = node.data as Record<string, unknown>\n const dataValue = dataRecord[property]\n if (dataValue !== undefined && dataValue !== null) {\n return String(dataValue)\n }\n }\n\n // Return empty string if property not found\n return ''\n}\n\nexport { getTitleFromProperties }\n","import { computed, reactive, ref, watch } from 'vue'\nimport type { FdsIconName } from '../FdsIcon/types'\nimport type { FdsTreeNode, FdsTreeNodeArray, FdsTreeNodeItem } from './types'\nimport { getTitleFromProperties } from './utils'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n searchExpandNodes?: boolean\n titleTemplate?: string\n searchInputTriggerLength?: number\n nodes?: FdsTreeNodeArray\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /** Default the trigger length to 1 when not provided */\n const triggerLength = options?.searchInputTriggerLength ?? 1\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<FdsTreeNode['nodeId']>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<FdsTreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<FdsTreeNode['nodeId']>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * If no results are found for the search term\n */\n const isEmptySearchResult = ref<boolean>(false)\n\n // Watch for search term changes to update empty result flag\n watch(searchTerm, (newTerm) => {\n if (!newTerm.trim() || newTerm.length < triggerLength) {\n isEmptySearchResult.value = false\n } else if (options.nodes && options.nodes.length > 0) {\n // Check if there are any results for the new search term\n // The tree structure has a root node with children, so we need to check the root's children\n const rootNode = options.nodes[0]\n const nodesToCheck = rootNode?.children || []\n const filtered = filterNodesRecursive(nodesToCheck, newTerm, ['title', 'nodeId'])\n isEmptySearchResult.value = filtered.length === 0\n }\n })\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: FdsTreeNode['nodeId']) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.delete(nodeId)\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: FdsTreeNode) => {\n // Prevent duplicates\n if (selectedNodes.has(nodeObject.nodeId)) return\n\n selectedNodes.add(nodeObject.nodeId)\n if (!selectedNodeObjects.some((n) => n.nodeId === nodeObject.nodeId)) {\n selectedNodeObjects.push(nodeObject)\n }\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: FdsTreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: FdsTreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectNodeAndAllChildren = (nodeId: FdsTreeNode['nodeId']) => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return\n\n // Select the current node\n injectNode(node)\n\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: FdsTreeNode['nodeId']) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectNodeAndAllChildren = (node: FdsTreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n }\n\n /**\n * Deselects only the children of the specific node\n */\n const deselectChildrenOnly = (nodeId: FdsTreeNode['nodeId']) => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return\n\n // Ensure parent remains selected\n selectedNodes.add(node.nodeId)\n if (!selectedNodeObjects.some((n) => n.nodeId === node.nodeId)) {\n selectedNodeObjects.push(node)\n }\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: FdsTreeNodeArray, nodeId: string): FdsTreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeObjectById = (nodeId: string): FdsTreeNodeItem | null => {\n const nodes = Array.isArray(options.nodes) ? options.nodes : []\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: FdsTreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentOrChildrenSelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node || !hasChildrenNodes(node.children || [])) return false\n\n return selectedNodes.has(node.nodeId) || isAnyChildSelected(node.children || [])\n }\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentAndAllChildrenSelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return false\n // Parent must be selected and all children\n return selectedNodes.has(node.nodeId) && isEveryChildSelected(node)\n }\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentOnlySelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node || !hasChildrenNodes(node.children || [])) return false\n\n return !isAnyChildSelected(node.children || []) && selectedNodes.has(node.nodeId)\n }\n\n /**\n * Returns true if ALL children of a node are selected\n */\n const isEveryChildSelected = (node: FdsTreeNode): boolean => {\n if (!node.children || node.children.length === 0) return true\n\n return node.children.every((child) => selectedNodes.has(child.nodeId) && isEveryChildSelected(child))\n }\n\n /**\n * Checks if any child of a node is selected\n */\n const isAnyChildSelected = (nodes: FdsTreeNodeArray): boolean => {\n if (!nodes || nodes.length === 0) return false\n return nodes.some(\n (child) => selectedNodes.has(child.nodeId) || (child.children && isAnyChildSelected(child.children)),\n )\n }\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: FdsTreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0 ? isNodeIndeterminate(node.children, node.nodeId) : false,\n }))\n\n const hasSelected = childStates.some((child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected)\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n const isNodeIndeterminateById = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n if (!node) return false\n return isNodeIndeterminate(node.children || [], nodeId)\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (nodeId: string, title?: string, data?: Record<string, unknown>) => {\n let node = findNodeObjectById(nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId,\n title,\n children: [],\n data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectNodeAndAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (selectedNodes.has(nodeId) && !expandedNodes.has(nodeId) && options.expandChildrenOnParentCheck) {\n expandNode(nodeId)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: FdsTreeNode['nodeId']) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (nodeId: FdsTreeNode['nodeId'], expandIcon: FdsIconName, collapseIcon: FdsIconName) =>\n isNodeExpanded(nodeId) ? collapseIcon : expandIcon\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: FdsTreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const normalizeForSearch = (value: unknown): string => {\n const s = String(value ?? '')\n return s\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n }\n\n const searchLower = normalizeForSearch(term)\n\n const getValueByPath = (obj: unknown, path: string): unknown => {\n if (!obj) return undefined\n // If data is an array, check each element\n if (Array.isArray(obj)) {\n for (const item of obj) {\n const v = getValueByPath(item as Record<string, unknown>, path)\n if (v !== undefined && v !== null) return v\n }\n return undefined\n }\n if (typeof obj !== 'object') return undefined\n const segments = path.split('.')\n let current: unknown = obj as Record<string, unknown>\n for (const seg of segments) {\n if (current && typeof current === 'object' && seg in (current as Record<string, unknown>)) {\n current = (current as Record<string, unknown>)[seg]\n } else {\n return undefined\n }\n }\n return current\n }\n\n for (const rawParam of searchParams) {\n const param = rawParam.startsWith('data.') ? rawParam.slice(5) : rawParam\n if (param === 'title') {\n const renderedTitle = getTitleFromProperties(node, options?.titleTemplate)\n const titleToMatch = normalizeForSearch(renderedTitle || node.title)\n if (titleToMatch.includes(searchLower)) return true\n }\n if (param === 'nodeId' && normalizeForSearch(node.nodeId).includes(searchLower)) return true\n\n const dataSource = node.data as unknown\n if (Array.isArray(dataSource)) {\n for (const item of dataSource) {\n const v = getValueByPath(item, param)\n if (v !== undefined && v !== null) {\n try {\n if (normalizeForSearch(v).includes(searchLower)) return true\n } catch {}\n }\n }\n } else {\n const value = getValueByPath(dataSource, param)\n if (value !== undefined && value !== null) {\n try {\n if (normalizeForSearch(value).includes(searchLower)) return true\n } catch {}\n }\n }\n }\n\n return false\n }\n\n /**\n * Internal recursive filtering function\n */\n const filterNodesRecursive = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): FdsTreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: FdsTreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodesRecursive(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Counts how many nodes match the search term across the provided subtree.\n */\n const countMatchingNodesRecursive = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): number => {\n if (!Array.isArray(nodes) || nodes.length === 0) return 0\n if (!term.trim()) return nodes.length\n\n let count = 0\n for (const node of nodes) {\n if (nodeMatchesSearch(node, term, searchParams)) count += 1\n if (node.children && node.children.length > 0) {\n count += countMatchingNodesRecursive(node.children, term, searchParams)\n }\n }\n return count\n }\n\n /**\n * Counts all nodes in the provided subtree.\n */\n const countAllNodesRecursive = (nodes: FdsTreeNodeArray): number => {\n if (!Array.isArray(nodes) || nodes.length === 0) return 0\n let count = 0\n for (const node of nodes) {\n count += 1\n if (node.children && node.children.length > 0) {\n count += countAllNodesRecursive(node.children)\n }\n }\n return count\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): FdsTreeNodeArray => {\n if (!term.trim() || term.length < triggerLength) {\n return nodes\n }\n\n const filtered = filterNodesRecursive(nodes, term, searchParams)\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n if (!term.trim() || term.length < triggerLength) {\n isEmptySearchResult.value = false\n }\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n isEmptySearchResult.value = false\n }\n\n /**\n * Reactive total count of nodes matching the current search term.\n * If there is no term, returns total nodes under the root's children.\n */\n const filteredMatchCount = computed<number>(() => {\n const t = String(searchTerm.value || '').trim()\n const rootNode = Array.isArray(options.nodes) && options.nodes.length > 0 ? options.nodes[0] : null\n const nodesToCheck = rootNode?.children || []\n if (!rootNode) return 0\n if (!t || t.length < triggerLength) {\n return countAllNodesRecursive(nodesToCheck)\n }\n return countMatchingNodesRecursive(nodesToCheck, t, ['title', 'nodeId'])\n })\n\n /**\n * Reactive total node count under the root's children.\n */\n const totalNodeCount = computed<number>(() => {\n const rootNode = Array.isArray(options.nodes) && options.nodes.length > 0 ? options.nodes[0] : null\n const nodesToCheck = rootNode?.children || []\n if (!rootNode) return 0\n return countAllNodesRecursive(nodesToCheck)\n })\n\n /**\n * Returns HTML string with hits from search term wrapped in <strong>.\n */\n const highlightText = (text: string | undefined, term: string | undefined): string => {\n const source = String(text ?? '')\n const t = String(term ?? '').trim()\n if (!t) return source\n try {\n const re = new RegExp(t.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'ig')\n return source.replace(re, '<strong>$&</strong>')\n } catch {\n return source\n }\n }\n\n return {\n triggerLength,\n clearSearch,\n collapseAllExpandedNodes,\n collapseNode,\n deselectNodeAndAllChildren,\n deselectChildrenOnly,\n deselectNode,\n expandAllChildren,\n expandedNodes,\n expandNode,\n filterNodes,\n getNodeIcon,\n injectNode,\n isNodeExpanded,\n isNodeIndeterminate,\n isNodeIndeterminateById,\n isNodeSelected,\n isParentOrChildrenSelected,\n isParentAndAllChildrenSelected,\n highlightText,\n searchTerm,\n filteredMatchCount,\n totalNodeCount,\n selectAllChildren,\n selectedNodeObjects,\n selectedNodes,\n setSearchTerm,\n toggleExpandNode,\n toggleSelectNode,\n isParentOnlySelected,\n selectNodeAndAllChildren,\n clearAllSelectedNodes,\n isEmptySearchResult,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed, nextTick, watch } from 'vue'\nimport type { FdsCheckboxProps } from './types'\n\n// Support v-model as boolean (single checkbox) or array (checkbox group)\n// Also support :checked prop for backward compatibility\nconst modelValue = defineModel<boolean | Array<string | number>>({\n default: undefined,\n required: false,\n})\n\nconst props = withDefaults(defineProps<FdsCheckboxProps>(), {\n label: undefined,\n checked: false,\n indeterminate: false,\n disabled: false,\n value: undefined,\n name: undefined,\n id: undefined,\n required: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', value: boolean): void\n (e: 'input', value: boolean): void\n (e: 'update:checked', value: boolean): void\n}>()\n\nconst wrapperClasses = computed(() => ['block relative flex items-center mb-2 last:mb-0'])\nconst innerWrapperClasses = computed(() => [\n 'flex p-0.5 items-start rounded-md',\n 'hover:bg-blue_t-100 active:bg-blue_t-200',\n '[&:has(:focus-visible)]:outline-2 [&:has(:focus-visible)]:outline-dashed [&:has(:focus-visible)]:-outline-offset-2 [&:has(:focus-visible)]:outline-blue-500',\n props.disabled && 'hover:bg-transparent active:bg-transparent',\n])\n\nconst checkboxClasses = computed(() => [\n 'rounded-md transition-colors duration-200 accent-blue-500 m-[3px]',\n 'peer z-2 bg-white min-w-[18px] min-h-[18px] focus-visible:outline-none',\n props.disabled && 'cursor-not-allowed',\n])\n\nconst autoId = `fds-checkbox-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst hasLabelSlot = useHasSlot()\n\n// Bridge for v-model (boolean or array) or :checked prop\nconst internalChecked = computed<boolean>({\n get: () => {\n if (modelValue.value === undefined) {\n return props.checked\n }\n // If modelValue is an array, check if this checkbox's value is in it\n if (Array.isArray(modelValue.value)) {\n return props.value !== undefined && modelValue.value.includes(props.value)\n }\n // Otherwise treat as boolean\n return modelValue.value as boolean\n },\n set: (checked: boolean) => {\n if (modelValue.value === undefined) {\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n return\n }\n\n // If modelValue is an array, add/remove this checkbox's value\n if (Array.isArray(modelValue.value)) {\n if (props.value === undefined) {\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n return\n }\n\n const newArray = [...modelValue.value]\n if (checked) {\n // Add value if not already present\n if (!newArray.includes(props.value)) {\n newArray.push(props.value)\n }\n } else {\n // Remove value if present\n const index = newArray.indexOf(props.value)\n if (index > -1) {\n newArray.splice(index, 1)\n }\n }\n modelValue.value = newArray\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n } else {\n // Boolean mode\n modelValue.value = checked\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n }\n },\n})\n\n// Set indeterminate state when prop changes\nfunction setIndeterminate() {\n const checkbox = document.getElementById(inputId.value) as HTMLInputElement\n if (checkbox) {\n checkbox.indeterminate = props.indeterminate\n }\n}\n\n// Watch for indeterminate prop changes\nwatch(\n () => props.indeterminate,\n () => {\n nextTick(() => setIndeterminate())\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <label\n :for=\"inputId\"\n :class=\"[innerWrapperClasses, { 'cursor-not-allowed': disabled }]\"\n v-bind=\"$attrs\"\n >\n <input\n :id=\"inputId\"\n :name=\"name\"\n :value=\"value\"\n v-model=\"internalChecked\"\n :disabled=\"disabled\"\n :required=\"required\"\n type=\"checkbox\"\n :class=\"[checkboxClasses]\"\n />\n <span\n v-if=\"hasLabelSlot || label\"\n class=\"relative inline-block leading-6 pl-1 select-none\"\n :class=\"{ 'cursor-not-allowed': disabled }\"\n >\n <template v-if=\"hasLabelSlot\">\n <slot></slot>\n </template>\n <template v-else-if=\"label\">\n {{ label }}\n </template>\n </span>\n </label>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed } from 'vue'\nimport type { FdsRadioProps } from './types'\n\n// Support v-model for selected value in a radio group (string|number)\nconst modelValue = defineModel<string | number>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsRadioProps>(), {\n label: undefined,\n checked: false,\n disabled: false,\n value: undefined,\n name: undefined,\n id: undefined,\n required: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | number): void\n (e: 'change', value: string | number): void\n (e: 'input', value: string | number): void\n}>()\n\nconst autoId = `fds-radio-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst hasLabelSlot = useHasSlot()\n\n// Proxy for v-model on radio groups: binds the selected value (string|number)\nconst radioModel = computed({\n get() {\n return modelValue.value\n },\n set(newChecked: string | number) {\n emit('update:modelValue', newChecked)\n emit('change', newChecked)\n emit('input', newChecked)\n },\n})\n\nconst wrapperClasses = computed(() => ['block relative flex items-center mb-2 last:mb-0'])\nconst innerWrapperClasses = computed(() => [\n 'flex p-0.5 items-start rounded-l-xl rounded-r-md',\n 'hover:bg-blue_t-100 active:bg-blue_t-200',\n '[&:has(:focus-visible)]:outline-2 [&:has(:focus-visible)]:outline-dashed [&:has(:focus-visible)]:-outline-offset-2 [&:has(:focus-visible)]:outline-blue-500',\n props.disabled && 'hover:bg-transparent active:bg-transparent',\n])\n\nconst inputClasses = computed(() => [\n 'peer z-2 bg-white min-w-[20px] min-h-[20px] focus-visible:outline-none rounded-full accent-blue-500',\n props.disabled && 'cursor-not-allowed',\n])\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <label\n :for=\"inputId\"\n :class=\"[innerWrapperClasses, { 'cursor-not-allowed': disabled }]\"\n v-bind=\"$attrs\"\n >\n <input\n :id=\"inputId\"\n :name=\"name\"\n :value=\"value\"\n v-model=\"radioModel\"\n :disabled=\"disabled\"\n :required=\"required\"\n type=\"radio\"\n :class=\"inputClasses\"\n class=\"m-[2px]\"\n />\n <span\n v-if=\"hasLabelSlot || label\"\n class=\"relative inline-block leading-6 pl-1 select-none\"\n :class=\"{ 'cursor-not-allowed': disabled }\"\n >\n <template v-if=\"hasLabelSlot\">\n <slot></slot>\n </template>\n <template v-else-if=\"label\">\n {{ label }}\n </template>\n </span>\n </label>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, nextTick, reactive, ref, watch } from 'vue'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsCheckbox from '../Form/FdsCheckbox/FdsCheckbox.vue'\nimport FdsRadio from '../Form/FdsRadio/FdsRadio.vue'\nimport type { FdsTreeViewProps } from './types'\nimport useTreeState from './useTreeState'\nimport { getTitleFromProperties } from './utils'\n\ntype Props<T = Record<string, unknown>> = FdsTreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n searchHighlighting: false,\n})\n\ndefineOptions({\n name: 'TreeNode',\n})\n\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\nconst treeState = injectedTreeState!\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst childrenToggleAriaLabel = (title: string) => {\n const hasChildren = hasChildrenNodes.value\n const isExpanded = expandedNodes.has(props.nodeId)\n if (hasChildren && isExpanded) {\n return `Fäll ihop ${title}`\n }\n return `Fäll ut ${title}`\n}\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck = props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return Array.isArray(nodesToCheck) && nodesToCheck.length > 0\n})\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n paddingLeft: `${indentValue + (hasChildrenNodes.value ? 0 : 4)}px`,\n}))\n\nconst filteredNodes = computed(() => {\n const t = String(treeState?.searchTerm?.value || '').trim()\n if (!props.searchEnabled || !t || t.length < (treeState?.triggerLength ?? 1)) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, t, props.searchMatchParams)\n})\n\nconst trimmedSearchTerm = computed(() => String(treeState?.searchTerm?.value || '').trim())\nconst meetsSearchTrigger = computed(() => trimmedSearchTerm.value.length >= (treeState?.triggerLength ?? 1))\nconst isSearchActive = computed(() => props.searchEnabled && meetsSearchTrigger.value)\nconst shouldHighlightSearch = computed(() => props.searchHighlighting && isSearchActive.value)\nconst childCount = computed(() => {\n if (!props.showChildrenCount || !hasChildrenNodes.value) return null\n return isSearchActive.value ? (filteredNodes.value?.length ?? 0) : props.nodes.length\n})\n\n// Auto-expand current node if search is active and it has matching children\nwatch(\n () => ({\n enabled: props.searchEnabled,\n expandOnSearch: props.searchExpandNodes,\n term: treeState?.searchTerm?.value,\n count: (filteredNodes.value || []).length,\n }),\n ({ enabled, expandOnSearch, term, count }) => {\n if (!enabled || !expandOnSearch) return\n const t = String(term || '').trim()\n if (!t || t.length < (treeState?.triggerLength ?? 1)) return\n if (typeof count === 'number' && count > 0) {\n expandedNodes.add(props.nodeId)\n }\n },\n)\n\nconst isOpen = ref(false)\nconst triggerRef = ref<HTMLElement | null>(null)\nconst popoverPanelRef = ref<HTMLElement | null>(null)\nconst popoverCoords = reactive({ bottom: 0, right: 0, left: 0, top: 0 })\n\nconst popoverWidth = 327\nconst popoverHeight = 80\n\nconst computePopoverCoords = () => {\n const componentInstance = triggerRef.value\n if (!componentInstance) return\n // Get the actual DOM element from the Vue component instance\n const triggerEl = '$el' in componentInstance ? (componentInstance as { $el: HTMLElement }).$el : componentInstance\n if (!(triggerEl instanceof HTMLElement)) return\n const rect = triggerEl.getBoundingClientRect()\n popoverCoords.bottom = Math.round(rect.bottom)\n popoverCoords.right = Math.round(rect.right)\n popoverCoords.left = Math.round(rect.left)\n popoverCoords.top = Math.round(rect.top)\n}\n\nconst openPopover = async () => {\n computePopoverCoords()\n isOpen.value = true\n window.addEventListener('scroll', computePopoverCoords, true)\n window.addEventListener('resize', computePopoverCoords)\n document.addEventListener('pointerdown', handleGlobalPointerDown, { passive: true })\n document.addEventListener('keydown', handleGlobalKeydown)\n\n // Focus first radio inside the popover for immediate keyboard use\n await nextTick()\n const firstRadio = popoverPanelRef.value?.querySelector('input[type=\"radio\"]') as HTMLInputElement | null\n firstRadio?.focus()\n}\n\nconst closePopover = () => {\n isOpen.value = false\n}\n\nconst onAfterPopoverLeave = () => {\n window.removeEventListener('scroll', computePopoverCoords, true)\n window.removeEventListener('resize', computePopoverCoords)\n document.removeEventListener('pointerdown', handleGlobalPointerDown)\n document.removeEventListener('keydown', handleGlobalKeydown)\n}\n\nconst togglePopover = () => {\n if (isOpen.value) closePopover()\n else openPopover()\n}\n\nconst handleGlobalPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return\n\n const hasComposedPath = (ev: Event): ev is Event & { composedPath: () => EventTarget[] } =>\n typeof (ev as { composedPath?: () => EventTarget[] }).composedPath === 'function'\n\n const clickedPath = hasComposedPath(event) ? event.composedPath() : ([] as EventTarget[])\n const contains = (el: HTMLElement | null) => (el ? clickedPath.includes(el) : false)\n\n // Extract DOM element from component instance if needed\n const getTriggerElement = (): HTMLElement | null => {\n const instance = triggerRef.value\n if (!instance) return null\n return '$el' in instance\n ? (instance as { $el: HTMLElement }).$el\n : instance instanceof HTMLElement\n ? instance\n : null\n }\n\n if (!contains(getTriggerElement()) && !contains(popoverPanelRef.value)) {\n closePopover()\n }\n}\n\nconst handleGlobalKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen.value) {\n closePopover()\n }\n}\n\nconst onPanelFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as HTMLElement | null\n const panelEl = popoverPanelRef.value\n if (!panelEl) return\n\n const triggerVal = triggerRef.value as unknown\n const triggerEl =\n triggerVal && typeof triggerVal === 'object' && '$el' in (triggerVal as Record<string, unknown>)\n ? (triggerVal as { $el: HTMLElement }).$el\n : (triggerVal as HTMLElement | null)\n\n const isButton = next?.tagName === 'BUTTON' && next?.id !== 'tree-popover-close-button'\n const isInsidePanel = !!next && panelEl.contains(next)\n const isTrigger = !!next && !!triggerEl && triggerEl.contains(next)\n\n const leavingPanel = !next || (!isInsidePanel && !isTrigger) || isButton\n if (leavingPanel) closePopover()\n}\n\nconst options = [\n { label: props.popoverLabels?.parentAndChildren, value: 'parent_and_children' },\n { label: props.popoverLabels?.parent, value: 'parent' },\n]\n\nconst currentOption = computed(() => {\n if (treeState?.isParentAndAllChildrenSelected(props.nodeId)) return 'parent_and_children'\n if (treeState?.isParentOnlySelected(props.nodeId)) return 'parent'\n return ''\n})\n\n// Ref for v-model on radio group - matches FdsRadio v-model type (string | number)\nconst selectedOption = ref<string | number>(currentOption.value)\n\n// Sync selectedOption when currentOption changes externally\nwatch(\n currentOption,\n (newValue) => {\n selectedOption.value = newValue\n },\n { immediate: true },\n)\n\n// Watch selectedOption to handle changes\nwatch(selectedOption, (newValue) => {\n if (newValue) {\n handleOptionClick(newValue as (typeof options)[number]['value'])\n }\n})\n\nconst handleOptionClick = (option: (typeof options)[number]['value']) => {\n if (option === 'parent_and_children') {\n treeState?.selectNodeAndAllChildren(props.nodeId)\n } else if (option === 'parent') {\n treeState?.deselectChildrenOnly(props.nodeId)\n }\n closePopover()\n}\n</script>\n\n<template>\n <div :class=\"props?.style?.container\">\n <div\n :style=\"indent\"\n :class=\"'pt-2 pb-2'\"\n >\n <div class=\"flex items-start\">\n <FdsButtonIcon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId)\"\n :ariaLabel=\"props.title ? childrenToggleAriaLabel(props.title) : undefined\"\n :icon=\"\n treeState?.getNodeIcon(props.nodeId, props.nodeExpandIcon, props.nodeCollapseIcon) ?? props.nodeExpandIcon\n \"\n :size=\"24\"\n class=\"fill-blue-500 mr-3 items-center\"\n />\n <div\n v-if=\"!hasChildrenNodes\"\n :style=\"{ minWidth: `${indentation}px` }\"\n />\n <div class=\"flex-1 flex\">\n <FdsCheckbox\n :id=\"`checkbox-${props.nodeId}`\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && (treeState?.isNodeIndeterminateById(props.nodeId) ?? false)\"\n @change=\"treeState?.toggleSelectNode(props.nodeId, props.title, props.data)\"\n >\n <span>\n <span\n v-if=\"shouldHighlightSearch && title\"\n v-html=\"treeState?.highlightText(title, treeState?.searchTerm?.value)\"\n />\n <span v-else>{{ title }}</span>\n </span>\n <span v-if=\"childCount !== null\"> (+{{ childCount }})</span>\n </FdsCheckbox>\n </div>\n <div\n class=\"items-center max-h-[28px]\"\n v-if=\"\n treeState?.isParentOrChildrenSelected(props.nodeId) &&\n !(treeState?.isNodeIndeterminateById(props.nodeId) ?? false)\n \"\n >\n <FdsButtonIcon\n ref=\"triggerRef\"\n icon=\"more\"\n :size=\"24\"\n @click=\"togglePopover\"\n :ariaLabel=\"`Fler val för ${title}`\"\n class=\"items-center\"\n />\n <!-- <teleport to=\"body\"> -->\n <Transition\n enter-active-class=\"transition-opacity duration-200 ease-in-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-500 ease-in-out\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n @after-leave=\"onAfterPopoverLeave\"\n >\n <div\n v-if=\"isOpen\"\n class=\"fixed z-9999\"\n :style=\"{\n top: popoverCoords.top + 'px',\n left: popoverCoords.right - popoverWidth - (popoverCoords.right - popoverCoords.left) + 'px',\n }\"\n >\n <div\n ref=\"popoverPanelRef\"\n class=\"bg-white border border-blue-500 rounded-md p-4 shadow-lg flex flex-row justify-between items-start gap-3\"\n :style=\"{\n width: popoverWidth + 'px',\n minHeight: popoverHeight + 'px',\n }\"\n @click.stop\n @focusout=\"onPanelFocusOut\"\n >\n <div class=\"flex flex-col gap-2\">\n <div\n v-for=\"option in options\"\n :key=\"option.value\"\n @click=\"\n (e) => {\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n handleOptionClick(option.value)\n }\n }\n \"\n class=\"cursor-pointer\"\n >\n <FdsRadio\n v-model=\"selectedOption\"\n :id=\"`tree-popover-${props.nodeId}-${option.value}`\"\n :name=\"`tree-popover-${props.nodeId}`\"\n :value=\"option.value\"\n @blur=\"closePopover\"\n :label=\"option.label\"\n />\n </div>\n </div>\n <FdsButtonIcon\n icon=\"cross\"\n id=\"tree-popover-close-button\"\n :size=\"24\"\n @click=\"closePopover()\"\n class=\"fill-blue-500\"\n ariaLabel=\"Stäng\"\n />\n </div>\n </div>\n </Transition>\n <!-- </teleport> -->\n </div>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <TreeNode\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"getTitleFromProperties(child, props.titleTemplate)\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n :searchHighlighting=\"searchHighlighting\"\n :titleTemplate=\"props.titleTemplate\"\n :popoverLabels=\"props.popoverLabels\"\n />\n </div>\n </div>\n</template>\n","import { watchEffect, type Ref } from 'vue'\n\nexport function useElementFinalSize(\n elementRef: Ref<HTMLElement | null>,\n onFinalSize: (height: number) => void,\n delay = 100,\n) {\n watchEffect((onCleanup) => {\n const { value: element } = elementRef\n if (!element) return\n\n // Wait for next frame after a short delay, then measure\n const timeoutId = setTimeout(() => {\n requestAnimationFrame(() => {\n const { height } = element.getBoundingClientRect()\n if (height > 0) {\n onFinalSize(height)\n }\n })\n }, delay)\n\n onCleanup(() => clearTimeout(timeoutId))\n })\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsTextProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTextProps>(), {\n type: 'default',\n})\n\nconst textClasses = computed(() => {\n const baseClasses = 'inline-block'\n\n if (props.type === 'lead') {\n return `${baseClasses} font-light text-lg`\n }\n\n if (props.type === 'meta') {\n return `${baseClasses} font-light`\n }\n\n return baseClasses\n})\n</script>\n\n<template>\n <span :class=\"textClasses\">\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport TreeNode from './TreeNode.vue'\nimport { getTitleFromProperties } from './utils'\nimport type { FdsTreeNode as TreeNodeType, FdsNodeShape, WrapperProps } from './types'\nimport { useElementFinalSize } from '../../composables/useElementFinalSize'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport FdsBlockContent from '../Blocks/FdsBlockContent/FdsBlockContent.vue'\nimport FdsText from '../Typography/FdsText/FdsText.vue'\n\nconst props = withDefaults(defineProps<WrapperProps<Record<string, unknown>>>(), {\n indentation: 36,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n titleTemplate: '[[title]]',\n})\n\nconst emit = defineEmits<{\n (e: 'update:selectedNodes', value: FdsNodeShape[]): void\n (e: 'getSearchContainerHeight', value: number): void\n}>()\n\nconst rootNode = props.data\nconst nodesForState = rootNode ? [rootNode] : []\n\nconst treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n searchExpandNodes: props.searchExpandNodes,\n titleTemplate: props.titleTemplate,\n nodes: nodesForState,\n searchInputTriggerLength: props.searchInputTriggerLength,\n})\nprovide('treeState', treeState)\n\nconst pruneNode = (node: TreeNodeType): FdsNodeShape => ({\n nodeId: node.nodeId,\n title: node.title,\n data: node.data,\n children: Array.isArray(node.children) ? node.children.map(pruneNode) : undefined,\n})\n\nconst selectedNodeObjects = computed<FdsNodeShape[]>(() => treeState.selectedNodeObjects.map(pruneNode))\n\nconst searchContainerRef = ref<HTMLElement | null>(null)\n\nuseElementFinalSize(searchContainerRef, (height) => {\n emit('getSearchContainerHeight', height)\n})\n\ndefineExpose({\n selectedNodeObjects,\n selectedNodes: treeState.selectedNodes,\n getSearchContainerHeight: () => searchContainerRef.value?.getBoundingClientRect().height,\n})\n\nwatch(\n () => treeState.selectedNodeObjects,\n () => {\n emit('update:selectedNodes', selectedNodeObjects.value)\n },\n { deep: true },\n)\n\n// Add 1 to the total node count to include the root node\nconst totalNodeCount = computed(() => 1 + (treeState?.totalNodeCount.value ?? 0))\n</script>\n\n<template>\n <div>\n <div\n v-if=\"props.searchEnabled\"\n ref=\"searchContainerRef\"\n class=\"pb-4\"\n >\n <FdsInput\n :value=\"treeState?.searchTerm?.value ?? ''\"\n @input=\"treeState?.setSearchTerm(($event.target as HTMLInputElement).value)\"\n class=\"w-full\"\n :label=\"props.searchLabel\"\n clear-button\n @clearInput=\"treeState?.clearSearch()\"\n >\n <input id=\"tree-view-search-input\" />\n </FdsInput>\n <div v-if=\"props.searchCountTemplate || props.searchCountTemplateUnfiltered\">\n <h2\n v-if=\"\n props.searchCountTemplate &&\n treeState?.searchTerm?.value &&\n String(treeState?.searchTerm?.value || '').trim().length >= (treeState?.triggerLength ?? 1)\n \"\n class=\"text-xl\"\n >\n {{\n props.searchCountTemplate\n .replace('[[filteredNodes]]', treeState?.filteredMatchCount.value.toString())\n .replace('[[totalNodes]]', totalNodeCount.toString())\n }}\n </h2>\n <h2\n class=\"text-xl\"\n v-else\n >\n {{\n props.searchCountTemplateUnfiltered\n ?.replace('[[totalNodes]]', totalNodeCount.toString())\n .replace('[[totalNodes]]', totalNodeCount.toString())\n }}\n </h2>\n </div>\n </div>\n\n <FdsBlockContent\n v-if=\"treeState?.isEmptySearchResult?.value\"\n class=\"mt-4\"\n >\n <template #header>{{ props.searchResultNoMatchesTitle }}</template>\n <FdsText>{{ props.searchResultNoMatchesBody }}</FdsText>\n </FdsBlockContent>\n\n <div :class=\"['rounded-md', { 'overflow-x-auto bg-white-solid': props.horizontalScroll }]\">\n <TreeNode\n v-if=\"props.data && !treeState?.isEmptySearchResult?.value\"\n :style=\"{ container: 'bg-white-solid px-3 py-2' }\"\n :nodes=\"props.data.children || []\"\n :title=\"getTitleFromProperties(props.data, props.titleTemplate)\"\n :nodeId=\"props.data.nodeId\"\n :data=\"props.data.data\"\n :indentation=\"props.indentation\"\n :showNodeDescription=\"props.showNodeDescription\"\n :showChildrenCount=\"props.showChildrenCount\"\n :expandChildrenOnSelect=\"props.expandChildrenOnSelect\"\n :showIndeterminate=\"props.showIndeterminate\"\n :expandChildrenOnParentCheck=\"props.expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"props.expandAllChildrenOnParentCheck\"\n :showIndeterminateOnlyOnChildrenSelection=\"props.showIndeterminateOnlyOnChildrenSelection\"\n :searchEnabled=\"props.searchEnabled\"\n :searchLabel=\"props.searchLabel\"\n :searchExpandNodes=\"props.searchExpandNodes\"\n :searchMatchParams=\"props.searchMatchParams\"\n :horizontalScroll=\"props.horizontalScroll\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :searchHighlighting=\"props.searchHighlighting\"\n :titleTemplate=\"props.titleTemplate\"\n :popoverLabels=\"props.popoverLabels\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../composables/useHasSlots'\nimport { computed, onMounted, ref, watch } from 'vue'\nimport FdsButtonMinor from '../Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport type { FdsTruncatedTextProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTruncatedTextProps>(), {\n open: false,\n btnExpand: 'Visa mer',\n btnCollapse: 'Visa mindre',\n})\n\nconst emit = defineEmits<{\n (e: 'toggleHandler', data: { open: boolean }): void\n}>()\n\nconst isOpen = ref(props.open)\nconst contentRef = ref<HTMLDivElement | null>(null)\nconst hasSlotContent = useHasSlot()\nconst containerWidth = ref(0)\nconst truncated = ref(false)\nconst slotContentRef = ref<HTMLDivElement | null>(null)\n\nconst shouldShowButton = computed(() => {\n if (hasSlotContent.value) return true\n return truncated.value\n})\n\nconst toggleComponent = () => {\n isOpen.value = !isOpen.value\n emit('toggleHandler', { open: isOpen.value })\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n },\n)\n\nonMounted(() => {\n if (hasSlotContent.value && slotContentRef.value?.parentElement) {\n containerWidth.value = slotContentRef.value.parentElement.offsetWidth\n const threshold = slotContentRef.value.offsetWidth / 8\n const slotText = slotContentRef.value.textContent || ''\n if (threshold <= slotText.length) {\n truncated.value = true\n }\n } else if (contentRef.value?.parentElement) {\n containerWidth.value = contentRef.value.parentElement.offsetWidth\n const threshold = contentRef.value.offsetWidth / 8\n if (threshold <= props.content.length) {\n truncated.value = true\n }\n }\n})\n</script>\n\n<template>\n <div class=\"block mb-4\">\n <div\n v-if=\"hasSlotContent\"\n ref=\"slotContentRef\"\n :class=\"['content', { open: isOpen }]\"\n :style=\"{ maxWidth: `${containerWidth}px` }\"\n >\n <slot />\n </div>\n <div\n v-else\n ref=\"contentRef\"\n :class=\"['content', { open: isOpen }]\"\n :style=\"{ maxWidth: `${containerWidth}px` }\"\n >\n {{ content }}\n </div>\n <FdsButtonMinor\n v-if=\"shouldShowButton\"\n :icon=\"isOpen ? 'arrowUp' : 'arrowDown'\"\n iconPos=\"right\"\n :text=\"isOpen ? btnCollapse : btnExpand\"\n @click=\"toggleComponent\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsSelectProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsSelectProps>(), {\n value: undefined,\n label: undefined,\n meta: undefined,\n disabled: false,\n optional: false,\n valid: undefined,\n invalidMessage: undefined,\n name: undefined,\n id: undefined,\n placeholder: undefined,\n options: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'change', ev: Event): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-select-${Math.random().toString(36).slice(2, 9)}`\nconst selectId = computed(() => props.id ?? autoId)\n\nconst slots = useSlots()\nconst hasDefaultSlot = computed(() => !!slots.default)\n\nconst showInvalidMessage = computed(\n () => props.valid === 'false' && !props.optional && props.invalidMessage && !props.disabled,\n)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\n\nconst selectClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-2 pr-8 h-12 mb-4',\n 'focus:outline-2 focus:outline-blue-500 focus:border-transparent',\n 'appearance-none',\n props.disabled\n ? 'outline-dashed text-gray-600 outline-2 -outline-offset-2 outline-gray-400 cursor-not-allowed border-transparent'\n : 'bg-white cursor-pointer',\n isInvalid.value && !props.disabled && 'outline-2 -outline-offset-2 outline-red-600 text-red-600',\n])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () => (modelValue.value !== undefined ? modelValue.value : (props.value ?? '')),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n\nfunction handleChange(ev: Event) {\n emit('change', ev)\n emit('input', ev)\n}\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <label\n v-if=\"label\"\n :for=\"selectId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >\n {{ label }}\n </label>\n <div v-if=\"meta\" class=\"font-thin mb-1\">\n {{ meta }}\n </div>\n <div class=\"relative\">\n <select\n :id=\"selectId\"\n :name=\"name || undefined\"\n :disabled=\"disabled\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"selectClasses\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @input=\"(e) => emit('input', e)\"\n >\n <option v-if=\"placeholder && !hasDefaultSlot\" value=\"\" disabled>\n {{ placeholder }}\n </option>\n <!-- Render options from prop if no slot is provided -->\n <template v-if=\"!hasDefaultSlot && options\">\n <option v-for=\"option in options\" :key=\"option.value\" :value=\"option.value\" :disabled=\"option.disabled\">\n {{ option.label }}\n </option>\n </template>\n <!-- Render slot content (supports optgroups and custom options) -->\n <slot v-else />\n </select>\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FdsIcon\n name=\"arrowDown\"\n :size=\"24\"\n :class=\"{\n 'fill-gray-500': disabled,\n 'fill-red-500': isInvalid && !disabled,\n 'fill-blue-500': !disabled && !isInvalid,\n }\"\n />\n </div>\n </div>\n <div v-if=\"showInvalidMessage\" class=\"text-red-600 font-bold mt-1\">\n {{ invalidMessage }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsTextareaProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsTextareaProps>(), {\n value: undefined,\n label: undefined,\n meta: undefined,\n disabled: false,\n optional: false,\n valid: undefined,\n rows: 4,\n name: undefined,\n id: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-textarea-${Math.random().toString(36).slice(2, 9)}`\nconst textareaId = computed(() => props.id ?? autoId)\n\nconst showInvalidMessage = computed(() => props.valid === 'false' && !props.optional && props.invalidMessage)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\nconst isValid = computed(() => props.valid === 'true')\n\nconst inputClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-2',\n 'focus:outline-2 focus:outline-blue-500 focus:border-transparent',\n props.disabled\n ? 'outline-dashed outline-2 -outline-offset-2 outline-gray-400 cursor-not-allowed border-transparent bg-gray-50'\n : 'bg-white',\n isInvalid.value && 'outline-2 -outline-offset-2 outline-red-600',\n])\n\nconst validationIconClasses = computed(() => ['absolute right-3 top-3 flex items-center gap-2 pointer-events-none'])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () => (modelValue.value !== undefined ? modelValue.value : (props.value ?? '')),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <label\n v-if=\"label\"\n :for=\"textareaId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >\n {{ label }}\n </label>\n <div v-if=\"meta\" class=\"font-thin mb-1\">\n {{ meta }}\n </div>\n <div class=\"relative\">\n <textarea\n :id=\"textareaId\"\n :name=\"name || undefined\"\n :disabled=\"disabled\"\n :rows=\"rows\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"inputClasses\"\n v-bind=\"$attrs\"\n @input=\"(e) => emit('input', e)\"\n />\n <div :class=\"validationIconClasses\">\n <FdsIcon v-if=\"isInvalid\" name=\"alert\" class=\"fill-red-600\" />\n <FdsIcon v-if=\"isValid\" name=\"bigSuccess\" />\n </div>\n </div>\n <div v-if=\"showInvalidMessage\" class=\"text-red-600 font-bold mt-1\">\n {{ invalidMessage }}\n </div>\n </div>\n <div v-if=\"isValid\" class=\"sr-only\">OK</div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsTableProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTableProps>(), {\n bordered: false,\n compact: false,\n})\n\nconst wrapperClasses = computed(() => [\n 'fds-table-wrapper',\n props.bordered && 'fds-table-wrapper--bordered',\n props.compact && 'fds-table-wrapper--compact',\n])\n\ndefineSlots<{\n default?: unknown\n}>()\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsTableHeadProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTableHeadProps>(), {\n align: 'left',\n icon: undefined,\n heading: undefined,\n})\n\nconst hasSlot = useHasSlot()\n\nconst headerClasses = computed(() => [\n 'appearance-none p-4 bg-transparent flex items-center border-none text-left w-full bg-transparent text-gray-800 whitespace-nowrap text-base font-bold leading-5 tracking-normal',\n props.align === 'center' && 'text-center justify-center',\n props.align === 'right' && 'text-right justify-end',\n iconName.value &&\n 'text-blue-600! hover:bg-blue_t-200 cursor-pointer focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-blue-500 active:bg-blue_t-300',\n])\n\n/* Sending an icon makes the th sortable */\nconst iconName = computed(() => props.icon)\n\ndefineEmits<{\n (e: 'sort'): void\n}>()\n</script>\n\n<template>\n <th class=\"fds-table-head\">\n <button\n v-if=\"iconName\"\n :class=\"headerClasses\"\n @click=\"$emit('sort')\"\n >\n <span v-if=\"hasSlot\"><slot /></span>\n <span v-else>{{ heading }}</span>\n <FdsIcon\n :name=\"iconName\"\n size=\"24px\"\n class=\"fill-blue-500\"\n />\n </button>\n <div\n v-else\n :class=\"headerClasses\"\n >\n <span v-if=\"hasSlot\"><slot /></span>\n <span v-else>{{ heading }}</span>\n </div>\n </th>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\nimport type { FdsTabsProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTabsProps>(), {\n block: false,\n variant: 'primary',\n})\n\nconst tabsClasses = computed(() => [\n 'inline-flex overflow-auto max-w-full p-0.5 gap-0.5',\n {\n 'flex justify-between w-full': props.block,\n 'bg-blue_t-100 rounded-[10px] mb-8': props.variant === 'primary',\n 'gap-2 mb-4': props.variant === 'secondary',\n },\n])\n\nprovide('tabsVariant', props.variant)\nprovide('tabsBlock', props.block)\n</script>\n\n<template>\n <div :class=\"tabsClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, useAttrs } from 'vue'\nimport type { FdsTabsItemProps } from './types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\n// Try to get route from vue-router if available\nconst instance = getCurrentInstance()\nconst route = computed(() => {\n try {\n // Check if vue-router is available via app context\n const router = instance?.appContext.config.globalProperties.$router\n if (router && router.currentRoute) {\n return router.currentRoute.value\n }\n } catch {\n // vue-router not available\n }\n return null\n})\n\nconst props = withDefaults(defineProps<FdsTabsItemProps>(), {\n to: undefined,\n href: undefined,\n as: undefined,\n active: undefined,\n exact: false,\n disabled: false,\n label: undefined,\n})\n\nconst variant = inject<'primary' | 'secondary'>('tabsVariant', 'primary')\nconst block = inject<boolean>('tabsBlock', false)\n\n// Auto-detect active state from router if to/href is provided\nconst isActive = computed(() => {\n if (props.active !== undefined) return props.active\n const currentRoute = route.value\n if (!currentRoute) return false\n\n const currentPath = currentRoute.path\n\n if (props.exact) {\n // Exact matching\n if (props.to && currentPath === props.to) return true\n if (props.href && currentPath === props.href) return true\n } else {\n // Include matching - check if current path includes to/href\n if (props.to && currentPath.includes(props.to)) return true\n if (props.href && currentPath.includes(props.href)) return true\n }\n\n return false\n})\n\nconst componentType = computed(() => {\n if (props.as) return props.as\n if (props.href) return 'a'\n if (props.to) return 'router-link'\n return 'router-link' // Default to router-link\n})\n\nconst linkAttrs = computed(() => {\n if (componentType.value === 'a') return { href: props.href || props.to }\n if (componentType.value === 'router-link') {\n // If no to/href provided, use current path or empty string\n return { to: props.to || props.href || route.value?.path || '#' }\n }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n\nconst baseClasses = computed(() => {\n const blockClasses = block ? 'flex flex-1' : ''\n return [\n 'text-center',\n blockClasses,\n 'flex justify-center w-full cursor-pointer font-bold text-base leading-6 m-0 select-none no-underline whitespace-nowrap',\n ]\n})\n\nconst variantClasses = computed(() => {\n if (variant === 'primary') {\n return [\n 'bg-transparent py-2 px-4 rounded-lg border-2 border-transparent text-inherit',\n isActive.value\n ? 'border-transparent bg-white shadow-md'\n : 'hover:bg-white/59 hover:outline-none active:border-transparent active:bg-white/80',\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-blue-500 focus-visible:outline-offset-[-2px]',\n ]\n } else {\n return [\n 'text-blue-700 py-1 px-2 rounded-md border-none',\n isActive.value ? 'bg-blue-500 text-white' : 'hover:bg-blue_t-100 active:bg-blue_t-200',\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-blue-500',\n 'tracking-[0.002em]',\n ]\n }\n})\n\nconst disabledClasses = computed(() => (props.disabled ? 'cursor-not-allowed pointer-events-none opacity-35' : ''))\n\nconst buttonClasses = computed(() => [...baseClasses.value, ...variantClasses.value, disabledClasses.value])\n</script>\n\n<template>\n <component\n :is=\"componentType\"\n v-bind=\"componentAttrs\"\n :class=\"buttonClasses\"\n :disabled=\"componentType === 'button' ? disabled : undefined\"\n :aria-disabled=\"disabled\"\n :aria-current=\"isActive ? 'page' : undefined\"\n >\n <slot>{{ label }}</slot>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsHeadingProps } from './types'\n\nconst props = withDefaults(defineProps<FdsHeadingProps>(), {\n size: 'responsive',\n})\n\nconst headingClasses = computed(() => {\n const baseClasses = 'font-raleway leading-tight m-0'\n\n if (props.type === 'h1') {\n return [baseClasses, 'mb-3', getResponsiveSize('h1', props.size)].filter(Boolean).join(' ')\n }\n if (props.type === 'h2') {\n return [baseClasses, 'mt-4 mb-2', getResponsiveSize('h2', props.size)].filter(Boolean).join(' ')\n }\n if (props.type === 'h3') {\n return [baseClasses, 'mt-4 mb-2', getResponsiveSize('h3', props.size)].filter(Boolean).join(' ')\n }\n\n return baseClasses\n})\n\nfunction getResponsiveSize(element: 'h1' | 'h2' | 'h3', size: string) {\n if (size !== 'responsive') {\n const sizeMap: Record<typeof element, Record<string, string>> = {\n h1: { xl: 'text-6xl', lg: 'text-5xl', md: 'text-4xl', sm: 'text-2xl' },\n h2: { xl: 'text-5xl', lg: 'text-4xl', md: 'text-3xl', sm: 'text-xl' },\n h3: { xl: 'text-3xl', lg: 'text-2xl', md: 'text-xl', sm: 'text-lg' },\n }\n return sizeMap[element][size]\n }\n\n const responsiveMap: Record<typeof element, string> = {\n h1: 'text-2xl sm:text-4xl md:text-5xl lg:text-6xl',\n h2: 'text-xl sm:text-3xl md:text-4xl lg:text-5xl',\n h3: 'text-lg sm:text-xl md:text-2xl lg:text-3xl',\n }\n return responsiveMap[element]\n}\n</script>\n\n<template>\n <component\n :is=\"type\"\n :class=\"headingClasses\"\n >\n {{ text }}\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsListHeadingProps } from './types'\n\nconst props = withDefaults(defineProps<FdsListHeadingProps>(), {\n loading: false,\n language: 'sv',\n})\n\nconst separatorText = () => (props.language === 'sv' ? 'av' : 'of')\n\nconst headingText = computed(() => {\n // If total is falsy, show \"0 separator unfiltered text\"\n if (!props.total) {\n let result = '0'\n if (props.unfiltered) {\n result += ` ${separatorText()} ${props.unfiltered}`\n }\n if (props.text) {\n result += ` ${props.text}`\n }\n return result\n }\n\n // If no text, just show total\n if (!props.text) return String(props.total)\n\n // If unfiltered exists and differs from total, show \"total separator unfiltered text\"\n if (props.unfiltered && props.total !== props.unfiltered) {\n return `${props.total} ${separatorText()} ${props.unfiltered} ${props.text}`\n }\n\n // Default: show \"total text\"\n return `${props.total} ${props.text}`\n})\n\nconst handleLoadingText = () => {\n if (props.loadingText && props.loadingText.length > 0) {\n return props.loadingText\n }\n return props.language === 'sv' ? 'Laddar...' : 'Loading...'\n}\n</script>\n\n<template>\n <div class=\"inline-block mb-3 h-7 font-bold text-xl\">\n <FdsSpinner\n v-if=\"loading\"\n size=\"24px\"\n color=\"blue\"\n :label=\"handleLoadingText()\"\n label-position=\"right\"\n />\n <h3\n v-else\n class=\"heading font-heading text-xl m-0\"\n >\n {{ headingText }}\n </h3>\n </div>\n</template>\n","<script setup lang=\"ts\"></script>\n\n<template>\n <hr class=\"block border-0 h-px w-full bg-black/12 my-4\" />\n</template>\n","// Import styles\nimport type { App, Plugin } from 'vue'\nimport './style.css'\n\n// Import all components (use relative paths so consumers don't need our TS alias)\nimport FdsBlockAlert from './components/Blocks/FdsBlockAlert/FdsBlockAlert.vue'\nimport FdsBlockContent from './components/Blocks/FdsBlockContent/FdsBlockContent.vue'\nimport FdsBlockExpander from './components/Blocks/FdsBlockExpander/FdsBlockExpander.vue'\nimport FdsBlockInfo from './components/Blocks/FdsBlockInfo/FdsBlockInfo.vue'\nimport FdsBlockLink from './components/Blocks/FdsBlockLink/FdsBlockLink.vue'\nimport FdsButtonCopy from './components/Buttons/FdsButtonCopy/FdsButtonCopy.vue'\nimport FdsButtonDownload from './components/Buttons/FdsButtonDownload/FdsButtonDownload.vue'\nimport FdsButtonIcon from './components/Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsButtonMinor from './components/Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport FdsButtonPrimary from './components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue'\nimport FdsButtonSecondary from './components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue'\nimport FdsIcon from './components/FdsIcon/FdsIcon.vue'\nimport FdsModal from './components/FdsModal/FdsModal.vue'\nimport FdsPagination from './components/FdsPagination/FdsPagination.vue'\nimport FdsSearchSelect from './components/FdsSearchSelect/FdsSearchSelect.vue'\nimport FdsSpinner from './components/FdsSpinner/FdsSpinner.vue'\nimport FdsSticker from './components/FdsSticker/FdsSticker.vue'\nimport FdsTreeView from './components/FdsTreeView/FdsTreeView.vue'\nimport FdsTruncatedText from './components/FdsTruncatedText/FdsTruncatedText.vue'\nimport FdsCheckbox from './components/Form/FdsCheckbox/FdsCheckbox.vue'\nimport FdsInput from './components/Form/FdsInput/FdsInput.vue'\nimport FdsRadio from './components/Form/FdsRadio/FdsRadio.vue'\nimport FdsSelect from './components/Form/FdsSelect/FdsSelect.vue'\nimport FdsTextarea from './components/Form/FdsTextarea/FdsTextarea.vue'\nimport FdsTable from './components/Table/FdsTable/FdsTable.vue'\nimport FdsTableHead from './components/Table/FdsTableHead/FdsTableHead.vue'\nimport FdsTabs from './components/Tabs/FdsTabs/FdsTabs.vue'\nimport FdsTabsItem from './components/Tabs/FdsTabsItem/FdsTabsItem.vue'\nimport FdsHeading from './components/Typography/FdsHeading/FdsHeading.vue'\nimport FdsListHeading from './components/Typography/FdsListHeading/FdsListHeading.vue'\nimport FdsSeparator from './components/Typography/FdsSeparator/FdsSeparator.vue'\nimport FdsText from './components/Typography/FdsText/FdsText.vue'\n\n// Import composables (relative paths)\nimport useTreeState from './components/FdsTreeView/useTreeState'\nimport { useBoldQuery } from './composables/useBoldQuery'\nimport { isPidString, useIsPid } from './composables/useIsPid'\n\n// Export individual components\nexport {\n FdsBlockAlert,\n FdsBlockContent,\n FdsBlockExpander,\n FdsBlockInfo,\n FdsBlockLink,\n FdsButtonCopy,\n FdsButtonDownload,\n FdsButtonIcon,\n FdsButtonMinor,\n FdsButtonPrimary,\n FdsButtonSecondary,\n FdsCheckbox,\n FdsHeading,\n FdsIcon,\n FdsInput,\n FdsListHeading,\n FdsModal,\n FdsPagination,\n FdsRadio,\n FdsSearchSelect,\n FdsSelect,\n FdsSeparator,\n FdsSpinner,\n FdsSticker,\n FdsTable,\n FdsTableHead,\n FdsTabs,\n FdsTabsItem,\n FdsText,\n FdsTextarea,\n FdsTreeView,\n FdsTruncatedText,\n}\n\n// Export composables\nexport { isPidString, useBoldQuery, useIsPid, useTreeState }\n\n// Export component library plugin\nconst FdsVueCorePlugin: Plugin = {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n // Register button variants with direct names\n app.component('FdsButtonPrimary', FdsButtonPrimary)\n app.component('FdsButtonSecondary', FdsButtonSecondary)\n app.component('FdsButtonMinor', FdsButtonMinor)\n app.component('FdsButtonIcon', FdsButtonIcon)\n app.component('FdsButtonCopy', FdsButtonCopy)\n app.component('FdsButtonDownload', FdsButtonDownload)\n app.component('FdsIcon', FdsIcon)\n app.component('FdsSpinner', FdsSpinner)\n app.component('FdsRadio', FdsRadio)\n app.component('FdsCheckbox', FdsCheckbox)\n app.component('FdsTextarea', FdsTextarea)\n app.component('FdsSelect', FdsSelect)\n app.component('FdsTable', FdsTable)\n app.component('FdsTableHead', FdsTableHead)\n app.component('FdsInput', FdsInput)\n app.component('FdsBlockContent', FdsBlockContent)\n app.component('FdsBlockInfo', FdsBlockInfo)\n app.component('FdsBlockAlert', FdsBlockAlert)\n app.component('FdsBlockExpander', FdsBlockExpander)\n app.component('FdsBlockLink', FdsBlockLink)\n app.component('FdsSticker', FdsSticker)\n app.component('FdsTabs', FdsTabs)\n app.component('FdsTabsItem', FdsTabsItem)\n app.component('FdsModal', FdsModal)\n app.component('FdsPagination', FdsPagination)\n app.component('FdsSearchSelect', FdsSearchSelect)\n app.component('FdsTruncatedText', FdsTruncatedText)\n app.component('FdsHeading', FdsHeading)\n app.component('FdsSeparator', FdsSeparator)\n app.component('FdsText', FdsText)\n app.component('FdsListHeading', FdsListHeading)\n },\n}\n\nexport default FdsVueCorePlugin\n\n// Export all component types\n// TreeView types (only consumer-facing types)\nexport type { FdsNodeShape, FdsTreeNode, FdsTreeViewProps, FdsTreeViewStyles } from './components/FdsTreeView/types'\n\n// Button component types\nexport type { FdsButtonBaseProps } from './components/Buttons/ButtonBaseProps'\nexport type { FdsCopyButtonProps } from './components/Buttons/FdsButtonCopy/types'\nexport type { FdsIconButtonProps } from './components/Buttons/FdsButtonIcon/types'\n\n// Button components that use FdsButtonBaseProps\nimport type { FdsButtonBaseProps } from './components/Buttons/ButtonBaseProps'\nexport type FdsButtonPrimaryProps = FdsButtonBaseProps\nexport type FdsButtonSecondaryProps = FdsButtonBaseProps\nexport type FdsButtonMinorProps = FdsButtonBaseProps\nexport type FdsButtonDownloadProps = FdsButtonBaseProps\n\n// Form component types\nexport type { FdsCheckboxProps } from './components/Form/FdsCheckbox/types'\nexport type { FdsInputProps } from './components/Form/FdsInput/types'\nexport type { FdsRadioProps } from './components/Form/FdsRadio/types'\nexport type { FdsSelectProps } from './components/Form/FdsSelect/types'\nexport type { FdsTextareaProps } from './components/Form/FdsTextarea/types'\n\n// Table component types\nexport type { FdsTableProps } from './components/Table/FdsTable/types'\nexport type { FdsTableHeadProps } from './components/Table/FdsTableHead/types'\n\n// Block component types\n// Use relative paths so the generated declarations are resolvable from the published package\nexport type { FdsAlertBlockProps } from './components/Blocks/FdsBlockAlert/types'\nexport type { FdsContentBlockProps } from './components/Blocks/FdsBlockContent/types'\nexport type { FdsExpanderBlockProps } from './components/Blocks/FdsBlockExpander/types'\nexport type { FdsBlockInfoProps } from './components/Blocks/FdsBlockInfo/types'\nexport type { FdsInteractionBlockProps } from './components/Blocks/FdsBlockLink/types'\n\n// Tab component types\nexport type { FdsTabsProps } from './components/Tabs/FdsTabs/types'\nexport type { FdsTabsItemProps } from './components/Tabs/FdsTabsItem/types'\n\n// Typography component types\nexport type { FdsHeadingProps } from './components/Typography/FdsHeading/types'\nexport type { FdsListHeadingProps } from './components/Typography/FdsListHeading/types'\nexport type { FdsTextProps } from './components/Typography/FdsText/types'\n\n// Other component types\nexport type { FdsIconName, FdsIconProps } from './components/FdsIcon/types'\nexport type { FdsModalProps } from './components/FdsModal/types'\nexport type { FdsPaginationProps } from './components/FdsPagination/types'\nexport type { FdsSearchSelectProps } from './components/FdsSearchSelect/types'\nexport type { FdsSpinnerProps } from './components/FdsSpinner/types'\nexport type { FdsStickerProps } from './components/FdsSticker/types'\nexport type { FdsTruncatedTextProps } from './components/FdsTruncatedText/types'\n"],"names":["_createElementBlock","_normalizeStyle","_createBlock","FdsIcon","_createElementVNode","_unref","_hoisted_2","_createVNode","_hoisted_3","FdsButtonIcon","_normalizeClass","_openBlock","_hoisted_4","_renderSlot","_hoisted_5","_hoisted_1","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_resolveDynamicComponent","_mergeProps","elBase","variantClasses","iconFillClass","FdsSpinner","FdsButtonMinor","_createTextVNode","_Teleport","bName","fromPos","toPos","_useModel","createMask","_withDirectives","$attrs","$emit","_Fragment","FdsInput","_renderList","_withKeys","_withModifiers","FdsPagination","FdsCheckbox","_Transition","FdsRadio","FdsBlockContent","FdsText","TreeNode","FdsTreeView","FdsButtonPrimary","FdsButtonSecondary","FdsButtonCopy","FdsButtonDownload","FdsTextarea","FdsSelect","FdsTable","FdsTableHead","FdsBlockInfo","FdsBlockAlert","FdsBlockExpander","FdsBlockLink","FdsSticker","FdsTabs","FdsTabsItem","FdsModal","FdsSearchSelect","FdsTruncatedText","FdsHeading","FdsListHeading"],"mappings":"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","x_google_ignoreList":[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43]}
|
|
1
|
+
{"version":3,"file":"fds-vue-core.es.js","sources":["../src/composables/useHasSlots.ts","../src/assets/icons.ts","../src/components/FdsIcon/FdsIcon.vue","../src/components/Buttons/FdsButtonIcon/FdsButtonIcon.vue","../src/components/Blocks/FdsBlockAlert/FdsBlockAlert.vue","../src/components/Blocks/FdsBlockContent/FdsBlockContent.vue","../src/components/Blocks/FdsBlockExpander/FdsBlockExpander.vue","../src/components/Blocks/FdsBlockInfo/FdsBlockInfo.vue","../src/components/Blocks/FdsBlockLink/FdsBlockLink.vue","../src/components/FdsSpinner/FdsSpinner.vue","../src/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue","../src/components/Buttons/FdsButtonCopy/FdsButtonCopy.vue","../src/components/Buttons/FdsButtonDownload/FdsButtonDownload.vue","../src/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue","../src/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue","../src/components/FdsModal/FdsModal.vue","../node_modules/imask/esm/core/utils.js","../node_modules/imask/esm/core/action-details.js","../node_modules/imask/esm/core/holder.js","../node_modules/imask/esm/masked/factory.js","../node_modules/imask/esm/controls/mask-element.js","../node_modules/imask/esm/controls/html-mask-element.js","../node_modules/imask/esm/controls/html-input-mask-element.js","../node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../node_modules/imask/esm/controls/input-history.js","../node_modules/imask/esm/controls/input.js","../node_modules/imask/esm/core/change-details.js","../node_modules/imask/esm/core/continuous-tail-details.js","../node_modules/imask/esm/masked/base.js","../node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../node_modules/imask/esm/masked/pattern/cursor.js","../node_modules/imask/esm/masked/pattern/fixed-definition.js","../node_modules/imask/esm/masked/pattern/input-definition.js","../node_modules/imask/esm/masked/regexp.js","../node_modules/imask/esm/masked/pattern.js","../node_modules/imask/esm/masked/range.js","../node_modules/imask/esm/masked/date.js","../node_modules/imask/esm/masked/dynamic.js","../node_modules/imask/esm/masked/enum.js","../node_modules/imask/esm/masked/function.js","../node_modules/imask/esm/masked/number.js","../node_modules/imask/esm/masked/pipe.js","../node_modules/imask/esm/masked/repeat.js","../node_modules/imask/esm/index.js","../src/components/Form/FdsInput/FdsInput.vue","../src/components/FdsPagination/FdsPagination.vue","../src/composables/useBoldQuery.ts","../src/composables/useIsPid.ts","../src/components/FdsSearchSelect/FdsSearchSelect.vue","../src/components/FdsSticker/FdsSticker.vue","../src/components/FdsTreeView/utils.ts","../src/components/FdsTreeView/useTreeState.ts","../src/components/Form/FdsCheckbox/FdsCheckbox.vue","../src/components/Form/FdsRadio/FdsRadio.vue","../src/components/FdsTreeView/TreeNode.vue","../src/composables/useElementFinalSize.ts","../src/components/Typography/FdsText/FdsText.vue","../src/components/FdsTreeView/FdsTreeView.vue","../src/components/FdsTruncatedText/FdsTruncatedText.vue","../src/components/Form/FdsSelect/FdsSelect.vue","../src/components/Form/FdsTextarea/FdsTextarea.vue","../src/components/Table/FdsTable/FdsTable.vue","../src/components/Table/FdsTableHead/FdsTableHead.vue","../src/components/Tabs/FdsTabs/FdsTabs.vue","../src/components/Tabs/FdsTabsItem/FdsTabsItem.vue","../src/components/Typography/FdsHeading/FdsHeading.vue","../src/components/Typography/FdsListHeading/FdsListHeading.vue","../src/components/Typography/FdsSeparator/FdsSeparator.vue","../src/index.ts"],"sourcesContent":["import { Comment, computed, useSlots, type VNode } from 'vue'\n\n/**\n * Check if a slot has any real content (ignores comment nodes)\n * @param name Slot name, default is \"default\"\n */\nexport function useHasSlot(name: string = 'default') {\n const slots = useSlots()\n\n return computed(() => {\n const slotFn = slots[name]\n if (!slotFn) return false\n\n const vnodes: VNode[] = slotFn()\n return vnodes.some((vnode) => vnode.type !== Comment)\n })\n}\n","export type IconMap = Record<string, () => string>\n\nconst icons: IconMap = {\n addCircle: () => `\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 17.25C11.586 17.25 11.25 16.914 11.25 16.5V12.75H7.5C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H11.25V7.5C11.25 7.086 11.586 6.75 12 6.75C12.414 6.75 12.75 7.086 12.75 7.5V11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H12.75V16.5C12.75 16.914 12.414 17.25 12 17.25Z\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n </svg>`,\n alert: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M11.984.003C8.777.055 5.72 1.367 3.474 3.655 1.204 5.916-.05 9.004.002 12.208c-.004 3.13 1.238 6.132 3.452 8.345C5.667 22.765 8.67 24.006 11.8 24h.214c6.677-.069 12.039-5.53 11.985-12.208.007-3.168-1.264-6.206-3.526-8.425-2.261-2.219-5.323-3.432-8.49-3.364zM10.5 16.543c-.015-.396.13-.781.403-1.07.273-.287.65-.453 1.046-.46h.027c.82.002 1.492.65 1.522 1.47.015.396-.13.781-.403 1.07-.272.287-.65.453-1.045.46h-.027c-.82-.003-1.492-.651-1.523-1.47zM11 12.5V6.502c0-.552.447-1 1-1 .552 0 1 .448 1 1v6c0 .551-.448 1-1 1-.553 0-1-.449-1-1z\" />\n </svg>`,\n bigAlert: () => `\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23.8906 29.5264C22.964 29.5427 22.0827 29.9307 21.4453 30.6035C20.808 31.2764 20.468 32.1774 20.502 33.1035V33.1045C20.5755 35.0101 22.1388 36.5193 24.0459 36.5254H24.1094C25.0363 36.5097 25.9181 36.1213 26.5557 35.4482C27.1931 34.7751 27.5336 33.8737 27.499 32.9473C27.4278 31.0402 25.8625 29.53 23.9541 29.5264H23.8906ZM24.001 10.5039C22.6204 10.504 21.501 11.6234 21.501 13.0039V25.0029C21.5012 26.3833 22.6206 27.5019 24.001 27.502C25.3814 27.502 26.5008 26.3833 26.501 25.0029V13.0039C26.501 11.6233 25.3816 10.5039 24.001 10.5039ZM0.50293 24.4082C0.401048 18.1355 2.85577 12.0913 7.30176 7.66504L7.30566 7.66113C11.7066 3.17882 17.6947 0.607705 23.9756 0.504883H23.9775C30.1787 0.372553 36.1713 2.74791 40.5986 7.0918C45.0258 11.4357 47.5136 17.3818 47.499 23.584V23.5889C47.6055 36.6682 37.1039 47.3652 24.0244 47.5H23.6006C17.4739 47.5109 11.5943 45.0828 7.26074 40.752C2.92729 36.4211 0.495638 30.5435 0.50293 24.417V24.4082Z\" fill=\"#D96F02\" stroke=\"#B74E06\"/>\n </svg>`,\n arrowDown: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-305 -3476) translate(305 3476) rotate(90 12 12)\"/>\n </svg>`,\n arrowLeft: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-353 -3476) translate(353 3476) rotate(180 12 12)\"/>\n </svg>`,\n arrowRight: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-257 -3476) translate(257 3476)\"/>\n </svg>`,\n arrowUp: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17 12c0 .442-.189.863-.52 1.155l-7.453 6.556c-.513.431-1.277.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.517-5.732c.036-.032.057-.078.057-.126s-.021-.094-.057-.126L7.397 6.142c-.493-.455-.533-1.22-.09-1.723.443-.503 1.207-.561 1.72-.13l7.45 6.554c.332.292.523.714.523 1.157z\" transform=\"translate(-209 -3476) translate(209 3476) rotate(-90 12 12)\"/>\n </svg>`,\n bigSuccess: () => `\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M34.2249 13.7464L22.0861 30.2205L14.3404 24.0236C13.2621 23.1607 11.6885 23.3353 10.8256 24.4136C9.96272 25.4919 10.1373 27.0655 11.2156 27.9284L11.2158 27.9285L20.9918 35.7445L20.9918 35.7446L20.9961 35.7479C21.5291 36.1646 22.2072 36.3496 22.878 36.2615C23.5488 36.1733 24.1561 35.8192 24.5633 35.2789L24.5633 35.279L24.5665 35.2746L38.2503 16.705C38.8226 15.9899 38.9581 15.0185 38.6027 14.1737C38.2457 13.3252 37.4514 12.7415 36.535 12.6543C35.6227 12.5676 34.7364 12.9869 34.2249 13.7464ZM0.5 24C0.5 11.0214 11.0211 0.500162 23.9997 0.5C36.9723 0.51526 47.4849 11.0279 47.5 24.0006C47.4997 36.979 36.9785 47.5 24 47.5C11.0213 47.5 0.5 36.9787 0.5 24Z\" fill=\"#559C14\" stroke=\"#417714\"/>\n </svg>`,\n clock: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 23.5C5.65916 23.5 0.5 18.3408 0.5 12C0.5 5.65916 5.65916 0.5 12 0.5C18.3408 0.5 23.5 5.65916 23.5 12C23.5 18.3408 18.3408 23.5 12 23.5ZM12 2.03333C6.50453 2.03333 2.03333 6.50453 2.03333 12C2.03333 17.4955 6.50453 21.9667 12 21.9667C17.4955 21.9667 21.9667 17.4955 21.9667 12C21.9667 6.50453 17.4955 2.03333 12 2.03333Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.687 17.438C16.487 17.438 16.298 17.36 16.157 17.218L11.47 12.53C11.4 12.46 11.345 12.378 11.307 12.285C11.304 12.277 11.301 12.268 11.298 12.26C11.266 12.174 11.251 12.088 11.251 12V8.25C11.251 7.836 11.587 7.5 12.001 7.5C12.415 7.5 12.751 7.836 12.751 8.25V11.689L17.218 16.157C17.36 16.299 17.438 16.487 17.438 16.687C17.438 16.887 17.36 17.076 17.218 17.217C17.076 17.358 16.887 17.438 16.687 17.438Z\"/>\n </svg>`,\n complaint: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.750465 24C0.549465 24 0.361465 23.922 0.219465 23.78C-0.00453524 23.556 -0.0635353 23.214 0.0724647 22.928L2.98346 16.815C2.00946 15.113 1.49746 13.183 1.49946 11.219C1.50846 5.033 6.54846 0 12.7345 0H12.7695C14.8715 0 16.9265 0.587 18.7115 1.697C21.2635 3.284 23.0445 5.77 23.7265 8.697C24.4085 11.624 23.9095 14.641 22.3225 17.192C20.7355 19.744 18.2495 21.525 15.3235 22.207C14.4765 22.405 13.6105 22.505 12.7495 22.505C10.8055 22.505 8.88546 21.991 7.18446 21.016L1.07246 23.928C0.971465 23.975 0.860465 24 0.750465 24ZM12.7345 1.5C7.37446 1.5 3.00746 5.861 2.99946 11.221C2.99646 13.046 3.50546 14.83 4.46946 16.379C4.60546 16.598 4.62046 16.866 4.50946 17.098L2.33546 21.664L6.90146 19.489C7.00046 19.441 7.11246 19.416 7.22346 19.416C7.36346 19.416 7.50146 19.455 7.62046 19.53C9.17146 20.495 10.9455 21.004 12.7505 21.004C13.4965 21.004 14.2475 20.917 14.9825 20.746C17.5185 20.155 19.6725 18.611 21.0485 16.4C22.4235 14.188 22.8555 11.573 22.2645 9.037C21.6735 6.501 20.1295 4.346 17.9185 2.971C16.3725 2.009 14.5915 1.5 12.7695 1.5C12.7655 1.5 12.7345 1.5 12.7345 1.5Z\"/>\n <path d=\"M12.7505 15.75C13.3718 15.75 13.8755 15.2463 13.8755 14.625C13.8755 14.0037 13.3718 13.5 12.7505 13.5C12.1292 13.5 11.6255 14.0037 11.6255 14.625C11.6255 15.2463 12.1292 15.75 12.7505 15.75Z\"/>\n <path d=\"M12.7505 12C12.3365 12 12.0005 11.664 12.0005 11.25V6.75C12.0005 6.336 12.3365 6 12.7505 6C13.1645 6 13.5005 6.336 13.5005 6.75V11.25C13.5005 11.664 13.1635 12 12.7505 12Z\"/>\n </svg>`,\n last: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20.35 19V5C20.35 4.73478 20.2262 4.48043 20.0059 4.29289C19.7855 4.10536 19.4866 4 19.175 4C18.8634 4 18.5645 4.10536 18.3441 4.29289C18.1238 4.48043 18 4.73478 18 5V19C18 19.2652 18.1238 19.5196 18.3441 19.7071C18.5645 19.8946 18.8634 20 19.175 20C19.4866 20 19.7855 19.8946 20.0059 19.7071C20.2262 19.5196 20.35 19.2652 20.35 19Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.0007 12C14.0013 12.4422 13.8113 12.8631 13.4795 13.1553L6.02754 19.7112C5.51395 20.1422 4.75026 20.0843 4.30747 19.5809C3.86469 19.0775 3.90477 18.3126 4.39776 17.8583L10.9142 12.1256C10.9504 12.0939 10.9712 12.0481 10.9712 12C10.9712 11.9519 10.9504 11.9061 10.9142 11.8744L4.39776 6.14174C3.90477 5.68736 3.86469 4.92253 4.30747 4.41911C4.75026 3.91569 5.51395 3.85782 6.02754 4.28877L13.4768 10.8426C13.8095 11.1354 14.0003 11.5569 14.0007 12Z\"/>\n </svg>\n `,\n first: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10 12C9.99945 11.5578 10.1894 11.1369 10.5212 10.8447L17.9732 4.28877C18.4868 3.85782 19.2505 3.91569 19.6932 4.41911C20.136 4.92253 20.0959 5.68736 19.603 6.14174L13.0865 11.8744C13.0503 11.9061 13.0296 11.9519 13.0296 12C13.0296 12.0481 13.0503 12.0939 13.0865 12.1256L19.603 17.8583C20.0959 18.3126 20.136 19.0775 19.6932 19.5809C19.2505 20.0843 18.4868 20.1422 17.9732 19.7112L10.5239 13.1574C10.1912 12.8646 10.0004 12.4431 10 12Z\"/>\n <path d=\"M6.35 19L6.35 5C6.35 4.73478 6.22621 4.48043 6.00585 4.29289C5.7855 4.10536 5.48663 4 5.175 4C4.86337 4 4.5645 4.10536 4.34415 4.29289C4.12379 4.48043 4 4.73478 4 5L4 19C4 19.2652 4.12379 19.5196 4.34415 19.7071C4.5645 19.8946 4.86337 20 5.175 20C5.48663 20 5.7855 19.8946 6.00585 19.7071C6.22621 19.5196 6.35 19.2652 6.35 19Z\"/>\n </svg>\n `,\n backspace: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(-65 -3428) translate(65 3428)\">\n <g fill-rule=\"nonzero\">\n <path d=\"M2.25 14C1.01 14 0 12.954 0 11.667V2.333C0 1.046 1.01 0 2.25 0h16.69c.78 0 1.494.41 1.908 1.096l2.812 4.667c.453.75.453 1.722 0 2.473l-2.812 4.672C20.432 13.592 19.72 14 18.943 14H2.25zm0-12.444c-.414 0-.75.348-.75.777v9.334c0 .429.336.777.75.777h16.69c.262 0 .499-.135.638-.363l2.81-4.668c.151-.251.151-.575 0-.825l-2.812-4.666c-.138-.23-.375-.365-.636-.365H2.25v-.001z\" transform=\"matrix(-1 0 0 1 24 5)\"/>\n <path d=\"M8.2 9.5c-.215 0-.416-.083-.567-.235L6.5 8.132 5.368 9.265c-.152.152-.352.235-.567.235-.215 0-.415-.083-.566-.235C4.083 9.115 4 8.913 4 8.7c0-.213.083-.415.234-.567l1.134-1.131-1.133-1.133c-.312-.313-.312-.82 0-1.133.152-.152.352-.235.566-.235.214 0 .415.083.566.235L6.5 5.868l1.132-1.133c.152-.152.352-.235.566-.235.214 0 .415.083.566.234.313.313.313.82 0 1.133L7.634 7l1.132 1.132c.152.152.234.353.234.567 0 .215-.083.416-.235.566-.15.15-.351.234-.566.234z\" transform=\"matrix(-1 0 0 1 24 5)\"/>\n </g>\n </g>\n </g>\n </svg>`,\n bigCamera: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M1.5 14C.673 14 0 13.327 0 12.5v-11C0 .673.673 0 1.5 0h13c.827 0 1.5.673 1.5 1.5v11c0 .827-.673 1.5-1.5 1.5h-13zm0-13c-.276 0-.5.224-.5.5v11c0 .276.224.5.5.5h13c.276 0 .5-.224.5-.5v-11c0-.276-.224-.5-.5-.5h-13zM23.5 13c-.077 0-.154-.018-.223-.052l-6.001-3C17.106 9.862 17 9.69 17 9.5v-5c0-.191.106-.362.276-.447l6-3c.07-.035.147-.053.224-.053.093 0 .184.026.263.075.148.091.237.25.237.425v11c0 .174-.089.333-.237.425-.079.049-.17.075-.263.075zm-.5-1.309V2.309l-5 2.5v4.382l5 2.5z\" transform=\"translate(-256 -3572) translate(256 3572) translate(0 5.5)\"/>\n </svg>`,\n bigClock: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-23C5.935 1 1 5.935 1 12s4.935 11 11 11 11-4.935 11-11S18.065 1 12 1z\" transform=\"translate(-160 -3572) translate(160 3572)\"/>\n <path d=\"M18 18c-.125 0-.245-.048-.338-.132l-6-5.5c-.103-.093-.162-.228-.162-.368V6.5c0-.276.224-.5.5-.5s.5.224.5.5v5.28l5.838 5.35c.097.09.155.213.161.347.006.133-.04.261-.13.36-.095.103-.23.162-.37.162z\" transform=\"translate(-160 -3572) translate(160 3572)\"/>\n </g>\n </svg>`,\n bigPhone: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M18.807 24c-.816 0-1.606-.237-2.283-.685C10.21 19.12 4.882 13.792.686 7.478c-1.084-1.635-.864-3.828.525-5.214L2.614.859C3.168.305 3.904 0 4.69 0c.785 0 1.522.305 2.076.859l2.561 2.558c1.143 1.145 1.143 3.007.001 4.152l-.519.52c2.148 2.566 4.536 4.955 7.103 7.104l.517-.517c.56-.558 1.296-.86 2.076-.86.785 0 1.522.305 2.076.86l2.562 2.56c1.143 1.146 1.142 3.008-.001 4.152l-1.404 1.404c-.78.779-1.82 1.208-2.931 1.208zM4.69 1.044c-.506 0-.981.196-1.338.553L1.949 3.002C.91 4.038.746 5.678 1.557 6.9c4.117 6.197 9.347 11.427 15.545 15.545.505.335 1.094.511 1.706.511.83 0 1.61-.32 2.194-.903l1.404-1.403c.738-.738.738-1.937 0-2.675l-2.56-2.562c-.357-.357-.832-.554-1.337-.554-.506 0-.98.196-1.337.553l-.855.855c-.098.098-.23.153-.37.153-.12 0-.238-.042-.33-.12-2.881-2.37-5.543-5.032-7.913-7.914-.171-.209-.157-.51.033-.7l.854-.856c.737-.738.737-1.94 0-2.677L6.03 1.597c-.357-.357-.833-.553-1.34-.553z\" transform=\"translate(-208 -3572) translate(208 3572)\"/>\n </svg>`,\n bigSearch: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14 14.5c-.134 0-.259-.052-.354-.146L10.5 11.207l-3.146 3.146c-.095.095-.22.147-.354.147-.134 0-.259-.052-.354-.146-.095-.094-.146-.22-.146-.354 0-.134.052-.259.146-.354L9.793 10.5 6.646 7.354C6.552 7.259 6.5 7.134 6.5 7c0-.134.052-.259.146-.354.094-.095.22-.146.354-.146.134 0 .259.052.354.146L10.5 9.793l3.146-3.146c.095-.095.22-.147.354-.147.134 0 .259.052.354.146.095.094.146.22.146.354 0 .134-.052.259-.146.354L11.207 10.5l3.146 3.146c.095.095.147.22.147.354 0 .134-.052.259-.146.354-.094.095-.22.146-.354.146z\" transform=\"translate(-304 -3572) translate(304 3572)\"/>\n <path d=\"M23.5 24c-.134 0-.259-.052-.354-.146l-5.589-5.589C15.617 20.031 13.121 21 10.5 21 4.71 21 0 16.29 0 10.5S4.71 0 10.5 0 21 4.71 21 10.5c0 2.621-.969 5.117-2.736 7.057l5.589 5.589c.095.095.147.22.147.354 0 .134-.052.259-.146.354-.094.095-.22.146-.354.146zm-13-23C5.262 1 1 5.262 1 10.5S5.262 20 10.5 20s9.5-4.262 9.5-9.5S15.738 1 10.5 1z\" transform=\"translate(-304 -3572) translate(304 3572)\"/>\n </g>\n </svg>`,\n search: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23.245 23.996C23.045 23.996 22.856 23.918 22.715 23.776L16.2 17.26C15.439 17.911 14.582 18.442 13.647 18.839C12.418 19.361 11.127 19.626 9.81001 19.626C8.55301 19.626 7.31801 19.385 6.13701 18.908C3.70601 17.927 1.80301 16.059 0.778008 13.646C-0.246992 11.234 -0.271992 8.56601 0.709008 6.13601C1.69001 3.70601 3.55801 1.80201 5.97001 0.777005C7.19901 0.254005 8.48901 -0.00999451 9.80701 -0.00999451C11.064 -0.00999451 12.299 0.232005 13.48 0.708005C15.911 1.68901 17.814 3.55701 18.839 5.97001C19.864 8.38301 19.889 11.05 18.908 13.48C18.506 14.476 17.952 15.389 17.259 16.198L23.776 22.716C24.068 23.008 24.068 23.484 23.776 23.777C23.634 23.918 23.445 23.996 23.245 23.996ZM9.80701 1.49001C8.69201 1.49001 7.59801 1.71401 6.55701 2.15701C4.51301 3.02601 2.93001 4.63801 2.09901 6.69701C1.26801 8.75601 1.28901 11.015 2.15701 13.059C3.02601 15.103 4.63801 16.686 6.69701 17.517C7.69801 17.921 8.74501 18.125 9.80901 18.125C10.924 18.125 12.018 17.901 13.059 17.458C14.033 17.044 14.906 16.46 15.653 15.722C15.663 15.708 15.674 15.696 15.685 15.685C15.701 15.669 15.716 15.656 15.73 15.646C16.493 14.875 17.099 13.953 17.516 12.918C18.347 10.859 18.326 8.60001 17.457 6.55601C16.589 4.51201 14.976 2.92901 12.917 2.09801C11.918 1.69501 10.871 1.49001 9.80701 1.49001Z\" />\n </svg>`,\n sync: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_1137_502)\">\n <path d=\"M3.74899 15.249C3.53599 15.249 3.33199 15.157 3.18899 14.996L0.217986 12.026C0.0759858 11.885 -0.00201416 11.696 -0.00201416 11.496C-0.00201416 11.296 0.0759858 11.107 0.217986 10.966C0.358986 10.824 0.547986 10.746 0.747986 10.746C0.947986 10.746 1.13699 10.824 1.27799 10.966L2.99799 12.686V12.247C2.99999 9.55401 4.19199 7.02601 6.26799 5.31201C7.90099 3.96401 9.87699 3.25201 11.984 3.25201C12.272 3.25201 12.565 3.26601 12.854 3.29301C15.248 3.52201 17.408 4.66801 18.939 6.52201C19.066 6.67601 19.126 6.87101 19.107 7.07101C19.088 7.27101 18.992 7.45101 18.838 7.57801C18.704 7.68901 18.535 7.75001 18.361 7.75001C18.136 7.75001 17.925 7.65101 17.782 7.47701C16.507 5.93201 14.706 4.97701 12.712 4.78601C12.47 4.76301 12.224 4.75101 11.983 4.75101C10.23 4.75101 8.58499 5.34501 7.22399 6.46801C5.49299 7.89701 4.49999 10.003 4.49899 12.247V12.686L6.21899 10.966C6.36099 10.824 6.54899 10.746 6.74899 10.746C6.94899 10.746 7.13799 10.824 7.27899 10.966C7.42099 11.107 7.49899 11.296 7.49899 11.496C7.49899 11.696 7.42099 11.885 7.27899 12.026L4.29299 15.012C4.16599 15.157 3.96199 15.249 3.74899 15.249Z\" />\n <path d=\"M12.006 21.245C11.917 21.245 11.829 21.244 11.739 21.241C9.33598 21.171 7.10398 20.17 5.45398 18.422C5.31598 18.276 5.24398 18.086 5.24998 17.886C5.25598 17.686 5.33898 17.5 5.48498 17.362C5.62498 17.23 5.80798 17.158 5.99998 17.158C6.20598 17.158 6.40498 17.244 6.54598 17.393C7.92098 18.85 9.78098 19.684 11.783 19.742C11.854 19.744 11.926 19.745 11.997 19.745C13.921 19.745 15.75 19.018 17.147 17.7C18.564 16.363 19.408 14.506 19.492 12.564L17.779 14.277C17.637 14.419 17.449 14.497 17.249 14.497C17.049 14.497 16.86 14.419 16.719 14.277C16.427 13.985 16.427 13.509 16.719 13.216L19.719 10.216C19.789 10.146 19.872 10.091 19.964 10.053C19.971 10.05 19.98 10.047 19.988 10.044C20.069 10.013 20.159 9.996 20.249 9.996C20.338 9.996 20.425 10.012 20.51 10.044C20.521 10.048 20.532 10.052 20.542 10.056C20.627 10.091 20.709 10.146 20.78 10.216L23.78 13.216C24.072 13.508 24.072 13.984 23.78 14.277C23.638 14.419 23.45 14.497 23.25 14.497C23.05 14.497 22.861 14.419 22.72 14.277L20.995 12.552C20.913 14.909 19.897 17.168 18.177 18.791C16.499 20.373 14.308 21.245 12.006 21.245Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1137_502\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n bigInfo: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24.001c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-22.956C5.958 1.045 1.043 5.959 1.043 12S5.958 22.958 12 22.958c6.042 0 10.957-4.915 10.957-10.957 0-6.042-4.915-10.956-10.957-10.956z\" transform=\"translate(-111.000000, -3572.000000) translate(111.000000, 3572.000000)\"/>\n <path d=\"M13.043 17.744c-.862 0-1.565-.702-1.565-1.565V9.397H9.913c-.288 0-.522-.234-.522-.522 0-.288.234-.522.522-.522h1.565c.575 0 1.044.469 1.044 1.044v6.782c0 .288.233.522.521.522h1.566c.288 0 .521.234.521.522 0 .288-.233.521-.521.521h-1.566zM11.734 7.304c-.432 0-.783-.35-.783-.782 0-.432.35-.783.783-.783.432 0 .783.35.783.783 0 .432-.351.782-.783.782z\" transform=\"translate(-111.000000, -3572.000000) translate(111.000000, 3572.000000)\"/>\n </g>\n </svg>`,\n calendar: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M2.252 24c-1.241 0-2.25-1.009-2.25-2.25V5.25C.002 4.009 1.011 3 2.252 3h3.75V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75c1.241 0 2.25 1.009 2.25 2.25v16.5c0 1.241-1.009 2.25-2.25 2.25h-19.5zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zm21-12.75V5.25c0-.414-.336-.75-.75-.75h-3.75V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-3.75c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-65 -3476) translate(65 3476)\"/>\n </svg>`,\n calendarRemove: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.25 24C1.009 24 0 22.991 0 21.75V5.25C0 4.009 1.009 3 2.25 3H6V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75C22.991 3 24 4.009 24 5.25v16.5c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zM22.5 9V5.25c0-.414-.336-.75-.75-.75H18V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75S6 6.414 6 6V4.5H2.25c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-161 -3476) translate(161 3476)\"/>\n <path d=\"M15 20.25c-.2 0-.389-.078-.53-.22L12 17.561l-2.47 2.47c-.141.141-.33.219-.53.219s-.389-.078-.53-.22c-.292-.292-.292-.768 0-1.061l2.47-2.47-2.47-2.47c-.292-.292-.292-.768 0-1.061.141-.14.33-.218.53-.218s.389.078.53.22L12 15.44l2.47-2.47c.142-.142.33-.22.53-.22s.389.078.53.22c.292.292.292.768 0 1.061l-2.47 2.47 2.47 2.47c.292.292.292.768 0 1.061-.141.14-.33.218-.53.218z\" transform=\"translate(-161 -3476) translate(161 3476)\"/>\n </g>\n </svg>`,\n calendarSet: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.25 24C1.009 24 0 22.991 0 21.75V5.25C0 4.009 1.009 3 2.25 3H6V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h9V.75c0-.414.336-.75.75-.75s.75.336.75.75V3h3.75C22.991 3 24 4.009 24 5.25v16.5c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V10.5h-21v11.25zM22.5 9V5.25c0-.414-.336-.75-.75-.75H18V6c0 .414-.336.75-.75.75s-.75-.336-.75-.75V4.5h-9V6c0 .414-.336.75-.75.75S6 6.414 6 6V4.5H2.25c-.414 0-.75.336-.75.75V9h21z\" transform=\"translate(-113 -3476) translate(113 3476)\"/>\n <path d=\"M11.25 20.25c-.2 0-.389-.078-.53-.22l-3-3c-.292-.292-.292-.768 0-1.061.142-.142.33-.22.53-.22s.389.078.53.22l2.389 2.389 3.981-5.309c.141-.188.366-.3.6-.3.163 0 .319.052.449.15.331.249.398.719.15 1.05l-4.5 6c-.131.174-.33.283-.547.298-.014.002-.033.003-.052.003z\" transform=\"translate(-113 -3476) translate(113 3476)\"/>\n </g>\n </svg>`,\n camera: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M3.75 15.511c-2.068 0-3.75-1.682-3.75-3.75v-7.5C0 2.193 1.682.511 3.75.511h9c2.068 0 3.75 1.682 3.75 3.75v7.5c0 2.068-1.682 3.75-3.75 3.75h-9zm0-13.5c-1.241 0-2.25 1.009-2.25 2.25v7.5c0 1.241 1.009 2.25 2.25 2.25h9c1.241 0 2.25-1.009 2.25-2.25v-7.5c0-1.241-1.009-2.25-2.25-2.25h-9zM22.499 13.548c-.233 0-.458-.053-.669-.159l-3.416-1.707c-.37-.185-.52-.636-.335-1.006.128-.256.385-.415.671-.415.115 0 .23.027.334.078l3.416 1.708V3.974l-3.415 1.708c-.104.052-.22.079-.335.079-.286 0-.543-.159-.671-.414-.185-.37-.034-.822.335-1.006l3.415-1.707c.207-.104.439-.159.671-.159.402 0 .778.156 1.061.44.284.283.439.659.439 1.06v8.073c0 .231-.054.462-.157.669-.179.359-.488.627-.867.753-.154.051-.315.078-.477.078z\" transform=\"translate(-113 -3428) translate(113 3428) translate(0 4)\"/>\n </svg>`,\n check: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12C23.992 5.376 18.624.008 12 0zm6.927 8.2l-6.845 9.289c-.163.217-.407.359-.676.394-.268.035-.54-.039-.754-.206l-4.888-3.908c-.431-.345-.501-.975-.156-1.406.345-.431.975-.501 1.406-.156l4.076 3.261 6.227-8.451c.204-.306.56-.476.927-.441.366.035.684.268.827.608.143.34.087.73-.144 1.016z\" />\n </svg>`,\n checkmark: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M19.592 4.187c-.45-.321-1.074-.218-1.396.23L8.834 17.47l-3.126-3.127c-.252-.253-.62-.352-.966-.26-.345.093-.615.363-.708.708-.092.345.006.714.259.966l3.959 3.959c.21.202.497.304.788.28.29-.023.557-.17.732-.404l10.05-14.008c.322-.45.219-1.075-.23-1.397z\" transform=\"translate(-401 -3476) translate(401 3476)\"/>\n </svg>`,\n clinic: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_4366_10250)\">\n <path d=\"M5.25098 24C4.00998 24 3.00098 22.991 3.00098 21.75V12.75C3.00098 12.336 3.33698 12 3.75098 12C4.16498 12 4.50098 12.336 4.50098 12.75V21.75C4.50098 22.164 4.83698 22.5 5.25098 22.5H18.751C19.165 22.5 19.501 22.164 19.501 21.75V12.75C19.501 12.336 19.837 12 20.251 12C20.665 12 21.001 12.336 21.001 12.75V21.75C21.001 22.991 19.992 24 18.751 24H5.25098Z\"/>\n <path d=\"M23.2509 12C23.0609 12 22.8789 11.928 22.7399 11.798L12.0009 1.776L1.2619 11.798C1.1229 11.928 0.940899 12 0.750899 12C0.543899 12 0.343899 11.913 0.202899 11.762C-0.0791012 11.46 -0.0631012 10.984 0.238899 10.702L11.4889 0.202C11.6279 0.072 11.8099 0 12.0009 0C12.1919 0 12.3739 0.072 12.5129 0.202L23.7629 10.702C23.9089 10.839 23.9939 11.024 24.0009 11.224C24.0079 11.424 23.9369 11.615 23.7999 11.762C23.6569 11.913 23.4569 12 23.2509 12Z\"/>\n <path d=\"M11.251 19.5C10.424 19.5 9.75098 18.827 9.75098 18V16.5H8.25098C7.42398 16.5 6.75098 15.827 6.75098 15V13.5C6.75098 12.673 7.42398 12 8.25098 12H9.75098V10.5C9.75098 9.673 10.424 9 11.251 9H12.751C13.578 9 14.251 9.673 14.251 10.5V12H15.751C16.578 12 17.251 12.673 17.251 13.5V15C17.251 15.827 16.578 16.5 15.751 16.5H14.251V18C14.251 18.827 13.578 19.5 12.751 19.5H11.251ZM8.25098 15H10.501C10.915 15 11.251 15.336 11.251 15.75V18H12.751V15.75C12.751 15.336 13.087 15 13.501 15H15.751V13.5H13.501C13.087 13.5 12.751 13.164 12.751 12.75V10.5H11.251V12.75C11.251 13.164 10.915 13.5 10.501 13.5H8.25098V15Z\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_4366_10250\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n copy: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.75 24C1.509 24 .5 22.991.5 21.75V5.25c0-.414.336-.75.75-.75s.75.336.75.75v16.5c0 .414.336.75.75.75h13.5c.414 0 .75.336.75.75s-.336.75-.75.75H2.75z\" transform=\"translate(1)\" />\n <path d=\"M5.25 21c-.965 0-1.75-.785-1.75-1.75V1.75C3.5.785 4.285 0 5.25 0h14.5c.965 0 1.75.785 1.75 1.75v17.5c0 .965-.785 1.75-1.75 1.75H5.25zm0-19.5c-.138 0-.25.112-.25.25v17.5c0 .138.112.25.25.25h14.5c.138 0 .25-.112.25-.25V1.75c0-.138-.112-.25-.25-.25H5.25z\" transform=\"translate(1)\" />\n </g>\n </svg>`,\n coworker: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 7.5C9.932 7.5 8.25 5.818 8.25 3.75C8.25 1.682 9.932 0 12 0C14.068 0 15.75 1.682 15.75 3.75C15.75 5.818 14.068 7.5 12 7.5ZM12 1.5C10.759 1.5 9.75 2.509 9.75 3.75C9.75 4.991 10.759 6 12 6C13.241 6 14.25 4.991 14.25 3.75C14.25 2.509 13.241 1.5 12 1.5Z\"/>\n <path d=\"M9.75 24C9.363 24 9.042 23.71 9.004 23.325L8.321 16.5H6.75C6.336 16.5 6 16.164 6 15.75V13.5C6 10.192 8.692 7.5 12 7.5C15.308 7.5 18 10.192 18 13.5V15.75C18 16.164 17.664 16.5 17.25 16.5H15.679L14.996 23.325C14.958 23.709 14.637 24 14.25 24H9.75ZM13.571 22.5L14.254 15.675C14.292 15.291 14.613 15 15 15H16.5V13.5C16.5 11.019 14.481 9 12 9C9.519 9 7.5 11.019 7.5 13.5V15H9C9.387 15 9.708 15.29 9.746 15.675L10.428 22.5H13.571Z\"/>\n </svg>`,\n coworkers: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 9C2.846 9 1.5 7.654 1.5 6C1.5 4.346 2.846 3 4.5 3C6.154 3 7.5 4.346 7.5 6C7.5 7.654 6.154 9 4.5 9ZM4.5 4.5C3.673 4.5 3 5.173 3 6C3 6.827 3.673 7.5 4.5 7.5C5.327 7.5 6 6.827 6 6C6 5.173 5.327 4.5 4.5 4.5Z\"/>\n <path d=\"M3 22.5C2.623 22.5 2.303 22.218 2.256 21.843L1.588 16.5H0.75C0.336 16.5 0 16.164 0 15.75V13.5C0 11.019 2.019 9 4.5 9C4.914 9 5.25 9.336 5.25 9.75C5.25 10.164 4.914 10.5 4.5 10.5C2.846 10.5 1.5 11.846 1.5 13.5V15H2.25C2.627 15 2.947 15.282 2.994 15.657L3.662 21H6C6.414 21 6.75 21.336 6.75 21.75C6.75 22.164 6.414 22.5 6 22.5H3Z\"/>\n <path d=\"M19.5 9C17.846 9 16.5 7.654 16.5 6C16.5 4.346 17.846 3 19.5 3C21.154 3 22.5 4.346 22.5 6C22.5 7.654 21.154 9 19.5 9ZM19.5 4.5C18.673 4.5 18 5.173 18 6C18 6.827 18.673 7.5 19.5 7.5C20.327 7.5 21 6.827 21 6C21 5.173 20.327 4.5 19.5 4.5Z\"/>\n <path d=\"M18 22.5C17.586 22.5 17.25 22.164 17.25 21.75C17.25 21.336 17.586 21 18 21H20.338L21.006 15.657C21.053 15.282 21.373 15 21.75 15H22.5V13.5C22.5 11.846 21.154 10.5 19.5 10.5C19.086 10.5 18.75 10.164 18.75 9.75C18.75 9.336 19.086 9 19.5 9C21.981 9 24 11.019 24 13.5V15.75C24 16.164 23.664 16.5 23.25 16.5H22.412L21.744 21.843C21.697 22.218 21.377 22.5 21 22.5H18Z\"/>\n <path d=\"M12 7.5C9.932 7.5 8.25 5.818 8.25 3.75C8.25 1.682 9.932 0 12 0C14.068 0 15.75 1.682 15.75 3.75C15.75 5.818 14.068 7.5 12 7.5ZM12 1.5C10.759 1.5 9.75 2.509 9.75 3.75C9.75 4.991 10.759 6 12 6C13.241 6 14.25 4.991 14.25 3.75C14.25 2.509 13.241 1.5 12 1.5Z\"/>\n <path d=\"M9.75 24C9.363 24 9.042 23.71 9.004 23.325L8.321 16.5H6.75C6.336 16.5 6 16.164 6 15.75V13.5C6 10.192 8.692 7.5 12 7.5C15.308 7.5 18 10.192 18 13.5V15.75C18 16.164 17.664 16.5 17.25 16.5H15.679L14.996 23.325C14.958 23.709 14.637 24 14.25 24H9.75ZM13.571 22.5L14.254 15.675C14.292 15.291 14.613 15 15 15H16.5V13.5C16.5 11.019 14.481 9 12 9C9.519 9 7.5 11.019 7.5 13.5V15H9C9.387 15 9.708 15.29 9.746 15.675L10.428 22.5H13.571Z\"/>\n </svg>`,\n counselingPerson: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 7.5C3.932 7.5 2.25 5.818 2.25 3.75C2.25 1.682 3.932 0 6 0C8.068 0 9.75 1.682 9.75 3.75C9.75 5.818 8.068 7.5 6 7.5ZM6 1.5C4.759 1.5 3.75 2.509 3.75 3.75C3.75 4.991 4.759 6 6 6C7.241 6 8.25 4.991 8.25 3.75C8.25 2.509 7.241 1.5 6 1.5Z\"/>\n <path d=\"M3.75 24C3.363 24 3.042 23.71 3.004 23.325L2.321 16.5H0.75C0.336 16.5 0 16.164 0 15.75V13.5C0.001 11.358 1.156 9.364 3.014 8.298C3.92 7.777 4.95 7.502 5.992 7.502C8.141 7.502 10.139 8.656 11.206 10.515C11.306 10.689 11.332 10.891 11.28 11.084C11.228 11.277 11.103 11.439 10.929 11.538C10.816 11.603 10.687 11.638 10.556 11.638C10.288 11.638 10.039 11.494 9.905 11.261C9.105 9.867 7.606 9.002 5.993 9.002C5.212 9.002 4.44 9.208 3.76 9.599C2.367 10.399 1.501 11.894 1.5 13.501V15H3C3.387 15 3.708 15.29 3.746 15.675L4.429 22.5H7.572L7.827 19.942C7.865 19.563 8.191 19.266 8.569 19.266C8.597 19.266 8.626 19.268 8.655 19.271C8.848 19.29 9.027 19.386 9.154 19.542C9.281 19.697 9.34 19.892 9.32 20.091L8.997 23.324C8.958 23.71 8.637 24 8.25 24H3.75Z\"/>\n <path d=\"M17.25 24C13.528 24 10.5 20.972 10.5 17.25C10.5 13.528 13.528 10.5 17.25 10.5C20.972 10.5 24 13.528 24 17.25C24 20.972 20.972 24 17.25 24ZM17.25 12C14.355 12 12 14.355 12 17.25C12 20.145 14.355 22.5 17.25 22.5C20.145 22.5 22.5 20.145 22.5 17.25C22.5 14.355 20.145 12 17.25 12Z\"/>\n <path d=\"M17.25 18.75C16.836 18.75 16.5 18.414 16.5 18C16.5 17.586 16.836 17.25 17.25 17.25C17.87 17.25 18.375 16.745 18.375 16.125C18.375 15.505 17.87 15 17.25 15C16.63 15 16.125 15.505 16.125 16.125C16.125 16.539 15.789 16.875 15.375 16.875C14.961 16.875 14.625 16.539 14.625 16.125C14.625 14.677 15.802 13.5 17.25 13.5C18.698 13.5 19.875 14.677 19.875 16.125C19.875 17.573 18.698 18.75 17.25 18.75Z\"/>\n <path d=\"M17.25 21.75C16.63 21.75 16.125 21.245 16.125 20.625C16.125 20.005 16.63 19.5 17.25 19.5C17.554 19.501 17.836 19.618 18.048 19.831C18.26 20.044 18.376 20.326 18.375 20.627C18.375 21.246 17.87 21.75 17.25 21.75Z\"/>\n </svg>`,\n counseling: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\" transform=\"translate(-1121 -3428) translate(1121 3428)\">\n <path d=\"M5.25 10.5C2.355 10.5 0 8.145 0 5.25S2.355 0 5.25 0s5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9C3.182 1.5 1.5 3.182 1.5 5.25S3.182 9 5.25 9 9 7.318 9 5.25 7.318 1.5 5.25 1.5z\"/>\n <path d=\"M5.25 6c-.414 0-.75-.336-.75-.75V3c0-.414.336-.75.75-.75S6 2.586 6 3v1.5h.75c.414 0 .75.336.75.75S7.164 6 6.75 6h-1.5zM23.25 24c-.414 0-.75-.336-.75-.75V21h-.75c-.414 0-.75-.336-.75-.75s.336-.75.75-.75.75-.336.75-.75-.336-.75-.75-.75-.75-.336-.75-.75.336-.75.75-.75c1.241 0 2.25 1.009 2.25 2.25 0 .34-.075.668-.221.969.137.136.221.324.221.531v3c0 .414-.336.75-.75.75zM.75 24c-.414 0-.75-.336-.75-.75v-3c0-.414.336-.75.75-.75h3.681L.543 14.964C.154 14.48-.02 13.89.045 13.292c.066-.598.36-1.134.828-1.51.397-.318.896-.494 1.407-.494.632 0 1.237.266 1.661.729L7.785 16.5h3.465c.414 0 .75.336.75.75s-.336.75-.75.75H7.44c-.219 0-.427-.095-.569-.262l-4.052-4.726c-.128-.14-.326-.225-.535-.225-.172 0-.339.059-.471.165-.156.125-.254.304-.276.503-.022.199.035.395.161.551l4.485 5.231c.141.167.348.263.567.263h4.5c.414 0 .75.336.75.75s-.336.75-.75.75H1.5v2.25c0 .414-.336.75-.75.75zM16.5 8.25c-1.861 0-3.375-1.514-3.375-3.375S14.639 1.5 16.5 1.5s3.375 1.514 3.375 3.375S18.361 8.25 16.5 8.25zm0-5.25c-1.034 0-1.875.841-1.875 1.875S15.466 6.75 16.5 6.75s1.875-.841 1.875-1.875S17.534 3 16.5 3zM15.75 24c-1.241 0-2.25-1.009-2.25-2.25v-5.378c-.885-.314-1.5-1.162-1.5-2.122V12c0-2.068 1.682-3.75 3.75-3.75h1.5C19.318 8.25 21 9.932 21 12v2.25c0 .96-.615 1.808-1.5 2.122v5.378c0 1.241-1.009 2.25-2.25 2.25h-1.5zm0-14.25c-1.241 0-2.25 1.009-2.25 2.25v2.25c0 .414.336.75.75.75s.75.336.75.75v6c0 .414.336.75.75.75h1.5c.414 0 .75-.336.75-.75v-6c0-.414.336-.75.75-.75s.75-.336.75-.75V12c0-1.241-1.009-2.25-2.25-2.25h-1.5z\"/>\n </g>\n </svg>`,\n cross: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M13.533 12.118c-.032-.031-.05-.074-.05-.118s.018-.087.05-.118l6.174-6.175c.39-.39.39-1.024 0-1.414-.392-.39-1.025-.39-1.415 0l-6.175 6.172c-.03.032-.073.05-.118.05-.044 0-.086-.018-.118-.05L5.707 4.294c-.39-.391-1.023-.391-1.414 0-.39.39-.39 1.023 0 1.413l6.173 6.175c.032.031.05.074.05.118s-.018.087-.05.118l-6.173 6.175c-.253.253-.351.62-.259.966.093.345.362.615.707.707.346.092.714-.006.966-.26l6.174-6.174c.032-.032.074-.05.118-.05.045 0 .087.018.118.05l6.175 6.175c.39.39 1.023.39 1.414 0 .39-.39.39-1.023 0-1.414l-6.173-6.175z\" transform=\"translate(-711 -502) translate(709 500) translate(2 2)\"/>\n </svg>`,\n delete: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6.631 23.25c-1.161 0-2.146-.906-2.242-2.064L3.06 5.25H1.5c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6V3C7.5 1.759 8.509.75 9.75.75h4.5C15.491.75 16.5 1.759 16.5 3v.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-1.56l-1.328 15.937c-.096 1.157-1.081 2.063-2.242 2.063H6.631zm-.748-2.188c.032.386.36.688.748.688H17.37c.387 0 .716-.302.747-.688L19.435 5.25H4.565l1.318 15.812zM15 3.75V3c0-.414-.336-.75-.75-.75h-4.5c-.414 0-.75.336-.75.75v.75h6z\" transform=\"translate(-209 -3428) translate(209 3428)\"/>\n <path d=\"M9.75 18c-.414 0-.75-.336-.75-.75v-7.5c0-.414.336-.75.75-.75s.75.336.75.75v7.5c0 .414-.336.75-.75.75zM14.25 18c-.414 0-.75-.336-.75-.75v-7.5c0-.414.336-.75.75-.75s.75.336.75.75v7.5c0 .414-.336.75-.75.75z\" transform=\"translate(-209 -3428) translate(209 3428)\"/>\n </g>\n </svg>`,\n download: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 18.75c-.088 0-.175-.016-.26-.047l-.022-.008c-.096-.039-.179-.094-.249-.165L7.72 14.78c-.292-.292-.292-.768 0-1.061.142-.142.33-.22.53-.22s.389.078.53.22l2.47 2.47V6.75c0-.414.336-.75.75-.75s.75.336.75.75v9.439l2.47-2.47c.142-.142.33-.22.53-.22s.389.078.53.22c.292.292.292.768 0 1.061l-3.75 3.75c-.07.07-.153.125-.246.164l-.026.01c-.085.031-.171.046-.258.046z\" />\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n </g>\n </svg>`,\n edit: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\">\n <path d=\"M2.626 21.997c-.167 0-.323-.065-.441-.182-.181-.18-.235-.449-.136-.684l2.55-6.105L4.61 15c.01-.024.03-.06.056-.096l.026-.034c.014-.018.026-.032.04-.045l8.815-8.81c.007-.01.015-.019.022-.026l.037-.033 2.529-2.529c-.248-.116-.518-.176-.798-.176-.501 0-.97.193-1.323.545L11.36 6.45c-.118.118-.275.183-.441.183-.168 0-.325-.065-.443-.184-.243-.243-.243-.64.001-.884l2.655-2.652C13.719 2.324 14.503 2 15.34 2c.632 0 1.25.192 1.767.546.525-.35 1.149-.54 1.782-.54.634 0 1.25.186 1.78.539.69.49 1.143 1.212 1.284 2.036.14.824-.048 1.652-.531 2.332-.1.142-.214.275-.336.398L9.153 19.244c-.01.01-.024.021-.037.031-.052.045-.104.079-.162.103l-6.084 2.57c-.079.033-.16.049-.244.049zm1.167-1.796l3.82-1.614-2.22-2.219-1.6 3.833zm4.918-2.283l7.955-7.955-2.65-2.65-7.956 7.953 2.651 2.652zM17.55 9.08l2.652-2.652c.073-.074.14-.154.2-.238.6-.843.401-2.016-.442-2.615-.313-.208-.685-.32-1.07-.32-.535 0-1.054.222-1.425.61L14.9 6.429l2.65 2.65z\" transform=\"translate(-257 -3428) translate(257 3428)\"/>\n </g>\n </svg>`,\n email: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M2.25 20.5C1.009 20.5 0 19.491 0 18.25v-12c0-.537.195-1.059.548-1.468.013-.016.031-.037.051-.056C1.025 4.265 1.626 4 2.25 4h19.5c.625 0 1.226.265 1.652.727.018.018.035.037.051.057.351.404.547.927.547 1.466v12c0 1.241-1.009 2.25-2.25 2.25H2.25zm-.75-2.25c0 .414.336.75.75.75h19.5c.414 0 .75-.336.75-.75V6.437l-5.616 3.873 3.125 2.889c.304.281.322.756.042 1.06-.142.153-.343.241-.551.241-.189 0-.37-.071-.509-.199l-3.373-3.118-1.825 1.259c-.526.364-1.146.556-1.793.556-.646 0-1.266-.192-1.793-.556l-1.825-1.258-3.373 3.118c-.139.127-.32.198-.509.198-.208 0-.409-.088-.551-.24-.281-.304-.262-.78.041-1.06l3.125-2.889L1.5 6.437V18.25zm9.559-7.043c.276.191.601.291.941.291.34 0 .665-.101.941-.291L21.217 5.5H2.783l8.276 5.707z\" transform=\"translate(-305 -3428) translate(305 3428)\"/>\n </svg>`,\n expand: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M19.5 16.498c-.2 0-.389-.078-.53-.22-.141-.142-.22-.33-.22-.53s.078-.389.22-.53l2.47-2.47H2.561l2.47 2.47c.142.142.22.33.22.53s-.078.389-.22.53c-.142.142-.33.22-.53.22s-.389-.078-.53-.22l-3.75-3.75c-.07-.07-.125-.152-.163-.245l-.01-.026C.016 12.172 0 12.086 0 11.998c0-.089.016-.176.048-.261l.008-.021c.04-.097.095-.179.166-.249L3.97 7.718c.142-.142.33-.22.53-.22s.389.078.53.22c.142.141.22.33.22.53s-.078.389-.22.53l-2.47 2.47h18.879l-2.47-2.47c-.142-.141-.22-.33-.22-.53s.078-.389.22-.53c.142-.141.33-.22.53-.22s.389.078.53.22l3.75 3.75c.07.07.125.152.163.245l.01.026c.032.081.048.17.048.259 0 .087-.016.174-.047.258l-.006.016c-.042.104-.098.187-.168.257l-3.749 3.749c-.141.142-.33.22-.53.22z\" />\n </svg>`,\n external: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.251 16.498c-.2 0-.389-.078-.53-.22-.292-.292-.292-.768 0-1.061l13.72-13.72h-4.939c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6.75c.089 0 .176.016.261.048l.032.012c.176.072.324.221.4.404l.01.026c.031.081.047.17.047.26v6.75c0 .414-.336.75-.75.75s-.75-.336-.75-.75V2.559l-13.72 13.72c-.142.141-.331.219-.531.219z\" />\n <path d=\"M2.251 23.998c-1.241 0-2.25-1.009-2.25-2.25v-15c0-1.241 1.009-2.25 2.25-2.25h9c.414 0 .75.336.75.75s-.336.75-.75.75h-9c-.414 0-.75.336-.75.75v15c0 .414.336.75.75.75h15c.414 0 .75-.336.75-.75v-9c0-.414.336-.75.75-.75s.75.336.75.75v9c0 1.241-1.009 2.25-2.25 2.25h-15z\" />\n </g>\n </svg>`,\n flag: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M.75 24c-.414 0-.75-.336-.75-.75V.75C0 .336.336 0 .75 0s.75.336.75.75v1.88l2.184-.671c.988-.304 2.014-.458 3.047-.458 1.919 0 3.797.531 5.43 1.537 1.396.859 3.005 1.313 4.651 1.313.823 0 1.64-.114 2.428-.339l2.369-.677c.167-.047.339-.072.512-.072.502 0 .973.195 1.327.548.356.353.552.824.552 1.325v11.728c0 .833-.559 1.574-1.36 1.803l-2.987.854c-.921.262-1.874.395-2.833.395-1.928 0-3.811-.532-5.445-1.54-1.397-.86-3.003-1.314-4.644-1.314-.884 0-1.761.132-2.606.392l-2.625.808v4.988c0 .414-.336.75-.75.75zm5.981-8.438c1.919 0 3.796.531 5.43 1.537 1.399.862 3.01 1.317 4.659 1.317.821 0 1.635-.114 2.421-.337l2.987-.854c.16-.046.272-.194.272-.361V5.137c0-.1-.039-.194-.11-.265-.071-.071-.165-.11-.266-.11-.035 0-.07.005-.104.014l-2.368.677c-.922.263-1.878.397-2.84.397-1.925 0-3.806-.531-5.438-1.535-1.397-.86-3.003-1.314-4.644-1.314-.884 0-1.761.132-2.606.392L1.5 4.199v12.494l2.184-.672c.988-.304 2.013-.459 3.047-.459z\" transform=\"translate(-449 -3428) translate(449 3428)\"/>\n </svg>`,\n fullscreen: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M.75 23.998c-.088 0-.175-.016-.26-.047l-.022-.008c-.188-.077-.336-.226-.412-.41l-.009-.023c-.03-.082-.047-.171-.047-.262v-6.75c0-.414.336-.75.75-.75s.75.336.75.75v4.939l7.72-7.72c.142-.142.33-.22.53-.22s.389.078.53.22c.142.142.22.33.22.53s-.078.389-.22.53l-7.72 7.72H7.5c.414 0 .75.336.75.75s-.336.75-.75.75H.75v.001zM14.25 10.498c-.2 0-.389-.078-.53-.22-.142-.141-.22-.33-.22-.53s.078-.389.22-.53l7.72-7.72H16.5c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6.75c.089 0 .176.016.261.048l.032.012c.176.072.324.221.4.404l.01.026c.031.082.047.171.047.26v6.75c0 .414-.336.75-.75.75s-.75-.336-.75-.75V2.559l-7.72 7.72c-.141.141-.33.219-.53.219z\" />\n </g>\n </svg>`,\n happy: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n <circle cx=\"8.25\" cy=\"9\" r=\"1.125\" />\n <circle cx=\"15.75\" cy=\"9\" r=\"1.125\" />\n <path d=\"M11.986 19.503a7.412 7.412 0 0 1-3.319-.779 7.546 7.546 0 0 1-3.391-3.391.746.746 0 0 1 .339-1.005.745.745 0 0 1 1.005.339 6.032 6.032 0 0 0 2.713 2.713 5.933 5.933 0 0 0 2.653.623 5.977 5.977 0 0 0 5.389-3.336.745.745 0 0 1 1.005-.339.75.75 0 0 1 .339 1.005 7.463 7.463 0 0 1-6.733 4.17z\" />\n </g>\n </svg>`,\n information: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M13.5 17.25A2.252 2.252 0 0111.25 15v-3.75h-.75a.75.75 0 010-1.5h.75c.827 0 1.5.673 1.5 1.5V15c0 .414.336.75.75.75h.75a.75.75 0 010 1.5h-.75z\" />\n <circle cx=\"11.625\" cy=\"7.125\" r=\"1.125\" />\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" />\n </g>\n </svg>`,\n invoice: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.75 24C1.509 24 .5 22.991.5 21.75V2.25C.5 1.009 1.509 0 2.75 0h10.629c.601 0 1.165.234 1.59.658l5.872 5.872c.425.425.659.99.659 1.59v13.63c0 1.241-1.009 2.25-2.25 2.25H2.75zm0-22.5c-.414 0-.75.336-.75.75v19.5c0 .414.336.75.75.75h16.5c.414 0 .75-.336.75-.75V9h-5.25c-1.241 0-2.25-1.009-2.25-2.25V1.5H2.75zM14 6.75c0 .414.336.75.75.75h4.939L14 1.811V6.75z\" transform=\"translate(-1025 -3428) translate(1025 3428) translate(1)\"/>\n <path d=\"M7.062 14.25c-.414 0-.75-.336-.75-.75v-.353c-.675-.153-1.285-.542-1.709-1.099-.121-.159-.173-.356-.146-.555.027-.198.129-.375.289-.496.131-.1.289-.153.454-.153.236 0 .454.108.597.296.277.364.716.581 1.175.581l.057-.001c.774 0 1.342-.421 1.342-.797 0-.376-.56-.796-1.309-.796-1.551 0-2.812-1.031-2.812-2.298 0-1.052.849-1.943 2.062-2.213V5.25c0-.414.336-.75.75-.75s.75.336.75.75v.356c.676.154 1.284.542 1.705 1.096.121.159.173.356.146.555-.027.199-.13.375-.289.496-.131.1-.288.153-.453.153-.233 0-.457-.111-.597-.296-.276-.364-.714-.581-1.17-.581l-.06.001c-.776.001-1.344.422-1.344.798 0 .377.561.798 1.312.798 1.549 0 2.809 1.03 2.809 2.296 0 1.05-.848 1.941-2.059 2.212v.366c0 .414-.336.75-.75.75zM11 15.75c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM5.75 20.25c-.414 0-.75-.336-.75-.75s.336-.75.75-.75H17c.414 0 .75.336.75.75s-.336.75-.75.75H5.75z\" transform=\"translate(-1025 -3428) translate(1025 3428) translate(1)\"/>\n </g>\n </svg>`,\n logout: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14.634 21.607c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h4.32c.398 0 .72-.323.72-.72v-1.44c0-.398.323-.72.72-.72.398 0 .72.322.72.72v1.44c0 1.191-.968 2.16-2.16 2.16h-4.32zM20.394 7.207c-.397 0-.72-.323-.72-.72v-1.44c0-.398-.322-.72-.72-.72h-4.32c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h4.32c1.192 0 2.16.968 2.16 2.16v1.44c0 .396-.323.72-.72.72zM11.033 23.046c-.068 0-.137-.005-.205-.016L2.19 21.797c-.705-.101-1.236-.713-1.237-1.425V3.58c0-.676.478-1.268 1.139-1.41L10.71.043c.112-.024.216-.035.32-.035.676 0 1.27.478 1.412 1.136.02.1.031.201.031.303v20.16c0 .385-.15.747-.422 1.018-.272.272-.634.422-1.019.422zM2.416 3.573l-.023.008.001 16.79 8.642 1.234-.002-20.16-8.618 2.128zM20.395 15.846c-.192 0-.373-.075-.509-.211-.135-.137-.21-.317-.21-.51 0-.191.074-.373.21-.508l1.652-1.651h-6.184c-.397 0-.72-.323-.72-.72 0-.398.323-.72.72-.72h6.182l-1.652-1.651c-.136-.136-.21-.317-.21-.51 0-.191.074-.373.21-.508.137-.135.317-.211.51-.211.191 0 .373.075.508.211l2.881 2.88c.014.014.03.034.043.052.04.047.071.098.097.151.015.031.025.061.035.093.015.05.025.099.03.147.003.04.004.07.003.1-.003.06-.014.116-.032.178-.01.033-.02.06-.032.09-.025.055-.06.11-.102.16-.012.018-.027.034-.04.048l-2.88 2.88c-.136.134-.318.21-.51.21z\" transform=\"translate(-593 -3428) translate(593 3428)\"/>\n <path d=\"M8.514 12.607c-.595 0-1.08-.485-1.08-1.08 0-.55.408-1.008.953-1.073.042-.007.084-.011.127-.011.597.002 1.081.487 1.08 1.082 0 .595-.485 1.082-1.08 1.082z\" transform=\"translate(-593 -3428) translate(593 3428)\"/>\n </g>\n </svg>`,\n login: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.25 22.507C13.836 22.507 13.5 22.171 13.5 21.757C13.5 21.343 13.836 21.007 14.25 21.007H18.75C19.164 21.007 19.5 20.671 19.5 20.257V18.757C19.5 18.343 19.836 18.007 20.25 18.007C20.664 18.007 21 18.343 21 18.757V20.257C21 21.498 19.991 22.507 18.75 22.507H14.25Z\" />\n <path d=\"M20.25 7.50702C19.836 7.50702 19.5 7.17102 19.5 6.75702V5.25702C19.5 4.84302 19.164 4.50702 18.75 4.50702H14.25C13.836 4.50702 13.5 4.17102 13.5 3.75702C13.5 3.34302 13.836 3.00702 14.25 3.00702H18.75C19.991 3.00702 21 4.01602 21 5.25702V6.75702C21 7.17002 20.664 7.50702 20.25 7.50702Z\" />\n <path d=\"M10.499 24.006C10.428 24.006 10.356 24.001 10.285 23.99L1.288 22.705C0.553 22.601 0 21.963 0 21.22V3.728C0 3.025 0.498 2.408 1.186 2.261L10.163 0.0449956C10.28 0.0199956 10.388 0.00799561 10.495 0.00799561C11.2 0.00799561 11.819 0.505996 11.966 1.192C11.989 1.295 12 1.401 12 1.507V22.507C12 22.908 11.844 23.285 11.56 23.568C11.277 23.851 10.9 24.006 10.499 24.006ZM1.523 3.722L1.5 21.221C1.5 21.221 10.501 22.506 10.502 22.506L10.5 1.506L1.523 3.722Z\" />\n <path d=\"M18 16.506C17.8 16.506 17.611 16.428 17.47 16.286L14.47 13.286C14.457 13.273 14.444 13.258 14.432 13.242C14.377 13.179 14.336 13.113 14.307 13.042C14.301 13.027 14.296 13.012 14.292 12.997C14.269 12.929 14.257 12.859 14.253 12.786C14.252 12.761 14.253 12.737 14.255 12.714C14.26 12.642 14.272 12.58 14.292 12.521C14.301 12.493 14.31 12.467 14.323 12.44C14.358 12.361 14.407 12.288 14.47 12.226L17.47 9.22598C17.612 9.08398 17.8 9.00598 18 9.00598C18.2 9.00598 18.389 9.08398 18.53 9.22598C18.672 9.36698 18.75 9.55598 18.75 9.75598C18.75 9.95598 18.672 10.145 18.53 10.286L16.81 12.006H23.249C23.663 12.006 23.999 12.342 23.999 12.756C23.999 13.17 23.663 13.506 23.249 13.506H16.81L18.53 15.226C18.672 15.368 18.75 15.556 18.75 15.756C18.75 15.956 18.672 16.145 18.53 16.286C18.388 16.427 18.2 16.506 18 16.506Z\" />\n <path d=\"M7.875 13.132C7.255 13.132 6.75 12.627 6.75 12.007C6.75 11.434 7.175 10.957 7.742 10.89C7.786 10.882 7.83 10.878 7.875 10.878C8.177 10.879 8.46 10.997 8.672 11.209C8.884 11.422 9.001 11.705 9 12.005C9 12.626 8.495 13.132 7.875 13.132Z\" />\n </svg>`,\n more: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\" transform=\"translate(-641 -3428) translate(641 3428)\">\n <g fill-rule=\"nonzero\" transform=\"translate(3 9)\">\n <circle cx=\"2.438\" cy=\"3\" r=\"2.438\"/>\n <circle cx=\"9\" cy=\"3\" r=\"2.438\"/>\n <circle cx=\"15.563\" cy=\"3\" r=\"2.438\"/>\n </g>\n </g>\n </svg>`,\n notificationOn: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_26141_2697)\">\n <path d=\"M11.99 24.001C11.52 24.001 11.051 23.881 10.634 23.653C9.96901 23.29 9.48501 22.689 9.27201 21.962C9.15501 21.565 9.38301 21.148 9.78001 21.031C9.84901 21.011 9.92001 21.001 9.99101 21.001C10.321 21.001 10.617 21.222 10.711 21.539C10.812 21.882 11.04 22.165 11.353 22.337C11.55 22.444 11.77 22.501 11.991 22.501C12.118 22.501 12.246 22.482 12.37 22.446C12.808 22.317 13.147 21.978 13.276 21.54C13.369 21.223 13.665 21.001 13.996 21.001C14.067 21.001 14.137 21.011 14.206 21.031C14.603 21.148 14.832 21.565 14.715 21.962C14.442 22.893 13.723 23.612 12.792 23.885C12.53 23.962 12.26 24.001 11.99 24.001Z\" />\n <path d=\"M2.99099 19.501C2.70599 19.501 2.44199 19.336 2.31699 19.08C2.18999 18.82 2.22299 18.517 2.39999 18.289C2.40599 18.28 3.74099 16.35 3.74099 10.501C3.74099 6.20801 7.00699 2.66601 11.241 2.28501V0.751007C11.241 0.337007 11.577 0.00100708 11.991 0.00100708C12.405 0.00100708 12.741 0.337007 12.741 0.751007V2.28501C16.975 2.66601 20.241 6.20801 20.241 10.501C20.241 16.804 21.487 18.187 21.499 18.2C21.717 18.399 21.796 18.732 21.686 19.018C21.572 19.311 21.299 19.501 20.991 19.501H2.99099ZM19.701 18.001C19.219 16.769 18.74 14.531 18.74 10.501C18.74 6.77901 15.712 3.75101 11.99 3.75101C8.26799 3.75101 5.23999 6.77901 5.23999 10.501C5.23999 14.458 4.65999 16.778 4.19399 18.001H19.701Z\" />\n </g>\n <defs>\n <clipPath id=\"clip0_26141_2697\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n notificationOff: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.50101 24C1.30101 24 1.11201 23.922 0.971007 23.78C0.829007 23.638 0.751007 23.45 0.751007 23.25C0.751007 23.05 0.829007 22.861 0.971007 22.72L21.971 1.72C22.113 1.578 22.301 1.5 22.501 1.5C22.701 1.5 22.89 1.578 23.031 1.72C23.173 1.861 23.251 2.05 23.251 2.25C23.251 2.45 23.173 2.639 23.031 2.78L2.03101 23.78C1.89001 23.922 1.70101 24 1.50101 24Z\" />\n <path d=\"M11.999 24.001C11.529 24.001 11.06 23.881 10.643 23.653C9.978 23.29 9.494 22.689 9.281 21.962C9.165 21.565 9.393 21.147 9.79 21.031C9.858 21.01 9.929 21 10 21C10.33 21 10.626 21.221 10.719 21.538C10.82 21.881 11.048 22.164 11.361 22.335C11.558 22.443 11.779 22.5 12 22.5C12.127 22.5 12.255 22.481 12.379 22.445C12.818 22.316 13.156 21.978 13.285 21.539C13.379 21.221 13.675 21 14.005 21C14.076 21 14.146 21.01 14.214 21.03C14.612 21.147 14.84 21.564 14.724 21.961C14.451 22.892 13.732 23.611 12.801 23.884C12.539 23.962 12.269 24.001 11.999 24.001Z\" />\n <path d=\"M10.5 19.5C10.086 19.5 9.75 19.164 9.75 18.75C9.75 18.336 10.086 18 10.5 18H19.71C19.228 16.768 18.75 14.531 18.75 10.5C18.74 10.253 18.711 9.974 18.667 9.708C18.634 9.511 18.68 9.312 18.797 9.149C18.914 8.986 19.087 8.878 19.284 8.845C19.324 8.838 19.367 8.834 19.409 8.834C19.776 8.834 20.087 9.098 20.147 9.462C20.202 9.794 20.237 10.134 20.25 10.471C20.25 16.629 21.405 18.082 21.49 18.181C21.723 18.381 21.811 18.706 21.709 18.998C21.603 19.298 21.319 19.5 21 19.5H10.5Z\" />\n <path d=\"M4.5 16.5C4.086 16.5 3.75 16.164 3.75 15.75V10.5C3.751 8.843 4.244 7.243 5.174 5.872C6.412 4.049 8.285 2.816 10.45 2.402C10.712 2.352 10.981 2.314 11.252 2.289V0.75C11.252 0.336 11.588 0 12.002 0C12.416 0 12.752 0.336 12.752 0.75V2.288C14.136 2.413 15.472 2.891 16.634 3.68C16.976 3.912 17.065 4.379 16.833 4.722C16.694 4.928 16.462 5.051 16.212 5.051C16.062 5.051 15.916 5.006 15.791 4.922C14.665 4.158 13.36 3.755 12.015 3.755C11.588 3.755 11.156 3.796 10.732 3.877C8.96 4.215 7.427 5.223 6.415 6.715C5.654 7.836 5.251 9.145 5.25 10.501V15.751C5.25 16.164 4.914 16.5 4.5 16.5Z\" />\n </svg>`,\n phone: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M18.262 23.077c-1.145 0-2.267-.329-3.247-.952l-.027-.017c-5.178-3.5-9.576-7.9-13.075-13.078C.372 6.607.705 3.513 2.72 1.498l.743-.743c.47-.47 1.095-.728 1.761-.728.667 0 1.292.258 1.761.728l3.131 3.135c.97.971.97 2.55-.001 3.52-.41.41-.41 1.077 0 1.487l5.023 5.024c.186.184.45.294.73.294.28 0 .544-.11.742-.307.47-.47 1.095-.73 1.762-.73.666 0 1.29.26 1.761.729l3.13 3.13c.971.97.971 2.55 0 3.521l-.742.743c-1.146 1.146-2.659 1.776-4.259 1.776zm-2.478-2.17c.766.48 1.616.728 2.48.728 1.216 0 2.365-.48 3.237-1.352l.743-.743c.41-.41.41-1.077 0-1.487l-3.13-3.129c-.197-.198-.461-.306-.742-.306-.282 0-.546.11-.744.307-.469.47-1.095.729-1.76.729-.662 0-1.284-.256-1.751-.72l-5.02-5.02c-.97-.972-.97-2.552 0-3.522.408-.408.41-1.074.002-1.484l-.026-.026-3.107-3.11c-.197-.197-.461-.305-.742-.305-.281 0-.545.11-.744.307l-.743.742C2.204 4.05 1.946 6.4 3.11 8.23c3.39 5.016 7.654 9.284 12.674 12.679z\" transform=\"translate(-689 -3428) translate(689 3428)\"/>\n </svg>`,\n pin: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M10 15.003c-2.895 0-5.25-2.355-5.25-5.25s2.355-5.25 5.25-5.25 5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9c-2.068 0-3.75 1.682-3.75 3.75s1.682 3.75 3.75 3.75 3.75-1.682 3.75-3.75-1.682-3.75-3.75-3.75z\" transform=\"translate(-1169 -3428) translate(1169 3428) translate(2)\"/>\n <path d=\"M9.999 23.901c-.261 0-.518-.068-.743-.197-.875-.5-3.126-1.911-5.142-4.209C1.55 16.573.25 13.295.25 9.752.25 4.376 4.624.002 10 .002s9.75 4.374 9.75 9.75c0 3.544-1.3 6.822-3.865 9.744-2.017 2.299-4.268 3.708-5.142 4.208-.225.129-.483.197-.744.197zM10 1.503c-4.549 0-8.25 3.701-8.25 8.25 0 1.861.595 8.272 8.25 12.649 7.655-4.372 8.25-10.787 8.25-12.649 0-4.549-3.701-8.25-8.25-8.25z\" transform=\"translate(-1169 -3428) translate(1169 3428) translate(2)\"/>\n </g>\n </svg>`,\n power: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M10 11.996c-.414 0-.75-.336-.75-.75v-9.75c0-.414.336-.75.75-.75s.75.336.75.75v9.75c0 .413-.336.75-.75.75z\" transform=\"translate(-737 -3428) translate(737 3428) translate(2)\"/>\n <path d=\"M10.008 23.245c-4.128 0-7.826-2.613-9.2-6.501-1.792-5.069.873-10.65 5.942-12.442.081-.029.165-.044.25-.044.317 0 .601.201.707.5.067.189.056.392-.03.573-.086.182-.238.318-.427.385C2.961 7.232.706 11.955 2.222 16.244c1.163 3.29 4.292 5.501 7.786 5.5.933 0 1.855-.159 2.742-.472 4.289-1.517 6.544-6.24 5.028-10.528-.835-2.361-2.668-4.194-5.028-5.028-.189-.067-.341-.203-.427-.384-.086-.181-.097-.384-.03-.573.106-.299.39-.5.707-.5.086 0 .17.015.251.043 2.789.986 4.955 3.152 5.942 5.942 1.792 5.069-.874 10.65-5.942 12.442-1.048.371-2.138.558-3.243.559.001 0 0 0 0 0z\" transform=\"translate(-737 -3428) translate(737 3428) translate(2)\"/>\n </g>\n </svg>`,\n question: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(-785 -3428) translate(785 3428)\">\n <path d=\"M12 15c-.414 0-.75-.336-.75-.75v-1.006c-.001-.952.602-1.805 1.5-2.122.897-.317 1.5-1.17 1.5-2.121 0-.601-.234-1.166-.659-1.591-.424-.425-.989-.659-1.591-.659-.601 0-1.166.234-1.591.659-.425.424-.659.989-.659 1.59 0 .413-.336.75-.75.75s-.75-.337-.75-.75c0-1.002.391-1.943 1.099-2.651.708-.708 1.65-1.098 2.651-1.098 2.068 0 3.75 1.683 3.75 3.75 0 1.586-1.005 3.006-2.5 3.535-.299.106-.5.39-.5.707v1.007c0 .414-.336.75-.75.75z\"/>\n <circle cx=\"12\" cy=\"17.625\" r=\"1.125\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\"/>\n </g>\n </g>\n </svg>`,\n settings: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.156 23.988c-.676 0-1.323-.25-1.822-.704-.598-.544-.92-1.32-.883-2.128l.072-1.404c.034-.665-.479-1.234-1.144-1.269l-.062-.002c-.021 0-.041 0-.062.002l-1.401.071c-.047.002-.096.004-.144.004-.668 0-1.311-.247-1.809-.696-.537-.484-.854-1.148-.892-1.871-.043-.817.281-1.6.887-2.149l1.042-.94c.239-.216.38-.513.397-.836.016-.323-.094-.633-.31-.873-.027-.03-.056-.059-.087-.087L.896 10.16C.36 9.674.046 9.009.011 8.286c-.036-.722.213-1.415.699-1.951.512-.565 1.242-.889 2.002-.889.044 0 .089.001.133.003l1.402.071c.021.002.063.002.063.002.644 0 1.174-.503 1.208-1.144.002-.042.002-.085 0-.127l-.067-1.406C5.381 1.352 6.538.081 8.03.011l.129-.003c.76 0 1.489.323 2.001.886l.941 1.039c.217.241.513.382.835.399l.066.002c.301 0 .579-.107.805-.31.031-.028.06-.057.087-.088l.95-1.042c.483-.535 1.148-.85 1.871-.887l.136-.003c.673 0 1.319.248 1.818.699.607.548.931 1.331.889 2.148l-.071 1.4c-.033.665.481 1.233 1.146 1.267l.061.002.057-.001 1.4-.071.138-.003c.672 0 1.316.249 1.815.702.536.486.851 1.152.887 1.874.04.815-.284 1.596-.889 2.143l-1.042.94c-.239.216-.38.513-.396.836-.017.323.094.633.31.872.028.031.056.06.086.086l1.042.941c.537.485.853 1.15.89 1.873.037.723-.21 1.417-.695 1.953-.513.567-1.247.892-2.015.892l-.131-.003-1.402-.071-.066-.002c-.302 0-.58.108-.806.311-.24.216-.381.512-.397.835-.002.041-.002.083 0 .125l.071 1.4c.032.725-.219 1.418-.708 1.953-.489.535-1.156.847-1.878.879-.043.002-.088.003-.133.003-.75 0-1.474-.321-1.986-.88l-.944-1.044c-.229-.253-.556-.398-.899-.398-.3 0-.587.11-.809.311-.03.027-.06.056-.087.087l-.946 1.042c-.512.561-1.243.883-2.005.883zm-3.839-7.006c.046 0 .092.001.138.004 1.492.077 2.643 1.353 2.566 2.844l-.072 1.4c-.016.357.127.703.394.946.226.206.507.314.812.314l.059-.001c.322-.015.62-.155.837-.394l.944-1.04c.06-.067.125-.132.193-.194.499-.45 1.143-.698 1.815-.698.766 0 1.499.325 2.012.892l.941 1.041c.226.247.552.389.896.389l.049-.001c.664-.03 1.182-.596 1.152-1.262l-.071-1.395c-.005-.092-.005-.185 0-.278.037-.722.353-1.387.89-1.871.499-.45 1.141-.698 1.809-.698.048 0 .096.001.145.004l1.399.071.069.002c.336 0 .66-.145.889-.399.217-.24.327-.55.311-.872-.016-.323-.157-.619-.397-.836l-1.042-.94c-.068-.061-.133-.126-.195-.195-1.001-1.108-.914-2.825.195-3.827l1.042-.94c.27-.244.414-.592.396-.956-.016-.323-.156-.62-.396-.837-.223-.202-.51-.313-.809-.313l-.062.002-1.399.071c-.044.002-.089.003-.133.003-.046 0-.092-.001-.137-.004-1.491-.075-2.643-1.349-2.568-2.84l.071-1.401c.019-.365-.126-.714-.397-.958-.226-.205-.503-.312-.802-.312l-.068.002c-.324.016-.621.157-.837.397l-.948 1.04c-.059.066-.126.133-.196.196-.498.449-1.142.696-1.814.696l-.138-.003c-.723-.038-1.387-.354-1.871-.891L9.05 1.902c-.228-.25-.554-.394-.894-.394l-.057.001c-.665.031-1.181.599-1.15 1.265l.067 1.4c.005.091.005.187 0 .283-.076 1.438-1.264 2.565-2.705 2.565-.047 0-.094-.001-.141-.004l-1.399-.07-.057-.002c-.339 0-.665.145-.893.396-.217.239-.328.548-.312.87.016.322.156.619.395.836l1.041.945c.067.061.132.125.193.194 1.001 1.109.914 2.826-.195 3.827l-1.041.94c-.27.244-.414.594-.395.958.017.322.158.619.398.835.222.2.509.31.807.31.021 0 .043 0 .064-.002l1.401-.071.14-.002z\" transform=\"translate(-833 -3428) translate(833 3428)\"/>\n <path d=\"M12 17.25c-2.895 0-5.25-2.355-5.25-5.25S9.105 6.75 12 6.75s5.25 2.355 5.25 5.25-2.355 5.25-5.25 5.25zm0-9c-2.068 0-3.75 1.682-3.75 3.75s1.682 3.75 3.75 3.75 3.75-1.682 3.75-3.75S14.068 8.25 12 8.25z\" transform=\"translate(-833 -3428) translate(833 3428)\"/>\n </g>\n </svg>`,\n service: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"nonzero\" transform=\"translate(-1073 -3428) translate(1073 3428)\">\n <path d=\"M12.75 24c-1.241 0-2.25-1.009-2.25-2.25v-9c0-1.241 1.009-2.25 2.25-2.25h9c1.241 0 2.25 1.009 2.25 2.25v9c0 1.241-1.009 2.25-2.25 2.25h-9zm0-12c-.414 0-.75.336-.75.75v9c0 .414.336.75.75.75h9c.414 0 .75-.336.75-.75v-9c0-.414-.336-.75-.75-.75h-9z\"/>\n <path d=\"M14.25 15c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM14.25 18c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h6c.414 0 .75.336.75.75s-.336.75-.75.75h-6zM14.25 21c-.414 0-.75-.336-.75-.75s.336-.75.75-.75h2.25c.414 0 .75.336.75.75s-.336.75-.75.75h-2.25zM6 7.5c-2.068 0-3.75-1.682-3.75-3.75S3.932 0 6 0s3.75 1.682 3.75 3.75S8.068 7.5 6 7.5zm0-6c-1.241 0-2.25 1.009-2.25 2.25S4.759 6 6 6s2.25-1.009 2.25-2.25S7.241 1.5 6 1.5zM3.75 24c-.387 0-.708-.29-.746-.675L2.321 16.5H.75c-.414 0-.75-.336-.75-.75V13.5c0-1.473.54-2.891 1.52-3.99 1.066-1.197 2.534-1.907 4.134-2 .119-.007.237-.01.355-.01 1.467 0 2.882.54 3.982 1.52.309.275.336.75.061 1.059-.142.16-.346.251-.56.251-.184 0-.361-.068-.499-.19C8.168 9.405 7.106 9 6.003 9c-.087 0-.175.003-.263.008-1.2.069-2.301.602-3.1 1.499-.735.825-1.14 1.888-1.14 2.993V15H3c.387 0 .708.29.746.675l.683 6.825h3.142l.191-1.91c.038-.385.358-.676.743-.676.027 0 .054.001.082.004.408.041.709.409.668.82l-.258 2.585c-.039.387-.36.677-.747.677h-4.5z\"/>\n </g>\n </svg>`,\n sort: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21.5005C11.6684 21.5009 11.3526 21.3585 11.1335 21.1096L6.21658 15.5207C5.89336 15.1355 5.93676 14.5627 6.31433 14.2306C6.6919 13.8985 7.26552 13.9286 7.6063 14.2983L11.9058 19.1857C11.9296 19.2128 11.9639 19.2284 12 19.2284C12.0361 19.2284 12.0704 19.2128 12.0942 19.1857L16.3937 14.2983C16.7345 13.9286 17.3081 13.8985 17.6857 14.2306C18.0632 14.5627 18.1066 15.1355 17.7834 15.5207L12.868 21.1076C12.6485 21.3571 12.3323 21.5002 12 21.5005Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.5002C12.3316 2.49979 12.6474 2.64223 12.8665 2.89111L17.7834 8.48008C18.1066 8.86527 18.0632 9.43804 17.6857 9.77013C17.3081 10.1022 16.7345 10.0722 16.3937 9.70242L12.0942 4.81507C12.0704 4.78793 12.0361 4.77237 12 4.77237C11.9639 4.77237 11.9296 4.78793 11.9058 4.81507L7.6063 9.70242C7.26552 10.0722 6.6919 10.1022 6.31433 9.77013C5.93676 9.43804 5.89336 8.86527 6.21658 8.48008L11.132 2.89311C11.3515 2.64363 11.6677 2.50052 12 2.5002Z\" />\n </svg>`,\n ascending: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.24947C12.3316 2.24906 12.6474 2.39149 12.8665 2.64038L17.7834 8.22935C18.1066 8.61454 18.0632 9.18731 17.6857 9.5194C17.3081 9.85148 16.7345 9.82142 16.3937 9.45168L12.0942 4.56434C12.0704 4.5372 12.0361 4.52164 12 4.52164C11.9639 4.52164 11.9296 4.5372 11.9058 4.56434L7.6063 9.45168C7.26552 9.82142 6.6919 9.85148 6.31433 9.5194C5.93676 9.18731 5.89336 8.61454 6.21658 8.22935L11.132 2.64238C11.3515 2.3929 11.6677 2.24978 12 2.24947Z\" />\n </svg>\n `,\n descending: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21.7505C11.6684 21.7509 11.3526 21.6085 11.1335 21.3596L6.21658 15.7707C5.89336 15.3855 5.93676 14.8127 6.31433 14.4806C6.6919 14.1485 7.26552 14.1786 7.6063 14.5483L11.9058 19.4357C11.9296 19.4628 11.9639 19.4784 12 19.4784C12.0361 19.4784 12.0704 19.4628 12.0942 19.4357L16.3937 14.5483C16.7345 14.1786 17.3081 14.1485 17.6857 14.4806C18.0632 14.8127 18.1066 15.3855 17.7834 15.7707L12.868 21.3576C12.6485 21.6071 12.3323 21.7502 12 21.7505Z\" />\n </svg>\n `,\n switchUser: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.5 22.5C13.086 22.5 12.75 22.164 12.75 21.75C12.75 21.336 13.086 21 13.5 21C18.463 21 22.5 16.963 22.5 12C22.5 7.037 18.463 3 13.5 3C8.954 3 5.139 6.447 4.575 10.865L6.22 9.22C6.361 9.078 6.55 9 6.75 9C6.95 9 7.139 9.078 7.28 9.22C7.422 9.361 7.5 9.55 7.5 9.75C7.5 9.95 7.422 10.139 7.28 10.28L4.28 13.28C4.21 13.35 4.127 13.405 4.034 13.444C4.026 13.447 4.017 13.451 4.007 13.454C3.923 13.485 3.837 13.5 3.75 13.5C3.662 13.5 3.575 13.484 3.49 13.453C3.482 13.45 3.475 13.448 3.468 13.445C3.372 13.406 3.289 13.351 3.219 13.28L0.22 10.28C0.078 10.139 0 9.95 0 9.75C0 9.55 0.078 9.361 0.22 9.22C0.361 9.078 0.55 9 0.75 9C0.95 9 1.139 9.078 1.28 9.22L3.051 10.991C3.564 5.685 8.084 1.5 13.5 1.5C19.29 1.5 24 6.21 24 12C24 17.79 19.29 22.5 13.5 22.5Z\"/>\n <path d=\"M8.52001 18C8.33801 18 8.16201 17.933 8.02501 17.813C7.71501 17.54 7.68401 17.065 7.95701 16.754C8.16401 16.519 8.38601 16.297 8.61901 16.092C9.96801 14.904 11.7 14.249 13.494 14.249C13.651 14.249 13.809 14.254 13.967 14.264C15.936 14.389 17.739 15.273 19.043 16.754C19.316 17.064 19.286 17.539 18.976 17.813C18.839 17.934 18.663 18 18.48 18C18.264 18 18.059 17.907 17.917 17.746C16.878 16.566 15.441 15.861 13.872 15.762C13.744 15.754 13.616 15.75 13.489 15.75C12.063 15.75 10.685 16.272 9.60901 17.219C9.42401 17.382 9.24601 17.559 9.08201 17.746C8.94101 17.907 8.73501 18 8.52001 18Z\"/>\n <path d=\"M13.5 15C11.019 15 9 12.981 9 10.5C9 8.019 11.019 6 13.5 6C15.981 6 18 8.019 18 10.5C18 12.981 15.981 15 13.5 15ZM13.5 7.5C11.846 7.5 10.5 8.846 10.5 10.5C10.5 12.154 11.846 13.5 13.5 13.5C15.154 13.5 16.5 12.154 16.5 10.5C16.5 8.846 15.154 7.5 13.5 7.5Z\"/>\n </svg>`,\n subtractCircle: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 12.75C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H7.5Z\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n </svg>`,\n success: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"49\" height=\"48\" viewBox=\"0 0 49 48\">\n <g fill-rule=\"evenodd\">\n <path d=\"M22.844 30.98a2.61 2.61 0 01-1.856-.768l-5.072-5.073a1.039 1.039 0 111.47-1.466l5.071 5.073a.551.551 0 00.833-.062l8.453-11.269a1.04 1.04 0 011.453-.207 1.037 1.037 0 01.208 1.453L24.952 29.93a2.65 2.65 0 01-2.108 1.05z\" />\n <path d=\"M24.606 48a4.332 4.332 0 01-3.377-1.624l-3.084-3.841a2.319 2.319 0 00-2.071-.858l-4.902.534a4.266 4.266 0 01-3.181-.93 4.303 4.303 0 01-1.594-2.905 4.344 4.344 0 010-.94l.534-4.903a2.318 2.318 0 00-.858-2.068l-3.84-3.084a4.335 4.335 0 010-6.759l3.842-3.087c.624-.5.946-1.274.858-2.07l-.534-4.9a4.304 4.304 0 01.93-3.184 4.305 4.305 0 013.376-1.616c.156 0 .312.008.465.024l4.906.534a2.32 2.32 0 002.07-.856l3.085-3.845A4.311 4.311 0 0124.614 0a4.337 4.337 0 013.377 1.624l3.088 3.843a2.308 2.308 0 002.069.856l4.904-.534a4.326 4.326 0 014.771 3.851c.032.31.032.62 0 .926l-.534 4.903a2.324 2.324 0 00.858 2.07l3.843 3.088a4.3 4.3 0 011.596 2.905 4.308 4.308 0 01-.926 3.184c-.196.244-.422.47-.67.67l-3.843 3.089a2.314 2.314 0 00-.858 2.068l.534 4.903a4.332 4.332 0 01-4.774 4.773l-4.903-.534a2.314 2.314 0 00-2.069.858l-3.086 3.84A4.329 4.329 0 0124.606 48zm-8.274-8.337c1.315 0 2.545.59 3.373 1.618l3.085 3.843a2.305 2.305 0 001.818.874c.714 0 1.378-.318 1.822-.874l3.085-3.839a4.304 4.304 0 013.843-1.594l4.904.534a2.122 2.122 0 00.505 0 2.332 2.332 0 002.064-2.57l-.534-4.902a4.312 4.312 0 011.594-3.844l3.841-3.087a2.315 2.315 0 00.862-2.076 2.32 2.32 0 00-.858-1.564l-3.843-3.087a4.31 4.31 0 01-1.594-3.846l.534-4.9a2.327 2.327 0 00-2.568-2.57l-4.9.532a4.31 4.31 0 01-3.844-1.59l-3.09-3.845a2.305 2.305 0 00-1.817-.874c-.714 0-1.378.318-1.822.874l-3.087 3.843a4.311 4.311 0 01-3.847 1.592l-4.903-.534a2.542 2.542 0 00-.498.002 2.307 2.307 0 00-1.568.856 2.305 2.305 0 00-.502 1.713l.534 4.901a4.315 4.315 0 01-1.594 3.846l-3.843 3.087a2.323 2.323 0 00-.86 2.076c.068.62.374 1.176.858 1.564l3.843 3.085a4.304 4.304 0 011.594 3.844l-.534 4.903a2.31 2.31 0 00.858 2.069 2.302 2.302 0 001.714.5l4.903-.534c.158-.018.314-.026.472-.026z\" />\n </g>\n </svg>`,\n upload: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <path d=\"M12 18c-.414 0-.75-.336-.75-.75V7.811l-2.47 2.47c-.142.142-.33.22-.53.22s-.389-.078-.53-.22c-.142-.142-.22-.331-.22-.531s.078-.389.22-.53l3.749-3.749c.07-.07.152-.125.245-.163l.025-.009c.086-.033.173-.049.261-.049.089 0 .177.016.261.048l.02.007c.097.04.179.095.25.166L16.28 9.22c.142.141.22.33.22.53s-.078.389-.22.53c-.142.141-.33.22-.53.22s-.389-.078-.53-.22l-2.47-2.47v9.439c0 .415-.336.751-.75.751z\" transform=\"translate(-881 -3428) translate(881 3428)\"/>\n <path d=\"M12 24C5.383 24 0 18.617 0 12S5.383 0 12 0s12 5.383 12 12-5.383 12-12 12zm0-22.5C6.21 1.5 1.5 6.21 1.5 12S6.21 22.5 12 22.5 22.5 17.79 22.5 12 17.79 1.5 12 1.5z\" transform=\"translate(-881 -3428) translate(881 3428)\"/>\n </g>\n </svg>`,\n viewOff: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.78324 20.5C2.58024 20.5 2.38324 20.416 2.24224 20.27C2.10324 20.125 2.02924 19.936 2.03309 19.735C2.03724 19.535 2.11924 19.348 2.26424 19.209L21.0142 1.209C21.1542 1.074 21.3392 1 21.5332 1C21.7362 1 21.9332 1.084 22.0742 1.231C22.2132 1.375 22.2872 1.565 22.2834 1.766C22.2792 1.966 22.1972 2.153 22.0532 2.292L3.30324 20.292C3.16224 20.426 2.97724 20.5 2.78324 20.5Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.9882 19L11.8782 19.001C10.8302 19.001 9.77523 18.838 8.74123 18.518C8.34623 18.395 8.12523 17.974 8.24723 17.58C8.34523 17.264 8.63323 17.052 8.96423 17.052C9.03923 17.052 9.11423 17.063 9.18623 17.086C10.0742 17.362 10.9862 17.502 11.8952 17.502L12.1442 17.503C15.9972 17.503 19.9002 14.717 22.2692 12.11C22.5812 11.764 22.5812 11.239 22.2672 10.89C21.3762 9.91201 20.3802 9.01901 19.3082 8.23701C19.1462 8.11901 19.0402 7.94501 19.0092 7.74701C18.9782 7.54901 19.0262 7.35101 19.1442 7.18901C19.2852 6.99601 19.5112 6.88101 19.7502 6.88101C19.9092 6.88101 20.0622 6.93101 20.1922 7.02501C21.3452 7.86601 22.4172 8.82801 23.3792 9.88301C24.2112 10.806 24.2112 12.195 23.3822 13.116C20.7962 15.962 16.4872 19.002 12.1452 19.002L11.9882 19Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.77824 15.761C3.61224 15.761 3.44924 15.705 3.31824 15.603C2.35524 14.855 1.44924 14.019 0.625239 13.117C-0.206761 12.193 -0.207761 10.804 0.622239 9.88299C3.20824 7.03799 7.51824 3.99899 11.8582 3.99899L12.0952 3.99999C12.9412 3.99999 13.7822 4.10199 14.5952 4.30499C14.9962 4.40499 15.2412 4.81199 15.1422 5.21399C15.0592 5.54899 14.7592 5.78299 14.4142 5.78299C14.3532 5.78299 14.2922 5.77499 14.2322 5.76099C13.5382 5.58799 12.8222 5.50099 12.1032 5.50099H11.8742C8.01124 5.50099 4.10324 8.28599 1.73424 10.892C1.42224 11.238 1.42224 11.763 1.73624 12.112C2.49924 12.947 3.34224 13.725 4.23924 14.422C4.39724 14.545 4.49824 14.722 4.52324 14.921C4.54824 15.12 4.49424 15.316 4.37124 15.474C4.22824 15.655 4.01224 15.761 3.77824 15.761Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.25024 12.25C7.83724 12.25 7.50024 11.914 7.50024 11.5C7.50024 10.3 7.96824 9.171 8.81824 8.32C9.66824 7.469 10.7972 7 11.9972 7C12.2042 7 12.3712 7.167 12.3722 7.374L12.3742 8.124C12.3742 8.224 12.3352 8.319 12.2652 8.39C12.1952 8.461 12.1002 8.5 12.0002 8.5C11.1992 8.5 10.4462 8.813 9.87924 9.38C9.31224 9.947 9.00024 10.7 9.00024 11.5C9.00024 11.7 8.92224 11.888 8.78124 12.03C8.63924 12.172 8.45024 12.25 8.25024 12.25Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.0012 16C11.7942 16 11.6262 15.833 11.6262 15.625L11.6252 14.875C11.6252 14.776 11.6642 14.68 11.7352 14.61C11.8052 14.539 11.9012 14.5 12.0002 14.5C12.8022 14.5 13.5552 14.188 14.1222 13.621C14.6882 13.054 15.0002 12.3 15.0002 11.499C15.0002 11.085 15.3362 10.749 15.7502 10.749C16.1642 10.749 16.5002 11.085 16.5002 11.499C16.5002 12.701 16.0332 13.831 15.1832 14.681C14.3332 15.531 13.2032 16 12.0012 16Z\"/>\n </svg>`,\n viewOn: () => `\n <svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.843 18.999C7.50999 18.999 3.20699 15.959 0.623989 13.115C-0.207011 12.192 -0.207012 10.803 0.621988 9.883C3.20599 7.038 7.51399 4 11.856 4C11.907 4 11.956 4 12.007 4.001C12.049 4 12.104 4 12.16 4C16.488 4 20.794 7.038 23.379 9.881C24.21 10.804 24.211 12.193 23.381 13.114C20.795 15.96 16.484 19 12.136 19L11.987 18.999H11.843ZM11.854 5.499C8.00299 5.499 4.10099 8.283 1.73399 10.889C1.42199 11.235 1.42199 11.76 1.73599 12.109C4.10199 14.714 8.00299 17.499 11.856 17.499L11.987 17.498L12.123 17.499C15.99 17.499 19.899 14.714 22.268 12.107C22.58 11.761 22.58 11.236 22.266 10.887C19.898 8.283 15.994 5.5 12.143 5.5C12.143 5.5 11.989 5.501 11.987 5.501L11.854 5.499Z\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.999 15.998C10.797 15.998 9.66699 15.529 8.81699 14.679C7.96699 13.829 7.49899 12.699 7.49999 11.497C7.49999 9.01599 9.51899 6.99799 12 6.99799C13.202 6.99799 14.332 7.46599 15.182 8.31499C16.032 9.16499 16.5 10.294 16.5 11.496C16.5 12.702 16.031 13.831 15.181 14.681C14.331 15.53 13.202 15.998 12 15.998H11.999ZM12.001 8.49799C10.347 8.49799 9.00099 9.84299 9.00099 11.497C9.00099 12.298 9.31299 13.052 9.87899 13.618C10.446 14.185 11.199 14.497 12 14.497C12.802 14.497 13.555 14.185 14.121 13.619C14.687 13.053 15 12.299 15 11.498C15 10.694 14.688 9.94099 14.121 9.37499C13.555 8.80999 12.802 8.49799 12.001 8.49799Z\"/>\n </svg>`,\n warning: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path d=\"M23.759 20.51L13.874 1.633C13.509.937 12.787.5 12 .5c-.787 0-1.509.437-1.874 1.133L.241 20.51c-.343.656-.319 1.443.065 2.076.383.634 1.07 1.02 1.81 1.02h19.769c.74 0 1.426-.386 1.81-1.02.383-.633.407-1.42.064-2.076zM10.942 8.267c0-.584.474-1.057 1.058-1.057.584 0 1.058.473 1.058 1.057v6.345c0 .584-.474 1.058-1.058 1.058-.584 0-1.058-.474-1.058-1.058V8.267zm1.11 12.172h-.029c-.866-.003-1.576-.688-1.61-1.554-.015-.42.139-.826.427-1.13.288-.305.686-.48 1.105-.488h.03c.866 0 1.577.685 1.611 1.551.017.42-.137.828-.425 1.133-.289.306-.688.481-1.108.488z\" transform=\"translate(-161 -3524) translate(161 3524)\"/>\n </g>\n </g>\n </svg>`,\n hamburgerClose: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 23.999C5.383 23.999 0 18.616 0 11.999C0 5.38199 5.383 -0.00100708 12 -0.00100708C18.617 -0.00100708 24 5.38199 24 11.999C24 18.616 18.617 23.999 12 23.999ZM12 1.49899C6.21 1.49899 1.5 6.20899 1.5 11.999C1.5 17.789 6.21 22.499 12 22.499C17.79 22.499 22.5 17.789 22.5 11.999C22.5 6.20899 17.79 1.49899 12 1.49899Z\"/>\n <path d=\"M16.5 17.249C16.3 17.249 16.111 17.171 15.97 17.029L12 13.06L8.03 17.03C7.888 17.172 7.7 17.25 7.5 17.25C7.3 17.25 7.111 17.172 6.97 17.03C6.678 16.738 6.678 16.262 6.97 15.969L10.94 11.999L6.97 8.02899C6.828 7.88799 6.75 7.69899 6.75 7.49899C6.75 7.29899 6.828 7.10999 6.97 6.96899C7.111 6.82699 7.3 6.74899 7.5 6.74899C7.7 6.74899 7.889 6.82699 8.03 6.96899L12 10.939L15.97 6.96899C16.112 6.82699 16.3 6.74899 16.5 6.74899C16.7 6.74899 16.889 6.82699 17.03 6.96899C17.172 7.10999 17.25 7.29899 17.25 7.49899C17.25 7.69899 17.172 7.88799 17.03 8.02899L13.06 11.999L17.03 15.969C17.322 16.261 17.322 16.737 17.03 17.03C16.889 17.171 16.7 17.249 16.5 17.249Z\"/>\n </svg>`,\n hamburgerOpen: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 24C5.383 24 0 18.617 0 12C0 5.383 5.383 0 12 0C18.617 0 24 5.383 24 12C24 18.617 18.617 24 12 24ZM12 1.5C6.21 1.5 1.5 6.21 1.5 12C1.5 17.79 6.21 22.5 12 22.5C17.79 22.5 22.5 17.79 22.5 12C22.5 6.21 17.79 1.5 12 1.5Z\"/>\n <path d=\"M7.5 9C7.086 9 6.75 8.664 6.75 8.25C6.75 7.836 7.086 7.5 7.5 7.5H16.5C16.914 7.5 17.25 7.836 17.25 8.25C17.25 8.664 16.914 9 16.5 9H7.5Z\"/>\n <path d=\"M7.5 12.75C7.086 12.75 6.75 12.414 6.75 12C6.75 11.586 7.086 11.25 7.5 11.25H16.5C16.914 11.25 17.25 11.586 17.25 12C17.25 12.414 16.914 12.75 16.5 12.75H7.5Z\"/>\n <path d=\"M7.5 16.5C7.086 16.5 6.75 16.164 6.75 15.75C6.75 15.336 7.086 15 7.5 15H16.5C16.914 15 17.25 15.336 17.25 15.75C17.25 16.164 16.914 16.5 16.5 16.5H7.5Z\"/>\n </svg>`,\n dial: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.6501 2.80019C2.28528 2.80019 2.80019 2.28528 2.80019 1.6501C2.80019 1.01492 2.28528 0.5 1.6501 0.5C1.01492 0.5 0.5 1.01492 0.5 1.6501C0.5 2.28528 1.01492 2.80019 1.6501 2.80019Z\"/>\n <path d=\"M7.01722 2.80022C6.38339 2.80022 5.86713 2.28396 5.86713 1.65013C5.86713 1.02856 6.35477 0.524566 6.97735 0.503098C6.98144 0.502075 7.00087 0.502075 7.01927 0.502075C7.02745 0.502075 7.05812 0.503098 7.06629 0.50412C7.67763 0.522521 8.16732 1.02652 8.16732 1.65013C8.16732 2.28396 7.65105 2.80022 7.01722 2.80022Z\" />\n <path d=\"M12.3843 2.80019C11.7505 2.80019 11.2342 2.28393 11.2342 1.6501C11.2342 1.01627 11.7505 0.5 12.3843 0.5C12.3986 0.5 12.417 0.501022 12.4324 0.503067C12.4426 0.504089 12.4497 0.504089 12.4569 0.505112C13.0529 0.532714 13.5344 1.03671 13.5344 1.6501C13.5344 2.28393 13.0181 2.80019 12.3843 2.80019Z\" />\n <path d=\"M1.6501 8.16732C1.01627 8.16732 0.5 7.65105 0.5 7.01722C0.5 6.40486 0.97844 5.90291 1.5908 5.87122C1.5908 5.87122 1.61125 5.86917 1.62147 5.86815C1.62147 5.86815 1.60716 5.86917 1.59489 5.87019C1.61227 5.86815 1.63374 5.86713 1.6501 5.86713C2.28393 5.86713 2.80019 6.38339 2.80019 7.01722C2.80019 7.65105 2.28393 8.16732 1.6501 8.16732Z\" />\n <path d=\"M7.01722 8.16735C6.38339 8.16735 5.86713 7.65108 5.86713 7.01725C5.86713 6.39569 6.35477 5.89169 6.97735 5.87022C6.98144 5.8692 7.00087 5.8692 7.01927 5.8692C7.02745 5.8692 7.05812 5.87022 7.06629 5.87125C7.67763 5.88965 8.16732 6.39365 8.16732 7.01725C8.16732 7.65108 7.65105 8.16735 7.01722 8.16735Z\" />\n <path d=\"M1.6501 13.5344C1.01627 13.5344 0.5 13.0182 0.5 12.3843C0.5 11.772 0.97844 11.27 1.5908 11.2383C1.5908 11.2383 1.61125 11.2363 1.62147 11.2353C1.62147 11.2353 1.60716 11.2363 1.59489 11.2373C1.61227 11.2353 1.63374 11.2332 1.6501 11.2332C2.28393 11.2342 2.80019 11.7505 2.80019 12.3843C2.80019 13.0182 2.28393 13.5344 1.6501 13.5344Z\" />\n <path d=\"M7.01722 13.5344C7.6524 13.5344 8.16732 13.0195 8.16732 12.3843C8.16732 11.7492 7.6524 11.2343 7.01722 11.2343C6.38204 11.2343 5.86713 11.7492 5.86713 12.3843C5.86713 13.0195 6.38204 13.5344 7.01722 13.5344Z\" />\n <path d=\"M22.7352 23.5019C22.312 23.5019 21.9685 23.1584 21.9685 22.7352V21.0453C21.9777 19.0774 20.4473 17.4632 18.4844 17.3671L15.0679 17.3681C14.6446 17.3681 14.3011 17.0246 14.3011 16.6014V8.16733C14.3011 7.32188 13.6131 6.63386 12.7677 6.63386C11.9222 6.63386 11.2342 7.32188 11.2342 8.16733V19.6683C11.2342 20.0087 11.0155 20.3031 10.6893 20.4023C10.6178 20.4238 10.5431 20.435 10.4675 20.435C10.2109 20.435 9.9727 20.3072 9.82957 20.0936L7.98942 17.3333C7.7042 16.9081 7.22167 16.6535 6.70029 16.6535C6.43653 16.6535 6.17585 16.722 5.94685 16.8508C5.587 17.0532 5.32733 17.3845 5.21692 17.7821C5.10549 18.1798 5.1566 18.5979 5.36004 18.9578L7.30038 22.3549C7.50996 22.7219 7.38217 23.1912 7.01516 23.4007C6.89862 23.4672 6.76674 23.5019 6.63384 23.5019C6.35884 23.5019 6.10428 23.3537 5.96729 23.1155L4.02491 19.7143C3.61905 18.9946 3.51785 18.1624 3.73866 17.3701C3.95948 16.5779 4.47575 15.9185 5.19239 15.5147C5.64936 15.257 6.16869 15.1211 6.69518 15.1211C7.73078 15.1211 8.6897 15.6292 9.26219 16.4807L9.69872 17.136V8.16733C9.69872 6.47643 11.0747 5.1004 12.7656 5.1004C14.4565 5.1004 15.8326 6.47643 15.8326 8.16733V15.8346H18.5202C21.3336 15.9706 23.5132 18.2606 23.4999 21.0484V22.7352C23.5019 23.1584 23.1584 23.5019 22.7352 23.5019Z\" />\n </svg>`,\n undo: () => `\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.56 22.12C11.1957 22.113 10.9 21.8173 10.9 21.46C10.9 21.0966 11.1966 20.8 11.56 20.8C11.5609 20.8 11.5653 20.8 11.5662 20.8C16.6578 20.8 20.8026 16.657 20.8062 11.5653C20.8088 6.47008 16.6666 2.32264 11.5714 2.32C7.96872 2.32 4.7444 4.37656 3.21848 7.6H8.26C8.62432 7.6 8.92 7.89568 8.92 8.26C8.92 8.62432 8.62432 8.92 8.26 8.92H1.66C1.29656 8.92 1 8.62432 1 8.26V1.66C1 1.29568 1.29568 1 1.66 1C2.02432 1 2.32 1.29568 2.32 1.66V6.46568C4.15744 3.14632 7.70912 1 11.5662 1C17.3953 1.00352 22.1297 5.7432 22.1262 11.5662C22.1226 17.3856 17.3856 22.12 11.5662 22.12C11.5644 22.12 11.5618 22.12 11.56 22.12Z\" />\n </svg>`,\n /** REMOVE BELOW ICONS... */\n test: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M12,23.5 C11.724,23.5 11.5,23.276 11.5,23 L11.5,12.5 L1,12.5 C0.724,12.5 0.5,12.276 0.5,12 C0.5,11.724 0.724,11.5 1,11.5 L11.5,11.5 L11.5,1 C11.5,0.724 11.724,0.5 12,0.5 C12.276,0.5 12.5,0.724 12.5,1 L12.5,11.5 L23,11.5 C23.276,11.5 23.5,11.724 23.5,12 C23.5,12.276 23.276,12.5 23,12.5 L12.5,12.5 L12.5,23 C12.5,23.276 12.276,23.5 12,23.5 Z\" />\n </svg>`,\n down: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M13 8c.001.442-.189.863-.52 1.155l-7.452 6.556c-.514.431-1.278.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.516-5.732c.036-.032.057-.078.057-.126s-.02-.094-.057-.126L3.398 2.142c-.493-.455-.533-1.22-.09-1.723.442-.503 1.206-.561 1.72-.13l7.449 6.554c.332.292.523.714.524 1.157z\" transform=\"translate(-359 -1642) translate(64 1622) translate(295 20) rotate(90 8 8)\"/>\n </svg>`,\n left: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" d=\"M17.0007096,12 C17.0012557,12.442161 16.8113416,12.8631373 16.4794988,13.1553479 L9.02753796,19.7112292 C8.51395208,20.1421822 7.75025823,20.0843144 7.30747318,19.5808938 C6.86468814,19.0774731 6.90477276,18.3126397 7.39775563,17.8582623 L13.9142121,12.1256249 C13.9503992,12.0939052 13.9711504,12.0481212 13.9711504,12 C13.9711504,11.9518788 13.9503992,11.9060948 13.9142121,11.8743751 L7.39775563,6.14173773 C6.90477276,5.68736032 6.86468814,4.92252687 7.30747318,4.41910624 C7.75025823,3.9156856 8.51395208,3.85781778 9.02753796,4.28877077 L16.476826,10.8426474 C16.809472,11.1353584 17.0002877,11.5569053 17.0007096,12 Z\" transform=\"rotate(180 12 12)\"/>\n </svg>`,\n right: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M13 8c.001.442-.189.863-.52 1.155l-7.452 6.556c-.514.431-1.278.373-1.72-.13-.443-.504-.403-1.268.09-1.723l6.516-5.732c.036-.032.057-.078.057-.126s-.02-.094-.057-.126L3.398 2.142c-.493-.455-.533-1.22-.09-1.723.442-.503 1.206-.561 1.72-.13l7.449 6.554c.332.292.523.714.524 1.157z\" />\n </svg>`,\n filter: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M2.25098 24C1.00998 24 0.000976562 22.991 0.000976562 21.75V2.25C0.000976563 1.009 1.00998 0 2.25098 0H21.751C22.992 0 24.001 1.009 24.001 2.25V21.75C24.001 22.991 22.992 24 21.751 24H2.25098ZM2.25098 1.5C1.83698 1.5 1.50098 1.836 1.50098 2.25V21.75C1.50098 22.164 1.83698 22.5 2.25098 22.5H21.751C22.165 22.5 22.501 22.164 22.501 21.75V2.25C22.501 1.836 22.165 1.5 21.751 1.5H2.25098Z\" />\n <path d=\"M10.501 18.75C9.13098 18.75 7.93698 17.803 7.59898 16.5H5.25098C4.83698 16.5 4.50098 16.164 4.50098 15.75C4.50098 15.336 4.83698 15 5.25098 15H7.59998C7.93798 13.697 9.13098 12.75 10.5 12.75C11.871 12.75 13.065 13.697 13.403 15H18.751C19.165 15 19.501 15.336 19.501 15.75C19.501 16.164 19.165 16.5 18.751 16.5H13.403C13.065 17.803 11.871 18.75 10.501 18.75ZM10.5 14.25C9.67298 14.25 9.00098 14.923 9.00098 15.75C9.00098 16.577 9.67398 17.25 10.501 17.25C11.328 17.25 12.001 16.577 12.001 15.75C12.001 14.923 11.328 14.25 10.5 14.25Z\" />\n <path d=\"M16.5 11.25C15.131 11.249 13.938 10.302 13.6 9H5.25098C4.83698 9 4.50098 8.664 4.50098 8.25C4.50098 7.836 4.83698 7.5 5.25098 7.5H13.599C13.937 6.197 15.131 5.25 16.501 5.25C18.155 5.25 19.501 6.596 19.501 8.25C19.5 9.904 18.154 11.25 16.5 11.25ZM16.501 6.75C15.674 6.75 15.001 7.423 15.001 8.25C15.001 9.077 15.674 9.75 16.501 9.75C17.328 9.75 18.001 9.077 18.001 8.25C18.001 7.423 17.328 6.75 16.501 6.75Z\" />\n </svg>`,\n chain: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"26\" width=\"26\" viewBox=\"-0.5 -0.5 16 16\">\n <path d=\"m5.9814375 11.652750000000001 -1.3096875 1.2726875000000002c-0.3434375 0.3434375 -0.80925 0.5363125 -1.2949374999999999 0.5363125s-0.9514374999999999 -0.192875 -1.294875 -0.5363125c-0.3434375 -0.34349999999999997 -0.5363749999999999 -0.8091875 -0.5363749999999999 -1.294875 0 -0.48575 0.19293749999999998 -0.9515625 0.5363749999999999 -1.2949374999999999l3.359375 -3.3668125c0.32968749999999997 -0.3308125 0.7739375 -0.5221875 1.240875 -0.5345624999999999 0.466875 -0.0124375 0.9206875000000001 0.155125 1.2675 0.468l0.0888125 0.07400000000000001c0.1403125 0.1373125 0.3295 0.2133125 0.5258125 0.21125000000000002 0.196375 -0.0020625 0.38387499999999997 -0.0820625 0.52125 -0.222375 0.137375 -0.140375 0.21337499999999998 -0.3295 0.21131250000000001 -0.5258125 -0.0020625 -0.196375 -0.0820625 -0.38387499999999997 -0.2224375 -0.52125 -0.041749999999999995 -0.054000000000000006 -0.0861875 -0.1058125 -0.13318750000000001 -0.15537499999999999 -0.631625 -0.5495625 -1.4485000000000001 -0.8384999999999999 -2.28525 -0.8082499999999999s-1.6306875 0.377375 -2.2210625 0.9710625l-3.4037499999999996 3.3668125C0.4528125 9.9218125 0.14 10.7504375 0.1580625 11.605125000000001c0.018125000000000002 0.8547499999999999 0.36568749999999994 1.6694375 0.9701875 2.273875 0.6045625 0.6045625 1.4191875 0.9521250000000001 2.2739375 0.9702500000000001 0.8546874999999999 0.018125000000000002 1.6833125 -0.29475 2.312875 -0.8730625000000001l1.280125 -1.2505c0.126375 -0.1379375 0.19587500000000002 -0.3185625 0.19443749999999999 -0.505625 -0.0013750000000000001 -0.18706250000000002 -0.073625 -0.366625 -0.20206249999999998 -0.5025625 -0.12843749999999998 -0.13599999999999998 -0.30362500000000003 -0.21825 -0.4903125 -0.2303125 -0.1866875 -0.0119375 -0.37093750000000003 0.0471875 -0.5158125 0.1655625ZM13.891562500000001 1.1158125C13.2690625 0.4971875 12.4271875 0.15 11.549562499999999 0.15s-1.7195 0.3471875 -2.3419375000000002 0.9658125L7.927499999999999 2.3663125c-0.126375 0.137875 -0.19587500000000002 0.3185625 -0.19443749999999999 0.5055624999999999 0.0013750000000000001 0.18706250000000002 0.073625 0.366625 0.20206249999999998 0.502625 0.12843749999999998 0.1359375 0.3036875 0.2181875 0.490375 0.23025 0.18662499999999999 0.011999999999999999 0.37093750000000003 -0.047125 0.51575 -0.16549999999999998l1.280125 -1.27275c0.343375 -0.3434375 0.8091875 -0.5363749999999999 1.2949374999999999 -0.5363749999999999 0.4856875 0 0.9515 0.19293749999999998 1.294875 0.5363749999999999 0.3434375 0.3434375 0.5364375 0.80925 0.5364375 1.2949374999999999 0 0.4856875 -0.193 0.9515 -0.5364375 1.2949374999999999l-3.359375 3.3668125c-0.32968749999999997 0.33075 -0.774 0.5221250000000001 -1.240875 0.5345 -0.4669375 0.0124375 -0.9207500000000001 -0.1550625 -1.2675625 -0.4679375l-0.0888125 -0.07400000000000001c-0.14024999999999999 -0.137375 -0.32937500000000003 -0.21337499999999998 -0.5258125 -0.21131250000000001 -0.196375 0.0020625 -0.3838125 0.0820625 -0.5211875 0.2224375 -0.137375 0.1403125 -0.21337499999999998 0.3294375 -0.21131250000000001 0.5258125 0.0021249999999999997 0.1963125 0.08212499999999999 0.3838125 0.2224375 0.5211875 0.05374999999999999 0.05499999999999999 0.11056250000000001 0.10687500000000001 0.1701875 0.1554375 0.6324375 0.5478124999999999 1.4489375 0.8356874999999999 2.2851875 0.8055 0.8361875000000001 -0.030187500000000003 1.6298750000000002 -0.3761875 2.2210625 -0.9683124999999999l3.3668125 -3.3668125c0.6225 -0.6185625 0.975125 -1.45825 0.980625 -2.3358125 0.0055625 -0.8775624999999999 -0.336375 -1.7216875 -0.9510625 -2.3480625Z\" fill-rule=\"evenodd\" stroke-width=\"1\"></path>\n </svg>`,\n report: () => `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16420_1008)\">\n <g clip-path=\"url(#clip1_16420_1008)\">\n <path d=\"M17.25 24C13.528 24 10.5 20.972 10.5 17.25C10.5 13.528 13.528 10.5 17.25 10.5C20.972 10.5 24 13.528 24 17.25C24 20.972 20.972 24 17.25 24ZM17.25 12C14.355 12 12 14.355 12 17.25C12 20.145 14.355 22.5 17.25 22.5C20.145 22.5 22.5 20.145 22.5 17.25C22.5 14.355 20.145 12 17.25 12Z\" />\n <path d=\"M17.25 21C16.836 21 16.5 20.664 16.5 20.25V18H14.25C13.836 18 13.5 17.664 13.5 17.25C13.5 16.836 13.836 16.5 14.25 16.5H16.5V14.25C16.5 13.836 16.836 13.5 17.25 13.5C17.664 13.5 18 13.836 18 14.25V16.5H20.25C20.664 16.5 21 16.836 21 17.25C21 17.664 20.664 18 20.25 18H18V20.25C18 20.664 17.664 21 17.25 21Z\" />\n <path d=\"M3.75 7.5C3.336 7.5 3 7.164 3 6.75C3 6.336 3.336 6 3.75 6H14.25C14.664 6 15 6.336 15 6.75C15 7.164 14.664 7.5 14.25 7.5H3.75Z\" />\n <path d=\"M3.75 12C3.336 12 3 11.664 3 11.25C3 10.836 3.336 10.5 3.75 10.5H9.75C10.164 10.5 10.5 10.836 10.5 11.25C10.5 11.664 10.164 12 9.75 12H3.75Z\" />\n <path d=\"M3.75 16.5C3.336 16.5 3 16.164 3 15.75C3 15.336 3.336 15 3.75 15H7.5C7.914 15 8.25 15.336 8.25 15.75C8.25 16.164 7.914 16.5 7.5 16.5H3.75Z\" />\n <path d=\"M2.25 21C1.009 21 0 19.991 0 18.75V2.25C0 1.009 1.009 0 2.25 0H12.879C13.48 0 14.044 0.234 14.469 0.658L17.341 3.53C17.766 3.955 18 4.52 18 5.121V7.5C18 7.914 17.664 8.25 17.25 8.25C16.836 8.25 16.5 7.914 16.5 7.5V5.121C16.5 4.924 16.42 4.731 16.281 4.591L13.409 1.719C13.267 1.578 13.079 1.5 12.879 1.5H2.25C1.836 1.5 1.5 1.836 1.5 2.25V18.75C1.5 19.164 1.836 19.5 2.25 19.5H7.5C7.914 19.5 8.25 19.836 8.25 20.25C8.25 20.664 7.914 21 7.5 21H2.25Z\" />\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_16420_1008\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n <clipPath id=\"clip1_16420_1008\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>`,\n export: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g clip-path=\"url(#a)\">\n <path d=\"M12 16.5a.75.75 0 0 1-.75-.75V5.56L8.03 8.78a.75.75 0 0 1-1.06 0 .74.74 0 0 1 0-1.06l4.5-4.5a.74.74 0 0 1 .24-.16l.03-.01a.74.74 0 0 1 .52 0h.02c.1.05.18.1.25.17l4.5 4.5a.74.74 0 0 1 0 1.06.75.75 0 0 1-1.06 0l-3.22-3.22v10.19c0 .41-.34.75-.75.75Z\" />\n <path d=\"M3.75 21A3.75 3.75 0 0 1 0 17.25v-1.5a.75.75 0 0 1 1.5 0v1.5c0 1.24 1.01 2.25 2.25 2.25h16.5c1.24 0 2.25-1 2.25-2.25v-1.5a.75.75 0 0 1 1.5 0v1.5A3.75 3.75 0 0 1 20.25 21H3.75Z\" />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>`,\n import: () => `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <g clip-path=\"url(#a)\">\n <path d=\"M12.001 16.5a.755.755 0 0 1-.26-.047l-.022-.008a.732.732 0 0 1-.249-.165l-4.499-4.5a.743.743 0 0 1-.22-.53c0-.2.078-.389.22-.53a.743.743 0 0 1 .53-.22c.2 0 .389.078.53.22l3.22 3.22V3.75a.75.75 0 0 1 1.5 0v10.189l3.22-3.22a.744.744 0 0 1 1.06 0c.142.141.22.33.22.53s-.078.389-.22.53l-4.5 4.5a.763.763 0 0 1-.246.164l-.026.01a.726.726 0 0 1-.258.047Z\" />\n <path d=\"M3.751 21a3.754 3.754 0 0 1-3.75-3.75v-1.5a.75.75 0 0 1 1.5 0v1.5a2.252 2.252 0 0 0 2.25 2.25h16.5a2.252 2.252 0 0 0 2.25-2.25v-1.5a.75.75 0 0 1 1.5 0v1.5a3.754 3.754 0 0 1-3.75 3.75h-16.5Z\" />\n </g>\n <defs>\n <clipPath id=\"a\">\n <path fill=\"#fff\" d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n </svg>`,\n}\n\nexport type IconName = keyof IconMap // resolves to `string`\nexport default icons\n","<script setup lang=\"ts\">\nimport icons, { type IconMap } from '../../assets/icons'\nimport { computed } from 'vue'\nimport type { FdsIconProps } from './types'\n\nconst props = withDefaults(defineProps<FdsIconProps>(), {\n size: 24,\n title: undefined,\n})\n\nfunction normalizeSvg(svg: string): string {\n // Replace explicit width/height with 100% to allow container sizing\n return svg.replace(/width=\"(.*?)\"/g, 'width=\"100%\"').replace(/height=\"(.*?)\"/g, 'height=\"100%\"')\n}\n\nconst svgHtml = computed(() => {\n const map = icons as IconMap\n const entry = map[props.name]\n if (!entry) return ''\n const raw = typeof entry === 'function' ? entry() : entry\n const withTitle = props.title ? raw.replace('<svg', `<svg aria-label=\"${props.title}\" role=\"img\"`) : raw\n return normalizeSvg(withTitle)\n})\n\nconst pixelSize = computed(() => (typeof props.size === 'number' ? `${props.size}px` : props.size))\n</script>\n\n<template>\n <span\n class=\"inline-flex items-center justify-center align-middle\"\n :style=\"{ width: pixelSize, height: pixelSize }\"\n v-html=\"svgHtml\"\n ></span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsIconButtonProps } from './types'\n\nconst props = withDefaults(defineProps<FdsIconButtonProps>(), {\n size: 24,\n disabled: false,\n loading: false,\n type: 'button',\n ariaLabel: undefined,\n})\n\n// Remove padding of button (4px) from the size to get the icon size\nconst iconSize = computed(() => props.size - 4)\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst buttonClasses = computed(() => [\n 'inline-flex items-center justify-center rounded-md p-[2px] max-w-[48px] max-h-[48px] transition-colors duration-200 fill-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200 focus-visible:outline-dashed focus-visible:outline-2 outline-blue-500',\n props.disabled ? 'opacity-20 cursor-not-allowed' : 'cursor-pointer',\n])\n\nconst onClick = (ev: MouseEvent) => {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n</script>\n\n<template>\n <button\n :id=\"id\"\n :type=\"type\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-disabled=\"ariaDisabled\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <FdsIcon v-if=\"!loading\" :size=\"iconSize\" :name=\"icon\" />\n <FdsIcon v-else :size=\"iconSize\" name=\"spinner\" class=\"animate-spin\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsButtonIcon from '../../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsAlertBlockProps } from './types'\n\nconst props = withDefaults(defineProps<FdsAlertBlockProps>(), {\n id: undefined,\n visible: true,\n closeable: false,\n collapsable: false,\n expanded: false,\n label: '',\n locale: 'sv',\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'toggle'): void\n (e: 'update:visible', value: boolean): void\n}>()\n\nconst isExpanded = ref(props.expanded)\nconst isVisible = ref<boolean>(props.visible)\nconst expandLabel = computed(() => (props.locale === 'sv' ? 'Visa mer' : 'Show more'))\nconst collapseLabel = computed(() => (props.locale === 'sv' ? 'Visa mindre' : 'Show less'))\nconst closeLabel = computed(() => (props.locale === 'sv' ? 'Stäng' : 'Close'))\n\nconst hasSlot = useHasSlot()\n\nwatch(\n () => props.visible,\n (v) => {\n isVisible.value = v\n },\n)\n\nconst alertClasses = computed(() => [\n 'bg-yellow-200 border-yellow-300 border-1 rounded-md p-4 mb-4',\n (props.collapsable && !isExpanded.value) || !hasSlot.value ? 'pb-4' : 'pb-6',\n])\n\nconst autoId = `fds-alert-${Math.random().toString(36).slice(2, 9)}`\nconst alertId = computed(() => props.id ?? autoId)\n\nfunction handleClose() {\n isVisible.value = false\n emit('update:visible', false)\n emit('close')\n}\n\nfunction handleToggle() {\n isExpanded.value = !isExpanded.value\n emit('toggle')\n}\n</script>\n\n<template>\n <div v-if=\"isVisible\" :id=\"alertId\" :class=\"alertClasses\">\n <div>\n <div>\n <div\n v-if=\"label\"\n class=\"font-bold w-full justify-between items-center h-[24px] flex gap-2\"\n :class=\"{ 'mb-4': (isExpanded || !collapsable) && hasSlot }\"\n >\n <div class=\"flex items-center gap-2\">\n <FdsIcon name=\"alert\" :size=\"24\" class=\"fill-yellow-700\" />\n <span>{{ label }}</span>\n </div>\n <div class=\"relative\">\n <FdsButtonIcon\n v-if=\"closeable\"\n icon=\"cross\"\n :size=\"24\"\n @click=\"handleClose\"\n :ariaLabel=\"closeLabel\"\n :class=\"['fill-gray-900! hover:bg-gray-100 active:bg-gray-200']\"\n />\n <FdsButtonIcon\n v-if=\"collapsable\"\n icon=\"arrowDown\"\n :size=\"24\"\n @click=\"handleToggle\"\n :ariaLabel=\"isExpanded ? collapseLabel : expandLabel\"\n :class=\"[\n 'fill-gray-900! hover:bg-gray-100 active:bg-gray-200',\n '[&_svg]:transition-transform [&_svg]:duration-200',\n isExpanded ? '[&_svg]:-rotate-180' : '[&_svg]:rotate-0',\n ]\"\n />\n </div>\n </div>\n <div v-if=\"isExpanded || !collapsable\" class=\"fds-block-alert-slot mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type Slot } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport type { FdsContentBlockProps } from './types'\n\nconst hasSlot = useHasSlot()\n\nconst props = withDefaults(defineProps<FdsContentBlockProps>(), {\n borderLeft: undefined,\n tight: false,\n heading: undefined,\n})\n\nconst contentClasses = computed(() => [\n 'rounded-md p-4 bg-white mb-4',\n props.tight && 'pb-2',\n props.tight && 'p-4!',\n props.borderLeft && 'border-l-4',\n hasSlot.value ? 'pb-6' : 'pb-4',\n])\n\nconst headerClasses = computed(() => ['mt-0 mb-4 text-lg font-bold tracking-wide', !hasSlot.value && 'mb-0!'])\n\nconst borderLeftStyle = computed(() => {\n if (!props.borderLeft) return {}\n\n const colorMap: Record<string, string> = {\n green: 'var(--color-green-600)',\n yellow: 'var(--color-yellow-400)',\n red: 'var(--color-red-500)',\n }\n\n return { 'border-left-color': colorMap[props.borderLeft] || props.borderLeft }\n})\n\nconst autoId = `fds-content-block-${Math.random().toString(36).slice(2, 9)}`\nconst contentBlockId = computed(() => props.id ?? autoId)\n\ndefineSlots<{\n default?: Slot\n headerInfo?: Slot\n}>()\n</script>\n\n<template>\n <div :id=\"contentBlockId\" :class=\"contentClasses\" :style=\"borderLeftStyle\">\n <header v-if=\"heading\" class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-center gap-3\">\n <h3 :class=\"headerClasses\">{{ heading }}</h3>\n </div>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsExpanderBlockProps } from './types'\n\nconst props = withDefaults(defineProps<FdsExpanderBlockProps>(), {\n disabled: false,\n label: '',\n open: false,\n preIcon: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'toggle'): void\n}>()\n\nconst isOpen = ref(props.open)\n\n// Watch for changes to the open prop\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n },\n)\n\nconst expanderClasses = computed(() => [\n 'expander-root block w-full rounded-2xl mb-4 shadow-[0_4px_16px_0_rgba(59,130,246,0.2)] transition-colors',\n props.disabled && 'shadow-none border-2 border-gray-200 border-dashed',\n])\n\nconst headerClasses = computed(() => [\n 'flex w-full items-start text-left justify-between bg-white text-blue-600 rounded-2xl p-[calc(1rem-2px)] border-2 border-white transition-colors border-2 border-white hover:border-blue-500 active:bg-blue_t-100 active:border-white focus-visible:border-blue-500 focus-visible:border-dashed focus-visible:outline-0',\n props.disabled ? 'cursor-not-allowed hover:border-2 hover:border-transparent active:bg-white' : 'cursor-pointer',\n isOpen.value ? 'rounded-b-none' : 'rounded-b-2xl',\n])\n\nfunction handleToggle() {\n if (props.disabled) return\n isOpen.value = !isOpen.value\n emit('toggle')\n}\n</script>\n\n<template>\n <div :class=\"expanderClasses\">\n <button type=\"button\" :class=\"headerClasses\" @click=\"handleToggle\">\n <span class=\"inline-flex items-center\">\n <span v-if=\"preIcon\" class=\"flex items-center mr-4\">\n <FdsIcon :name=\"preIcon\" :size=\"24\" class=\"fill-blue-500\" :class=\"{ 'fill-gray-500': disabled }\" />\n </span>\n <span class=\"inline-flex items-center\">\n <span class=\"font-bold font-heading text-lg leading-md\" :class=\"{ 'text-gray-500': disabled }\">\n {{ label }}\n </span>\n </span>\n </span>\n <FdsIcon\n name=\"arrowDown\"\n :size=\"24\"\n class=\"ml-4 transition-transform duration-200 fill-blue-500 min-w-6 min-h-6\"\n :class=\"{ 'rotate-180': isOpen, 'fill-gray-500': disabled }\"\n />\n </button>\n <div :aria-hidden=\"!isOpen\" class=\"mb-0-last-child block px-4 pb-6 rounded-b-2xl bg-white\" v-show=\"isOpen\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type Slot } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsBlockInfoProps } from './types'\n\nconst props = withDefaults(defineProps<FdsBlockInfoProps>(), {\n icon: undefined,\n size: 'small',\n heading: undefined,\n dataTestid: undefined,\n})\n\nconst hasSlot = useHasSlot()\n\nconst contentClasses = computed(() => [\n 'rounded-md bg-blue_t-100 mb-4',\n !hasSlot.value && 'mb-0!',\n props.size === 'small' && 'p-4',\n props.size === 'small' && hasSlot.value && 'pb-6',\n props.size === 'large' && props.icon && 'p-6',\n])\n\nconst smallIconSize = 24\nconst largeIconSize = 48\n\nconst autoId = `fds-content-block-${Math.random().toString(36).slice(2, 9)}`\nconst contentBlockId = computed(() => props.id ?? autoId)\n\ndefineSlots<{\n default?: Slot\n header?: Slot\n headerInfo?: Slot\n}>()\n</script>\n\n<template>\n <div :id=\"contentBlockId\" :class=\"contentClasses\">\n <!-- Large icon layout: icon left, header + content right -->\n <div v-if=\"size === 'large' && icon\" class=\"flex items-start gap-4\">\n <FdsIcon :name=\"icon\" :size=\"largeIconSize\" class=\"fill-blue-500\" />\n <div class=\"flex-1\">\n <div v-if=\"heading\" class=\"mb-1\">\n <header class=\"flex items-start justify-between gap-4\">\n <h3 class=\"m-0 text-base font-main font-bold tracking-wide\">{{ heading }}</h3>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n </div>\n <div v-if=\"hasSlot\" class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n\n <!-- Small icon or no icon: icon in header only, content below -->\n <div v-else>\n <div v-if=\"heading\" :class=\"{ 'mb-4': hasSlot }\">\n <header class=\"flex items-start justify-between gap-4\">\n <div class=\"flex items-center gap-3\">\n <FdsIcon v-if=\"icon && size === 'small'\" :name=\"icon\" :size=\"smallIconSize\" class=\"fill-blue-500\" />\n <h3 class=\"m-0 text-base font-main font-bold tracking-wide\">{{ heading }}</h3>\n </div>\n <div class=\"flex items-start gap-3\">\n <slot name=\"headerInfo\" />\n </div>\n </header>\n </div>\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsInteractionBlockProps } from './types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\nconst props = withDefaults(defineProps<FdsInteractionBlockProps>(), {\n id: undefined,\n arrow: false,\n disabled: false,\n download: undefined,\n href: undefined,\n target: undefined,\n rel: undefined,\n icon: undefined,\n interactive: true,\n dataTestid: undefined,\n as: 'router-link',\n})\n\nconst hasSlot = useHasSlot()\nconst hasStickerSlot = useHasSlot('sticker')\n\nconst emit = defineEmits<{\n (e: 'click', event: Event): void\n}>()\n\nconst autoId = `fds-block-link-${Math.random().toString(36).slice(2, 9)}`\nconst blockLinkId = computed(() => props.id ?? autoId)\n\nconst innerClasses = computed(() => [\n props.disabled ? 'cursor-not-allowed shadow-none hover:border-transparent active:bg-transparent' : 'cursor-pointer',\n !props.interactive && 'cursor-auto',\n])\n\nconst slotWrapperClasses = computed(() => [\n 'flex flex-col sm:flex-row justify-between h-fit gap-y-2 gap-x-4',\n !hasSlot.value && 'justify-end',\n])\n\nconst headerClasses = computed(() => [\n !props.arrow && !props.icon && 'mb-2',\n !hasSlot.value && 'mb-0!',\n props.icon && 'flex-1',\n])\n\nconst contentClasses = computed(() => [props.icon ? 'items-start gap-3' : 'flex-col'])\nconst containerClasses = computed(() => [props.icon && 'flex-1'])\nconst iconClasses = computed(() => [props.disabled && 'text-gray-700'])\nconst arrowClasses = computed(() => [props.disabled && 'hidden'])\nconst headerTextClasses = computed(() => [props.disabled ? 'text-gray-700' : 'text-blue-600'])\n\nfunction handleClick(event: Event) {\n if (props.disabled || !props.interactive) {\n event.preventDefault()\n return\n }\n emit('click', event)\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n handleClick(event)\n }\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n // Auto-detect: if href exists and no 'as' specified, use 'a'\n if (props.href && !props.as) return { href: props.href }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n\nconst componentType = computed(() => {\n if (props.as) return props.as\n return props.href ? 'a' : 'button'\n})\n</script>\n\n<template>\n <component\n :is=\"componentType\"\n v-bind=\"componentAttrs\"\n :id=\"blockLinkId\"\n class=\"box-border appearance-none text-left w-full flex items-start bg-white p-[calc(1rem-2px)] mb-3 text-blue-600 shadow-lg shadow-blue-200 rounded-2xl no-underline border-2 border-transparent transition-all duration-200 hover:border-blue-600 hover:border-2 active:border-transparent active:shadow-none active:bg-blue_t-100 focus-visible:border-blue-500 focus-visible:border-dashed focus-visible:outline-0\"\n :class=\"innerClasses\"\n :target=\"componentType === 'a' ? target : undefined\"\n :rel=\"componentType === 'a' ? rel : undefined\"\n :download=\"componentType === 'a' ? download : undefined\"\n :disabled=\"componentType === 'button' ? disabled : undefined\"\n :aria-disabled=\"disabled\"\n @click=\"handleClick\"\n @keydown=\"handleKeydown\"\n :data-testid=\"dataTestid\"\n >\n <div class=\"flex w-full flex-1\" :class=\"contentClasses\">\n <FdsIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"24\"\n class=\"flex items-center justify-center w-6 h-6 fill-blue-500\"\n :class=\"iconClasses\"\n />\n <div\n class=\"flex flex-col text-gray-700 font-normal text-base leading-6 tracking-normal\"\n :class=\"containerClasses\"\n >\n <div class=\"flex items-center gap-4\" :class=\"headerClasses\">\n <h3 class=\"flex-1 font-heading text-lg tracking-normal m-0 leading-md\" :class=\"headerTextClasses\">\n {{ label }}\n </h3>\n </div>\n <div :class=\"slotWrapperClasses\">\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n <div v-if=\"hasStickerSlot\" class=\"flex items-end\">\n <slot name=\"sticker\" />\n </div>\n </div>\n </div>\n </div>\n <FdsIcon v-if=\"arrow\" name=\"arrowRight\" :size=\"20\" class=\"ml-3 fill-blue-500\" :class=\"arrowClasses\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsSpinnerProps } from './types'\n\nconst props = withDefaults(\n defineProps<{\n size?: string\n color?: FdsSpinnerProps['color']\n label?: string\n labelPosition?: FdsSpinnerProps['labelPosition']\n }>(),\n { size: '48px', color: 'inherit', label: '', labelPosition: 'bottom' },\n)\n\nconst boxStyle = computed(() => ({ width: props.size, height: props.size }))\n\nconst colorClass = computed(() => {\n switch (props.color) {\n case 'black':\n return 'text-black'\n case 'white':\n return 'text-white'\n case 'blue':\n return 'text-blue-500'\n case 'inherit':\n default:\n return 'text-inherit'\n }\n})\n\nconst wrapperClasses = computed(() =>\n props.label\n ? props.labelPosition === 'right'\n ? 'flex items-center gap-2'\n : 'inline-flex flex-col items-center gap-2'\n : 'inline-block',\n)\n</script>\n\n<template>\n <div\n :class=\"wrapperClasses\"\n role=\"status\"\n :aria-label=\"label || 'Laddar'\"\n >\n <div\n class=\"relative\"\n :style=\"boxStyle\"\n >\n <svg\n class=\"animate-spin block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n :class=\"colorClass\"\n >\n <path\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n d=\"M22.942 14.523a11.42 11.42 0 01-1.087 2.848m-2.04 2.66a12.161 12.161 0 01-2.456 1.81M12.993.747c1.017.09 2.017.32 2.971.682m2.924 1.636c.81.622 1.528 1.355 2.131 2.178M22.6 8.2a10.5 10.5 0 01.614 2.984M14.25 22.972C8.162 24.215 2.218 20.286.975 14.197-.267 8.108 3.662 2.165 9.75.922\"\n />\n </svg>\n <svg\n class=\"animate-spin-reverse absolute top-0 left-0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n :class=\"colorClass\"\n >\n <path\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n d=\"M12 4.447a7.5 7.5 0 11-7.5 7.5\"\n />\n </svg>\n </div>\n <div\n v-if=\"label\"\n :class=\"labelPosition === 'bottom' ? 'font-bold' : ''\"\n >\n {{ label }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\ninterface FdsButtonMinorProps extends FdsButtonBaseProps {\n invert?: boolean\n}\n\nconst props = withDefaults(defineProps<FdsButtonMinorProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n textSelection: false,\n as: 'button',\n href: undefined,\n target: undefined,\n rel: undefined,\n type: 'button',\n invert: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-start justify-center w-fit cursor-pointer shadow-none p-0.5 text-base select-none m-0 rounded-md text-left align-start no-underline transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst variantClasses = computed(() =>\n props.invert\n ? 'border-0 font-normal text-white bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white hover:bg-white-100 active:bg-white-200'\n : 'border-0 font-normal text-blue-600 bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200',\n)\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() =>\n props.icon && props.iconPos === 'right' ? 'order-2 ml-2 mr-0' : props.icon && 'mr-2',\n)\n\nconst buttonClasses = computed(() => [\n elBase,\n variantClasses.value,\n blockElClasses.value,\n props.textSelection && 'select-text',\n])\n\nconst iconFillClass = computed(() => (props.invert ? 'fill-white' : 'fill-blue-500'))\n\nconst onClick = (ev: MouseEvent) => {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"componentAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :target=\"as === 'a' ? target : undefined\"\n :rel=\"as === 'a' ? rel : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner class=\"mr-2\" size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span class=\"pt-0.5\">\n {{ text }}\n </span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsButtonMinor from '../FdsButtonMinor/FdsButtonMinor.vue'\nimport type { FdsCopyButtonProps } from './types'\n\nconst props = withDefaults(defineProps<FdsCopyButtonProps>(), {\n value: '',\n label: 'Kopiera',\n copiedLabel: 'Kopierat!',\n timeoutMs: 800,\n disabled: false,\n})\n\nconst isCopied = ref(false)\nlet resetTimer: ReturnType<typeof setTimeout> | null = null\n\nasync function copyToClipboard(text: string) {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // ignore and try fallback\n }\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.focus()\n textarea.select()\n let ok = false\n try {\n ok = document.execCommand('copy')\n } catch {\n ok = false\n }\n document.body.removeChild(textarea)\n return ok\n}\n\nasync function onClick() {\n if (props.disabled) return\n let textToCopy = props.value\n if (props.targetId) {\n const el = document.getElementById(props.targetId)\n if (el) {\n textToCopy = (el as HTMLElement).innerText || (el as HTMLElement).textContent || ''\n }\n }\n if (!textToCopy) return\n const ok = await copyToClipboard(textToCopy)\n if (!ok) return\n isCopied.value = true\n if (resetTimer) clearTimeout(resetTimer)\n resetTimer = setTimeout(() => (isCopied.value = false), props.timeoutMs)\n}\n\nonMounted(() => {\n if (resetTimer) {\n clearTimeout(resetTimer)\n resetTimer = null\n }\n})\n\ndefineEmits<{ (e: 'click'): void }>()\n</script>\n\n<template>\n <div v-if=\"isCopied\" class=\"flex items-center gap-2 h-7\">\n <FdsIcon name=\"bigSuccess\" />\n <span>{{ props.copiedLabel }}</span>\n </div>\n <FdsButtonMinor\n v-else\n type=\"button\"\n :disabled=\"props.disabled\"\n icon=\"copy\"\n :text=\"isCopied ? props.copiedLabel : props.label\"\n @click=\"onClick\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsButtonDownloadProps } from './types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<FdsButtonDownloadProps>(), {\n loading: false,\n disabled: false,\n iconPos: 'left',\n href: undefined,\n downloadOptions: undefined,\n text: '',\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst isDownloading = ref(false)\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n])\n\nconst elBase = computed(() => [\n 'box-border appearance-none w-full inline-flex items-center justify-center shadow-none p-0.5 text-base',\n 'select-none m-0 rounded-md align-middle whitespace-nowrap no-underline',\n 'transition-[box-shadow,border-color,background-color] duration-200 font-main text-base',\n 'leading-5 tracking-normal',\n])\n\nconst stateClasses = computed(() => [\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4',\n 'focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200',\n])\n\nconst iconOrderClasses = computed(() => (props.iconPos === 'right' ? 'order-2 ml-2 mr-0' : 'mr-2'))\n\nconst buttonClasses = computed(() => [\n elBase.value,\n stateClasses.value,\n 'border-0 font-normal bg-transparent',\n isDownloading.value ? 'cursor-not-allowed text-gray-500' : 'cursor-pointer text-blue-600',\n])\n\nconst iconFillClass = computed(() => (isDownloading.value ? 'fill-gray-500' : 'fill-blue-500'))\n\nasync function handleDownload(ev: MouseEvent) {\n if (props.disabled || props.loading || isDownloading.value) {\n ev.preventDefault()\n return\n }\n\n // If no downloadOptions, just emit click and let default link behavior handle it\n if (!props.downloadOptions || !props.href) {\n emit('click', ev)\n return\n }\n\n ev.preventDefault()\n\n isDownloading.value = true\n\n const options = props.downloadOptions\n const authHeader: Record<string, string> = {}\n authHeader[options.headerAuthKey || 'Authorization'] = `${options.headerAuthValuePrefix || 'Bearer '}${options.token}`\n\n if (options.accept) {\n authHeader.Accept = options.accept\n }\n\n try {\n const response = await fetch(props.href, {\n method: 'GET',\n headers: authHeader,\n })\n\n if (!response.ok) {\n throw new Error(`Download failed: ${response.status} ${response.statusText}`)\n }\n\n // Get blob from response\n const blob = await response.blob()\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n\n // Try to get filename from Content-Disposition header\n const contentDisposition = response.headers.get('content-disposition')\n let fileName = props.href.substring(props.href.lastIndexOf('/') + 1)\n\n if (contentDisposition) {\n const fileNameMatch = contentDisposition.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/)\n if (fileNameMatch && fileNameMatch[1]) {\n fileName = fileNameMatch[1].replace(/['\"]/g, '')\n // Decode URL encoding\n fileName = fileName.replace(/\\+/g, '%20')\n fileName = decodeURIComponent(fileName)\n }\n }\n\n link.setAttribute('download', fileName)\n document.body.appendChild(link)\n\n link.dispatchEvent(\n new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n }),\n )\n\n setTimeout(() => {\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n }, 100)\n\n if (options.onFinishCallback) {\n options.onFinishCallback()\n }\n } catch (error) {\n if (options.errorHandler) {\n options.errorHandler(error)\n } else {\n throw error\n }\n } finally {\n isDownloading.value = false\n }\n}\n\nconst onClick = (ev: MouseEvent) => {\n if (props.downloadOptions) {\n handleDownload(ev)\n } else {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n }\n}\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <button\n v-bind=\"$attrs\"\n :class=\"buttonClasses\"\n :disabled=\"disabled || loading || isDownloading\"\n type=\"button\"\n @click=\"onClick\"\n >\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" name=\"download\" :size=\"24\" />\n </span>\n {{ text }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\nconst props = withDefaults(defineProps<FdsButtonBaseProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n size: 'md',\n textSelection: false,\n as: 'button',\n href: undefined,\n type: 'button',\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst sizeClasses: Record<string, string> = {\n sm: 'text-sm h-7 px-3',\n md: 'text-base h-12 px-4',\n lg: 'text-lg h-[68px] px-6',\n}\n\nconst variantClasses =\n 'bg-red-600 border border-red-700 text-white hover:bg-red-700 active:bg-red-800 active:border-red-800'\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() => (props.icon && props.iconPos === 'right' ? 'order-2' : ''))\n\nconst buttonClasses = computed(() => [\n elBase,\n sizeClasses[props.size || 'm'],\n variantClasses,\n blockElClasses.value,\n props.textSelection && 'select-text',\n (props.icon || props.text) && 'gap-2',\n])\n\nconst iconFillClass = 'fill-white'\n\nfunction onClick(ev: MouseEvent) {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n // Support both @click event and onClick prop\n if (props.onClick) {\n const handlers = Array.isArray(props.onClick) ? props.onClick : [props.onClick]\n handlers.forEach((handler) => handler(ev))\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"linkAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span v-if=\"text\">{{ text }}</span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsButtonBaseProps } from '../ButtonBaseProps'\n\nconst props = withDefaults(defineProps<FdsButtonBaseProps>(), {\n loading: false,\n disabled: false,\n block: false,\n state: undefined,\n icon: undefined,\n iconPos: 'left',\n size: 'md',\n textSelection: false,\n as: 'button',\n href: undefined,\n type: 'button',\n})\n\nconst emit = defineEmits<{\n (e: 'click', ev: MouseEvent): void\n}>()\n\nconst rootClasses = computed(() => [\n 'inline-block transition-opacity duration-200',\n props.disabled && 'opacity-20 pointer-events-none',\n props.block && 'block w-full',\n])\n\nconst elBase =\n 'box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500'\n\nconst sizeClasses: Record<string, string> = {\n sm: 'text-sm h-7 px-3',\n md: 'text-base h-12 px-4',\n lg: 'text-lg h-[68px] px-6',\n}\n\nconst variantClasses =\n 'bg-white border-2 border-blue-500 text-blue-600 hover:border-blue-600 active:bg-blue-600 active:border-blue-600 active:text-white'\n\nconst blockElClasses = computed(() => props.block && 'w-full justify-center')\n\nconst iconOrderClasses = computed(() => (props.icon && props.iconPos === 'right' ? 'order-2' : ''))\n\nconst buttonClasses = computed(() => [\n elBase,\n sizeClasses[props.size || 'm'],\n variantClasses,\n blockElClasses.value,\n props.textSelection && 'select-text',\n (props.icon || props.text) && 'gap-2',\n])\n\nconst iconFillClass = 'fill-blue-500'\n\nconst onClick = (ev: MouseEvent) => {\n if (props.disabled || props.loading) {\n ev.preventDefault()\n return\n }\n emit('click', ev)\n}\n\nconst linkAttrs = computed(() => {\n if (props.as === 'a') return { href: props.href }\n if (props.as === 'router-link') return { to: props.href }\n return {}\n})\n</script>\n\n<template>\n <div :class=\"rootClasses\" :aria-disabled=\"disabled ? 'true' : undefined\">\n <component\n :is=\"as\"\n v-bind=\"linkAttrs\"\n :type=\"as === 'button' ? type : undefined\"\n :disabled=\"as === 'button' ? disabled : undefined\"\n :class=\"buttonClasses\"\n @click=\"onClick\"\n >\n <template v-if=\"loading\">\n <FdsSpinner size=\"24px\" color=\"inherit\" />\n </template>\n <template v-else-if=\"icon\">\n <span :class=\"iconOrderClasses\" aria-hidden=\"true\">\n <FdsIcon :class=\"iconFillClass\" :name=\"icon\" :size=\"24\" />\n </span>\n </template>\n <span v-if=\"text\">{{ text }}</span>\n </component>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useHasSlot } from '../../composables/useHasSlots'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsIcon from '../FdsIcon/FdsIcon.vue'\nimport type { FdsModalProps } from './types'\n\nconst props = withDefaults(defineProps<FdsModalProps>(), {\n open: false,\n heading: '',\n size: 'md',\n alignTop: false,\n alignLeftFooter: false,\n stickyFooter: false,\n strict: false,\n lockScroll: false,\n info: undefined,\n locale: 'sv',\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'update:open', value: boolean): void\n}>()\n\nconst isOpen = ref(props.open)\nlet cleanupFocusTrap: (() => void) | null = null\nconst previouslyFocusedElement = ref<HTMLElement | null>(null)\n\nconst hasFooterSlot = useHasSlot('modal-footer')\n\nconst modalOuterClasses = computed(() => ['fixed top-0 left-0 w-full h-full overflow-auto z-100'])\n\nconst modalInnerClasses = computed(() => [\n 'relative min-w-[288px] w-[calc(100%-5rem)] bg-white rounded-lg overflow-auto z-[99999] shadow-lg px-6 pt-6.5 left-1/2',\n 'max-h-[80%] top-1/2 translate-x-[-50%]',\n props.alignTop ? 'top-[10rem]' : 'translate-y-[-50%]',\n props.stickyFooter ? 'pb-0' : 'pb-8',\n {\n 'max-w-[480px]': props.size === 'sm',\n 'max-w-[588px]': props.size === 'md',\n 'max-w-[768px]': props.size === 'lg',\n 'max-w-[1200px]': props.size === 'xl',\n },\n])\n\nconst headerTitleClasses = computed(() => ['m-0'])\n\nconst iconName = computed(() => {\n if (props.info === 'valid') return 'check'\n if (props.info === 'invalid' || props.info === 'warning') return 'alert'\n return null\n})\n\nconst iconClasses = computed(() => [\n 'inline mr-2 float-left',\n {\n 'fill-green-600': props.info === 'valid',\n 'fill-red-600': props.info === 'invalid',\n 'fill-yellow-600': props.info === 'warning',\n },\n])\n\nconst closeLabel = computed(() => (props.locale === 'sv' ? 'Stäng dialogruta' : 'Close modal window'))\n\nconst footerClasses = computed(() => [\n 'mt-6 flex flex-col gap-4 left-0 right-0',\n {\n 'sm:flex-row sm:justify-end': !props.alignLeftFooter,\n 'sm:flex-row sm:justify-start': props.alignLeftFooter,\n 'sticky bg-white bottom-0 shadow-[0px_-8px_16px_0px_rgba(255,255,255,0.59)] z-[2] -mx-6 px-6 pb-6':\n props.stickyFooter,\n },\n])\n\nconst setHtmlOverflow = (value: 'auto' | 'hidden') => {\n if (typeof document === 'undefined') return\n const htmlEl = document.documentElement\n if (htmlEl) {\n htmlEl.style.overflow = value\n }\n}\n\nconst handleBackdropClick = () => {\n handleClose('backdrop')\n}\n\nconst handleClose = (context: 'backdrop' | 'icon' | 'keydown') => {\n if (props.strict && context === 'icon') {\n return\n }\n isOpen.value = false\n setHtmlOverflow('auto')\n\n // Restore focus to the element that opened the modal\n nextTick(() => {\n if (previouslyFocusedElement.value) {\n previouslyFocusedElement.value.focus()\n previouslyFocusedElement.value = null\n }\n })\n\n emit('close')\n emit('update:open', false)\n}\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (isOpen.value && e.code === 'Escape') {\n handleClose('keydown')\n }\n}\n\nconst getTabList = (modal: Element) =>\n modal.querySelectorAll(\n 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])',\n )\n\nconst trapFocus = () => {\n if (!isOpen.value) return\n\n nextTick(() => {\n const modal = document.querySelector('.fds-modal-inner')\n if (!modal) return\n\n const tabList = getTabList(modal)\n\n if (tabList.length > 0) {\n ;(tabList[0] as HTMLElement).focus()\n }\n\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return\n\n const currentTabList = getTabList(modal)\n if (currentTabList.length === 0) return\n\n const firstFocusableEl = currentTabList[0] as HTMLElement\n const lastFocusableEl = currentTabList[currentTabList.length - 1] as HTMLElement\n const isTabOrderReversed = e.shiftKey\n\n // Prevent leaving modal\n if (isTabOrderReversed && document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus()\n e.preventDefault()\n } else if (!isTabOrderReversed && document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus()\n e.preventDefault()\n }\n }\n\n // Add event listener to the modal element\n modal.addEventListener('keydown', handleTabKey as EventListener, true)\n\n cleanupFocusTrap = () => {\n modal.removeEventListener('keydown', handleTabKey as EventListener, true)\n }\n })\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n if (newValue) {\n // Save the currently focused element before opening the modal\n previouslyFocusedElement.value = document.activeElement as HTMLElement\n if (props.lockScroll) {\n setHtmlOverflow('hidden')\n }\n trapFocus()\n } else {\n setHtmlOverflow('auto')\n if (cleanupFocusTrap) {\n cleanupFocusTrap()\n cleanupFocusTrap = null\n }\n\n // Restore focus to the element that opened the modal\n nextTick(() => {\n if (previouslyFocusedElement.value) {\n previouslyFocusedElement.value.focus()\n previouslyFocusedElement.value = null\n }\n })\n }\n },\n)\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeyDown, true)\n\n if (props.open) {\n // Save the currently focused element before opening the modal\n previouslyFocusedElement.value = document.activeElement as HTMLElement\n\n if (props.lockScroll) {\n setHtmlOverflow('hidden')\n }\n trapFocus()\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('keydown', handleKeyDown, true)\n setHtmlOverflow('auto')\n if (cleanupFocusTrap) {\n cleanupFocusTrap()\n }\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div v-if=\"isOpen\" @click=\"handleBackdropClick\" :class=\"modalOuterClasses\">\n <!-- Backdrop -->\n <div class=\"fixed top-0 left-0 w-full h-full bg-black/34 z-99\"></div>\n\n <!-- Modal Inner -->\n <div class=\"fds-modal-inner\" :class=\"modalInnerClasses\" role=\"alertdialog\" aria-modal=\"true\" @click.stop>\n <!-- Header -->\n <div class=\"flex justify-between mb-4\">\n <h3 tabindex=\"-1\" :class=\"headerTitleClasses\">\n <FdsIcon v-if=\"iconName\" :name=\"iconName\" :size=\"24\" :class=\"iconClasses\" />\n {{ heading }}\n </h3>\n <FdsButtonIcon\n v-if=\"!strict\"\n icon=\"cross\"\n :size=\"28\"\n @click=\"handleClose('icon')\"\n :ariaLabel=\"closeLabel\"\n class=\"ml-4\"\n />\n </div>\n\n <!-- Content -->\n <div class=\"mb-0-last-child\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooterSlot\" :class=\"footerClasses\">\n <slot name=\"modal-footer\" />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._rawInputValue = '';\n this.history = new InputHistory();\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl('auto');\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl('auto');\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n undo: this._onUndo,\n redo: this._onRedo\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) this.updateValue();\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!this.optionsIsChanged(opts)) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n this.doCommit();\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (inserted === void 0) {\n inserted = '';\n }\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n pad(flags) {\n return this._appendPlaceholder();\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n if (!state) {\n this.reset();\n return;\n }\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.DEFAULTS,\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\n }));\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null || _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.DEFAULTS,\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: enum_,\n ...eopts\n } = opts;\n if (enum_) {\n const lengths = enum_.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = enum_;\n }\n super._update(eopts);\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n // just drop tail\n return new ContinuousTailDetails('', fromPos);\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\n};\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nvar _MaskedNumber;\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.DEFAULTS,\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [_MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n// @ts-ignore - IMask types may not be resolved in build\nimport IMask from 'imask'\nimport FdsButtonIcon from '../../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsButtonMinor from '../../Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsInputProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsInputProps>(), {\n value: undefined,\n label: undefined,\n disabled: false,\n valid: undefined,\n optional: false,\n required: false,\n labelLeft: false,\n meta: undefined,\n type: 'text',\n passwordLabels: undefined,\n clearButton: false,\n name: undefined,\n id: undefined,\n mask: undefined,\n maskOptions: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'clearInput'): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-input-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst clearButtonLabel = computed(() => (props.locale === 'sv' ? 'Rensa input' : 'Clear input'))\n\nconst showInvalidMessage = computed(() => props.valid === 'false' && !props.optional && props.invalidMessage)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\nconst isValid = computed(() => props.valid === 'true')\nconst showPasswordToggle = computed(() => isPasswordType.value && internalValue.value.length > 0)\n\nconst inputClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-[calc(0.75rem-1px)] mb-6',\n 'focus:outline-2 focus:outline-blue-500 -outline-offset-2 focus:border-transparent',\n props.disabled ? 'outline-dashed outline-2 outline-gray-400 cursor-not-allowed border-transparent' : 'bg-white',\n isInvalid.value && 'outline-2 outline-red-600',\n])\n\nconst validationIconClasses = computed(() => [\n 'absolute flex gap-2 right-4 top-1/2 -translate-y-1/2 flex items-center justify-end',\n])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () =>\n // If modelValue is explicitly set (via v-model), use it\n // Otherwise fall back to value prop\n modelValue.value !== undefined ? modelValue.value : (props.value ?? ''),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n\nfunction onClear() {\n internalValue.value = ''\n emit('clearInput')\n}\n\nconst showPassword = ref(false)\nconst isPasswordType = computed(() => props.type === 'password')\n\nfunction toggleShowPassword() {\n showPassword.value = !showPassword.value\n}\n\n// IMask setup\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nlet maskInstance: any = null\n\nconst createMask = () => {\n // Destroy existing mask if any\n if (maskInstance) {\n maskInstance.destroy()\n maskInstance = null\n }\n\n // Create new mask if mask prop is provided and input exists\n if (props.mask && inputRef.value) {\n const maskConfig = {\n mask: props.mask,\n ...props.maskOptions,\n }\n\n maskInstance = IMask(inputRef.value, maskConfig as any)\n\n // Sync mask value with internalValue\n if (internalValue.value) {\n maskInstance.value = internalValue.value\n }\n\n // Update internalValue when mask value changes\n maskInstance.on('accept', () => {\n if (maskInstance) {\n internalValue.value = maskInstance.value\n }\n })\n }\n}\n\nonMounted(() => {\n nextTick(() => {\n createMask()\n })\n})\n\nonBeforeUnmount(() => {\n if (maskInstance) {\n maskInstance.destroy()\n maskInstance = null\n }\n})\n\n// Watch for mask prop changes and recreate mask\nwatch(\n () => props.mask,\n () => {\n nextTick(() => {\n createMask()\n })\n },\n)\n\n// Watch for external value changes and update mask\nwatch(\n () => props.value,\n (newValue) => {\n if (maskInstance && newValue !== undefined && newValue !== maskInstance.value) {\n maskInstance.value = newValue\n }\n },\n)\n\nwatch(\n () => modelValue.value,\n (newValue) => {\n if (maskInstance && newValue !== undefined && newValue !== maskInstance.value) {\n maskInstance.value = newValue\n }\n },\n)\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <div :class=\"{ 'flex flex-row gap-4': labelLeft }\">\n <div>\n <label\n v-if=\"label\"\n :for=\"inputId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >{{ label }}</label\n >\n <div\n v-if=\"meta\"\n class=\"font-thin\"\n :class=\"{ 'mb-1': !labelLeft }\"\n >\n {{ meta }}\n </div>\n </div>\n <div :class=\"{ 'flex-1': labelLeft }\">\n <div class=\"relative\">\n <input\n ref=\"inputRef\"\n :id=\"inputId\"\n :name=\"name || undefined\"\n :type=\"isPasswordType ? (showPassword ? 'text' : 'password') : type\"\n :disabled=\"disabled\"\n :required=\"required\"\n :size=\"size as any\"\n :maxlength=\"maxlength as any\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"inputClasses\"\n v-bind=\"$attrs\"\n @input=\"$emit('input', $event)\"\n />\n <div :class=\"validationIconClasses\">\n <FdsIcon\n v-if=\"isInvalid\"\n name=\"alert\"\n class=\"fill-red-600\"\n />\n <FdsIcon\n v-if=\"isValid\"\n name=\"bigSuccess\"\n />\n <FdsButtonIcon\n v-if=\"clearButton && !!internalValue && !disabled\"\n icon=\"cross\"\n :ariaLabel=\"clearButtonLabel\"\n @click=\"onClear\"\n />\n <FdsButtonMinor\n v-if=\"showPasswordToggle\"\n :icon=\"showPassword ? 'viewOff' : 'viewOn'\"\n text=\"\"\n @click=\"toggleShowPassword\"\n />\n </div>\n </div>\n </div>\n </div>\n <div\n v-if=\"showInvalidMessage\"\n class=\"text-red-600 font-bold mt-1\"\n >\n {{ invalidMessage }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsSpinner from '../FdsSpinner/FdsSpinner.vue'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport type { FdsPaginationProps } from './types'\n\nconst props = withDefaults(defineProps<FdsPaginationProps>(), {\n id: undefined,\n loading: false,\n})\n\nconst emit = defineEmits<{\n (e: 'paginate', payload: { target: { id: string }; detail: number }): void\n}>()\n\nconst loadingIndicator = ref<'start' | 'prev' | 'input' | 'next' | 'end' | ''>('')\nconst internalValue = ref(props.current)\n\nconst autoId = `fds-pagination-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst inputValue = computed(() => String(internalValue.value))\n\nwatch(\n () => props.current,\n (newValue) => {\n internalValue.value = newValue\n },\n)\n\nconst debounce = <T extends (...args: any[]) => void>(fn: T, delay = 300) => {\n let timer: ReturnType<typeof setTimeout>\n return (...args: Parameters<T>) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n fn(...args)\n }, delay)\n }\n}\n\nconst handlePageChange = debounce((event: Event) => {\n const target = event.target as HTMLInputElement\n const incomingPage = Number.parseInt(target.value)\n\n if (Number.isNaN(incomingPage)) {\n internalValue.value = props.current\n return\n }\n\n loadingIndicator.value = 'input'\n\n let page = props.current\n if (incomingPage > props.max) {\n page = props.max\n } else if (incomingPage < 1) {\n page = 1\n } else {\n page = incomingPage\n }\n\n internalValue.value = page\n emit('paginate', { target: { id: inputId.value }, detail: page })\n}, 500)\n\nconst handlePagination = (action: 'start' | 'prev' | 'next' | 'end') => {\n let page = 0\n\n switch (action) {\n case 'start':\n if (props.current === 1) return\n loadingIndicator.value = 'start'\n page = 1\n break\n case 'prev':\n if (props.current === 1) return\n loadingIndicator.value = 'prev'\n page = props.current === 1 ? props.current : props.current - 1\n break\n case 'next':\n if (props.current === props.max) return\n loadingIndicator.value = 'next'\n page = props.current === props.max ? props.current : props.current + 1\n break\n case 'end':\n if (props.current === props.max) return\n loadingIndicator.value = 'end'\n page = props.max\n break\n }\n\n emit('paginate', { target: { id: inputId.value }, detail: page })\n}\n</script>\n\n<template>\n <div class=\"my-6 flex items-between justify-between gap-2\" :id=\"inputId\">\n <!-- Prev -->\n <div class=\"flex items-center justify-start gap-1 w-[100px]\">\n <FdsSpinner v-if=\"loading && loadingIndicator === 'start'\" size=\"32px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"first\"\n :size=\"28\"\n :disabled=\"current === 1\"\n :ariaDisabled=\"current === 1\"\n :class=\"{ 'hidden!': current === 1 }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('start')\"\n />\n\n <FdsSpinner v-if=\"loading && loadingIndicator === 'prev'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"arrowLeft\"\n :size=\"28\"\n :disabled=\"current === 1\"\n :ariaDisabled=\"current === 1\"\n :class=\"{ 'hidden!': current === 1 }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('prev')\"\n />\n </div>\n\n <!-- Numbers -->\n <div class=\"flex items-center justify-center w-auto gap-2 order-0 sm:order-0\">\n <FdsSpinner\n v-if=\"loading && loadingIndicator === 'input'\"\n size=\"24px\"\n color=\"blue\"\n label=\"Laddar\"\n label-position=\"right\"\n />\n <template v-else>\n <FdsInput\n :value=\"inputValue\"\n type=\"text\"\n :size=\"max.toString().length\"\n :maxlength=\"max.toString().length\"\n @input=\"handlePageChange\"\n class=\"mb-0! text-center\"\n />\n <div class=\"whitespace-nowrap\">/ {{ max }}</div>\n </template>\n </div>\n\n <!-- Next -->\n <div class=\"flex items-center justify-end gap-1 order-2 sm:order-0 w-[100px]\">\n <FdsSpinner v-if=\"loading && loadingIndicator === 'next'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"arrowRight\"\n :size=\"28\"\n :disabled=\"current === max\"\n :ariaDisabled=\"current === max\"\n :class=\"{ 'hidden!': current === max }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('next')\"\n />\n\n <FdsSpinner v-if=\"loading && loadingIndicator === 'end'\" size=\"24px\" color=\"blue\" />\n <FdsButtonIcon\n v-else\n icon=\"last\"\n :size=\"28\"\n :disabled=\"current === max\"\n :ariaDisabled=\"current === max\"\n :class=\"{ 'hidden!': current === max }\"\n class=\"w-8 h-8 sm:w-12 sm:h-12\"\n @click=\"handlePagination('end')\"\n />\n </div>\n </div>\n</template>\n","import type { Ref } from 'vue'\n\n/**\n * Composable for bolding search query matches in text\n * @param searchTerm - Reactive search term (Ref<string>)\n * @returns Function that takes text and returns HTML with matched query bolded\n */\nexport function useBoldQuery(searchTerm: Ref<string>) {\n const boldQuery = (text: string): string => {\n const query = searchTerm.value.trim()\n if (!query) return text\n\n const lowerText = text.toLowerCase()\n const lowerQuery = query.toLowerCase()\n const matchIndex = lowerText.indexOf(lowerQuery)\n\n if (matchIndex === -1) return text\n\n const beforeMatch = text.substring(0, matchIndex)\n const match = text.substring(matchIndex, matchIndex + query.length)\n const afterMatch = text.substring(matchIndex + query.length)\n\n return `${beforeMatch}<b>${match}</b>${afterMatch}`\n }\n\n return {\n boldQuery,\n }\n}\n","import { computed, type Ref } from 'vue'\n\n/**\n * Check if a string looks like a personnummer (Swedish personal identity number)\n * @param value - String value to check\n * @returns Boolean indicating if the value looks like a personnummer\n */\nexport function isPidString(value: string): boolean {\n const digitsOnly = value.replace(/\\D/g, '')\n\n // Personnummer has 12 digits total (8 digits before dash, 4 after)\n // Activate detection when user has typed 6+ digits (likely a date yyyymmdd)\n // This avoids detecting phone numbers which typically start with +46, 0, or have different patterns\n if (digitsOnly.length < 6) {\n return false\n }\n\n // Check if it looks like a date (first 6 digits should be reasonable year + month)\n // Years are typically 19xx-20xx, months 01-12\n const firstSix = digitsOnly.substring(0, 6)\n const year = parseInt(firstSix.substring(0, 4))\n const month = parseInt(firstSix.substring(4, 6))\n\n // Valid year range (1900-2099) and valid month (01-12)\n if (year >= 1900 && year <= 2099 && month >= 1 && month <= 12) {\n return true\n }\n\n // If user has typed 8+ digits, assume it's a personnummer\n if (digitsOnly.length >= 8) {\n return true\n }\n\n return false\n}\n\n/**\n * Composable for detecting if a string looks like a personnummer (Swedish personal identity number)\n * @param value - Reactive string value to check (Ref<string>)\n * @returns Computed boolean indicating if the value looks like a personnummer\n */\nexport function useIsPid(value: Ref<string>) {\n const isPid = computed(() => isPidString(value.value))\n\n return {\n isPid,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { useBoldQuery } from '../../composables/useBoldQuery'\nimport { isPidString, useIsPid } from '../../composables/useIsPid'\nimport FdsIcon from '../FdsIcon/FdsIcon.vue'\nimport FdsPagination from '../FdsPagination/FdsPagination.vue'\nimport FdsSpinner from '../FdsSpinner/FdsSpinner.vue'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport type { FdsSearchSelectProps } from './types'\n\nconst props = withDefaults(defineProps<FdsSearchSelectProps>(), {\n items: () => [],\n page: undefined,\n totalPages: undefined,\n totalCount: undefined,\n loading: false,\n searchFields: () => [],\n preserveOrder: false,\n initialValue: '',\n disabled: false,\n dropdownAbsolute: false,\n labelLeft: false,\n label: '',\n meta: undefined,\n singleItemLabel: '',\n searchContext: () => ({ context: '', linkWord: '' }),\n valid: undefined,\n invalidMessage: '',\n noResultPrompt: '',\n borderless: false,\n marginless: false,\n maxListHeight: undefined,\n locale: 'sv',\n clearTrigger: false,\n})\n\nconst searchFields = computed(() => props.searchFields ?? [])\n\nconst emit = defineEmits<{\n (e: 'searchSelected', value: Record<string, unknown> | null): void\n (e: 'paginate', value: number): void\n (e: 'total', value: number): void\n (e: 'change', value: string): void\n}>()\n\nconst dropdownVisible = ref(false)\nconst singleItemName = ref('')\nconst searchTerm = ref('')\nconst matchingItems = ref<Array<Record<string, unknown>>>([])\nconst displayedItems = ref<Array<Record<string, unknown>>>([])\nconst selectedItem = ref<Record<string, unknown> | null>(null)\nconst focusedIndex = ref<number>(-1)\nconst valid = ref<string | undefined>(props.valid)\n\n// Use prop.totalCount if provided, otherwise calculate from items.length\nconst totalCount = computed(() => {\n if (props.totalCount !== undefined) {\n return props.totalCount\n }\n return props.items?.length || 0\n})\n\nwatch(\n () => props.valid,\n (newValue) => {\n valid.value = newValue\n },\n)\n\nconst componentRef = ref<HTMLElement | null>(null)\nconst inputId = `searchSelectInput-${Math.random().toString(36).slice(2, 9)}`\n\nconst hasInputValue = computed(() => searchTerm.value.length > 0)\n\nconst listWrapperClasses = computed(() => [\n 'rounded-md box-border overflow-hidden z-4 w-full bg-white mt-2',\n props.marginless ? 'mb-0' : 'mb-8',\n props.borderless ? 'shadow-lg border-none' : 'border border-gray-200',\n props.dropdownAbsolute ? 'absolute right-0 z-50' : 'relative',\n props.maxListHeight && 'overflow-y-scroll',\n])\n\nconst listItemClasses = computed(() => [\n 'block m-0',\n 'outline-none! hover:bg-blue_t-100 active:bg-blue_t-200',\n props.borderless && 'border-b border-blue_t-200',\n])\n\nconst listWrapperStyle = computed(() => {\n if (!props.maxListHeight) return null\n\n // Convert to number in case it's passed as a string\n const maxHeight = typeof props.maxListHeight === 'string' ? parseInt(props.maxListHeight, 10) : props.maxListHeight\n\n return { maxHeight: `${maxHeight}px` }\n})\n\nconst sortResponse = (response: Array<Record<string, unknown>>) => {\n if (!response.length) return []\n const firstItem = response[0] ?? {}\n const allKeys = [...searchFields.value, ...Object.keys(firstItem).filter((k) => !searchFields.value.includes(k))]\n return response.map((item) => {\n const sorted: Record<string, unknown> = {}\n allKeys.forEach((key) => {\n sorted[key] = item[key] || `${key}: den här uppgiften saknas.`\n })\n return sorted\n })\n}\n\nconst matchesSearchTerm = (item: Record<string, unknown>): boolean => {\n if (!searchTerm.value) return true\n\n // When mask is active, use unmasked value (digits only) for searching\n // This ensures we can search even when user has partially typed a PID\n const searchValue = isPid.value ? searchTerm.value.replace(/\\D/g, '') : searchTerm.value\n\n const searchLower = searchValue.toLowerCase()\n const pidRegex = /^\\d{8}[a-zA-Z0-9]{4}$/\n\n // If search term matches PID pattern (unmasked), include all items\n if (pidRegex.test(searchValue)) return true\n\n // Check if any searchFields field contains the search term\n // For PID fields, also check unmasked version\n return searchFields.value.some((key) => {\n const value = item[key]\n if (!value) return false\n\n const stringValue = String(value)\n const valueLower = stringValue.toLowerCase()\n const unmaskedValue = stringValue.replace(/\\D/g, '')\n\n // Check both masked and unmasked versions\n return valueLower.includes(searchLower) || (unmaskedValue.length > 0 && unmaskedValue.includes(searchValue))\n })\n}\n\nconst filterAndPaginate = () => {\n if (!props.items?.length) {\n matchingItems.value = []\n displayedItems.value = []\n emit('total', 0)\n return\n }\n\n // Filter items based on search term\n let sourceData = props.items ?? []\n if (props.preserveOrder && sourceData.length) {\n sourceData = sortResponse(sourceData)\n }\n\n const matchedArray = sourceData.filter((item) => matchesSearchTerm(item))\n matchingItems.value = matchedArray\n\n // Never paginate internally - just show all filtered items\n // Parent component is responsible for pagination if needed\n displayedItems.value = matchedArray\n\n emit('total', matchingItems.value.length)\n}\n\nconst handleClear = () => {\n searchTerm.value = ''\n selectedItem.value = null\n valid.value = 'null'\n emit('searchSelected', null)\n dropdownVisible.value = false\n filterAndPaginate()\n}\n\nwatch(\n () => props.clearTrigger,\n (value) => value && handleClear(),\n)\n\nwatch(\n () => props.items,\n () => {\n filterAndPaginate()\n },\n { immediate: true },\n)\n\nconst formatPidWithDash = (value: string): string => {\n // Only format if it looks like a personnummer\n if (!isPidString(value)) {\n // If it's not a PID, remove any trailing dash that might be left\n return value.replace(/-$/, '')\n }\n\n // Remove all non-digits\n const digits = value.replace(/\\D/g, '')\n\n // Only add dash if there are digits after the first 8\n if (digits.length > 8) {\n return `${digits.substring(0, 8)}-${digits.substring(8)}`\n }\n\n // If exactly 8 digits or less, return without dash\n return digits\n}\n\nconst debounce = <T extends (...args: any[]) => void>(fn: T, delay: number) => {\n let timeout: ReturnType<typeof setTimeout>\n return (...args: Parameters<T>) => {\n clearTimeout(timeout)\n timeout = setTimeout(() => fn(...args), delay)\n }\n}\n\nconst debouncedEmitChange = debounce((value: string) => {\n const formattedValue = formatPidWithDash(value)\n emit('change', formattedValue)\n}, 500)\n\nwatch(\n () => searchTerm.value,\n (newValue) => {\n filterAndPaginate()\n if (selectedItem.value === null) {\n debouncedEmitChange(newValue)\n }\n },\n)\n\nwatch(\n () => props.page,\n () => {\n filterAndPaginate()\n },\n)\n\n// Reset focused index when items change\nwatch(\n () => displayedItems.value,\n () => {\n focusedIndex.value = -1\n },\n)\n\nconst onClickOutside = (e: PointerEvent) => {\n const target = e.target as Element\n if (componentRef.value?.contains(target)) return\n\n dropdownVisible.value = false\n if (props.initialValue === searchTerm.value && props.initialValue.length) {\n valid.value = 'true'\n } else if (searchTerm.value.length > 0 && selectedItem.value === null) {\n valid.value = 'false'\n }\n}\n\nconst totalPages = computed(() => {\n // Only return totalPages if both page and totalPages props are provided\n if (props.page !== undefined && props.totalPages !== undefined) {\n return props.totalPages\n }\n return null\n})\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement\n const { value } = target\n\n searchTerm.value = value\n dropdownVisible.value = true\n selectedItem.value = null\n focusedIndex.value = -1\n valid.value = 'null'\n filterAndPaginate()\n}\n\n// Personnummer detection using composable\nconst { isPid } = useIsPid(searchTerm)\n\n// Bold query matches using composable\nconst { boldQuery } = useBoldQuery(searchTerm)\n\n// Mask configuration for personnummer (yyyymmdd-nnnn)\nconst pidMask = computed(() => {\n if (isPid.value) {\n return '00000000-0000'\n }\n return undefined\n})\n\nconst handleMatchingString = (item: Record<string, unknown>): string => {\n const values = searchFields.value.map((key) => String(item[key] || ''))\n\n let result = ''\n if (values.length === 1) {\n result = values[0] || ''\n } else {\n // Format PID if second value is 12 digits\n if (values[1]?.length === 12 && parseInt(values[1])) {\n values[1] = formatPidWithDash(values[1])\n }\n\n if (props.preserveOrder) {\n // Combine first two values, then join remaining with <br>\n const combined = `${values[0]} (${values[1]})`\n const rest = values.slice(2).join('<br>')\n result = rest ? `${combined}<br>${rest}` : combined\n } else {\n result = `${values.join(' (')})`\n }\n }\n\n if (searchTerm.value) {\n const formattedTerm = formatPidWithDash(searchTerm.value)\n if (formattedTerm !== searchTerm.value) {\n searchTerm.value = formattedTerm\n }\n\n const escaped = formattedTerm.replace(/[()]/g, '\\\\$&')\n if (new RegExp(escaped, 'i').test(result)) {\n return boldQuery(result)\n }\n }\n\n return result\n}\n\nconst handlePagination = (payload: { target: { id: string }; detail: number }) => {\n const newPage = payload.detail\n emit('paginate', newPage)\n}\n\nconst selectItem = (item: Record<string, unknown>) => {\n selectedItem.value = item\n valid.value = 'true'\n emit('searchSelected', item)\n}\n\nconst handleClick = (e: MouseEvent | KeyboardEvent, item: Record<string, unknown>) => {\n const keyEvent = e as KeyboardEvent\n if (keyEvent.key === 'Enter' || keyEvent.code === 'Space' || e.type === 'mouseup') {\n // Prevent event from bubbling and triggering other handlers\n e.preventDefault()\n e.stopPropagation()\n\n const firstField = searchFields.value[0]\n searchTerm.value = (firstField ? (item[firstField] as string) : '') || ''\n selectItem(item)\n focusedIndex.value = -1\n dropdownVisible.value = false\n\n // Focus input after a short delay to prevent dropdown from reopening\n setTimeout(() => {\n const input = document.getElementById(inputId) as HTMLInputElement\n if (input) {\n input.focus()\n }\n }, 100)\n }\n}\n\nconst handleInputFocus = () => {\n // Only open dropdown if an item hasn't been selected and there are items to show\n if (!selectedItem.value && displayedItems.value.length > 0) {\n dropdownVisible.value = true\n }\n}\n\nconst handleListKeyDown = (e: KeyboardEvent) => {\n // Handle keyboard events when focus is anywhere in the list (including radio buttons)\n // Only handle if the target is a radio button or list item\n const target = e.target as HTMLElement\n const isRadioButton = target.tagName === 'INPUT' && (target as HTMLInputElement).type === 'radio'\n const isListItem = target.closest('li[role=\"option\"]')\n if (isRadioButton || isListItem) {\n handleInputKeyDown(e)\n }\n}\n\nconst handleInputKeyDown = (e: KeyboardEvent) => {\n if (!dropdownVisible.value && displayedItems.value.length > 0) {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n e.preventDefault()\n dropdownVisible.value = true\n focusedIndex.value = 0\n setTimeout(() => {\n const firstRadioButton = document.getElementById(`search-select-radio-0`) as HTMLInputElement\n if (firstRadioButton) {\n firstRadioButton.focus()\n firstRadioButton.setAttribute('checked', 'true')\n }\n }, 0)\n return\n }\n }\n\n if (!dropdownVisible.value) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n e.stopPropagation()\n if (focusedIndex.value < displayedItems.value.length - 1) {\n focusedIndex.value++\n } else {\n focusedIndex.value = 0\n }\n break\n\n case 'ArrowUp':\n e.preventDefault()\n e.stopPropagation()\n if (focusedIndex.value > 0) {\n focusedIndex.value--\n } else {\n focusedIndex.value = displayedItems.value.length - 1\n }\n break\n\n case 'Enter':\n e.preventDefault()\n if (focusedIndex.value >= 0 && focusedIndex.value < displayedItems.value.length) {\n const focusedItem = displayedItems.value[focusedIndex.value]\n if (focusedItem) {\n handleClick(e, focusedItem)\n }\n } else if (displayedItems.value.length === 1) {\n const onlyItem = displayedItems.value[0]\n if (onlyItem) {\n handleClick(e, onlyItem)\n }\n }\n break\n\n case 'Escape':\n e.preventDefault()\n dropdownVisible.value = false\n focusedIndex.value = -1\n const input = document.getElementById(inputId) as HTMLInputElement\n input?.focus()\n break\n\n case 'Tab':\n // Let default tab behavior handle focus navigation\n // When list is open, first list-item has tabindex=\"0\" so Tab will go there\n // When list is closed, Tab will go to next element normally\n if (!dropdownVisible.value) {\n dropdownVisible.value = false\n focusedIndex.value = -1\n }\n break\n }\n}\n\nonMounted(() => {\n if (props.initialValue) {\n searchTerm.value = props.initialValue\n valid.value = 'true'\n }\n\n window.addEventListener('mouseup', onClickOutside as EventListener)\n\n nextTick(() => {\n const input = document.getElementById(inputId)\n if (input) {\n input.addEventListener('keydown', handleInputKeyDown)\n input.addEventListener('focus', handleInputFocus)\n }\n })\n\n filterAndPaginate()\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('mouseup', onClickOutside as EventListener)\n const input = document.getElementById(inputId)\n if (input) {\n input.removeEventListener('keydown', handleInputKeyDown)\n input.removeEventListener('focus', handleInputFocus)\n }\n})\n</script>\n\n<template>\n <div ref=\"componentRef\" class=\"fds-search-select block mb-6\">\n <div class=\"relative block\">\n <div v-if=\"!singleItemName.length\" class=\"relative\">\n <div class=\"relative\">\n <FdsInput\n :label=\"label\"\n :meta=\"meta ?? undefined\"\n :labelLeft=\"labelLeft\"\n class=\"relative mb-0! w-full!\"\n :valid=\"valid\"\n :invalidMessage=\"invalidMessage\"\n :disabled=\"disabled\"\n :locale=\"locale\"\n type=\"search\"\n :value=\"searchTerm\"\n :id=\"inputId\"\n :clearButton=\"!!searchTerm\"\n :mask=\"pidMask\"\n :maskOptions=\"{ lazy: true }\"\n @input=\"handleInput\"\n @clearInput=\"handleClear\"\n />\n <FdsIcon\n v-if=\"!disabled && !hasInputValue\"\n name=\"search\"\n :size=\"24\"\n class=\"absolute right-3 bottom-6 translate-y-1/2 fill-blue-500\"\n />\n </div>\n </div>\n <div v-else>\n <div class=\"font-bold mb-2 tracking-wide\">{{ singleItemLabel }}</div>\n <div>{{ singleItemName }}</div>\n </div>\n\n <!-- Dropdown List -->\n <div\n v-if=\"dropdownVisible && !singleItemName.length && !disabled\"\n :class=\"listWrapperClasses\"\n :style=\"listWrapperStyle\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"false\"\n aria-controls=\"select-dropdown\"\n >\n <!-- Loading -->\n <div v-if=\"loading\" class=\"flex justify-center p-4\">\n <FdsSpinner color=\"blue\" size=\"48px\" />\n </div>\n\n <!-- Results -->\n <template v-else-if=\"displayedItems && displayedItems.length\">\n <!-- Header -->\n <div\n v-if=\"searchTerm && searchTerm.length\"\n class=\"block m-0 font-light p-6 border-b border-gray-200 rounded-t-md\"\n >\n {{ displayedItems.length }} {{ searchContext.linkWord }} {{ totalCount }}\n {{ searchContext.context }}\n </div>\n <div v-else-if=\"!searchTerm.length\" class=\"block m-0 font-light p-4 border-b border-gray-200 rounded-t-md\">\n {{ totalCount }} {{ searchContext.context }}\n </div>\n\n <!-- List -->\n <ul class=\"block m-0 list-none p-0\" role=\"listbox\" id=\"select-dropdown\" @keydown=\"handleListKeyDown\">\n <li\n v-for=\"(item, index) in displayedItems\"\n :key=\"index\"\n :id=\"`search-select-item-${index}`\"\n class=\"block m-0 hover:outline-none focus:outline-2 focus:outline-blue-500 -outline-offset-2\"\n :class=\"[focusedIndex === index && 'outline-dashed outline-2 outline-blue-500 -outline-offset-2 ']\"\n role=\"option\"\n :aria-selected=\"focusedIndex === index\"\n :tabindex=\"dropdownVisible && focusedIndex === index ? 0 : -1\"\n @mouseup=\"(e) => handleClick(e, item)\"\n @mouseenter=\"focusedIndex = index\"\n @keydown.enter=\"(e) => handleClick(e, item)\"\n @keydown.space.prevent=\"(e) => handleClick(e, item)\"\n >\n <input\n type=\"radio\"\n :id=\"`search-select-radio-${index}`\"\n name=\"social-account\"\n class=\"absolute left-0 opacity-0\"\n :checked=\"focusedIndex === index\"\n :key=\"`radio-${index}-${focusedIndex}`\"\n tabindex=\"-1\"\n />\n <label\n :for=\"`search-select-radio-${index}`\"\n class=\"block p-4 text-gray-700 cursor-pointer no-underline\"\n :class=\"listItemClasses\"\n v-html=\"handleMatchingString(item)\"\n ></label>\n </li>\n </ul>\n\n <!-- Pagination -->\n <FdsPagination\n v-if=\"page !== undefined && totalPages !== null && totalPages > 1\"\n :current=\"page\"\n :max=\"totalPages\"\n @paginate=\"handlePagination\"\n class=\"my-4! px-2\"\n />\n </template>\n\n <!-- No Results -->\n <ul v-else-if=\"!loading\" class=\"block m-0 list-none p-0\">\n <li class=\"p-4\">\n {{ noResultPrompt }}\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsStickerProps } from './types'\n\nconst props = withDefaults(defineProps<FdsStickerProps>(), {\n variant: 'blue',\n bullet: false,\n})\n\nconst stickerClasses = computed(() => [\n 'inline-block font-bold text-sm leading-[18px] tracking-normal py-0.5 px-3 rounded-xl border border-transparent whitespace-nowrap max-w-full',\n props.bullet\n ? 'text-base! bg-transparent flex-wrap justify-start items-baseline text-base font-normal text-gray-700 border-transparent p-0 mr-3'\n : '',\n // Variant colors\n props.variant === 'blue' && !props.bullet && 'bg-blue-600 text-white',\n props.variant === 'green' && !props.bullet && 'bg-green-700 text-white',\n props.variant === 'red' && !props.bullet && 'bg-red-600 text-white',\n props.variant === 'yellow' && !props.bullet && 'bg-yellow-200 text-gray-700 border-yellow-300',\n props.variant === 'gray' && !props.bullet && 'bg-gray-200 text-gray-700 border-gray-300!',\n props.variant === 't_blue' && !props.bullet && 'bg-blue_t-100 text-gray-700 border-blue_t-200!',\n])\n\nconst bulletDotClasses = computed(() => [\n 'inline-block w-3 h-3 rounded-full mr-1.5',\n // Bullet dot colors\n props.variant === 'blue' && 'bg-blue-600',\n props.variant === 'green' && 'bg-green-700',\n props.variant === 'red' && 'bg-red-600',\n props.variant === 'yellow' && 'bg-yellow-200 border border-yellow-300',\n props.variant === 'gray' && 'bg-gray-400',\n props.variant === 't_blue' && 'bg-blue-200 border border-blue-300',\n])\n</script>\n\n<template>\n <span :class=\"stickerClasses\">\n <span\n v-if=\"bullet\"\n :class=\"bulletDotClasses\"\n ></span>\n <slot />\n </span>\n</template>\n","import type { FdsTreeNode } from './types'\n\nconst getTitleFromProperties = (node: FdsTreeNode, titleTemplate?: string) => {\n if (!titleTemplate) {\n return node.title\n }\n\n const template = titleTemplate ?? ''\n\n // Extract all occurrences of content inside [[]] in the template string\n const templateVariables = extractTemplateVariables(template)\n\n // Replace template variables with actual values\n let result = template\n templateVariables.forEach((variable) => {\n const value = getNodePropertyValue(node, variable)\n const regex = new RegExp(`\\\\[\\\\[${variable.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\]\\\\]`, 'g')\n result = result.replace(regex, value)\n })\n\n return result\n}\n\n/**\n * Extract all occurrences of content inside [[]] in a string\n * @param template - The template string containing [[]] placeholders\n * @returns Array of variable names found in the template\n */\nconst extractTemplateVariables = (template: string): string[] => {\n const regex = /\\[\\[([^\\]]+)\\]\\]/g\n const matches: string[] = []\n let match\n\n while ((match = regex.exec(template)) !== null) {\n if (match[1]) {\n matches.push(match[1])\n }\n }\n\n return matches\n}\n\n/**\n * Get property value from node object\n * @param node - The tree node\n * @param property - The property name to extract\n * @returns The property value as string\n */\nconst getNodePropertyValue = (node: FdsTreeNode, property: string): string => {\n // Handle direct properties\n if (property in node) {\n const value = node[property as keyof FdsTreeNode]\n return value ? String(value) : ''\n }\n\n // Handle nested data properties\n if (node.data && typeof node.data === 'object') {\n const dataRecord = node.data as Record<string, unknown>\n const dataValue = dataRecord[property]\n if (dataValue !== undefined && dataValue !== null) {\n return String(dataValue)\n }\n }\n\n // Return empty string if property not found\n return ''\n}\n\nexport { getTitleFromProperties }\n","import { computed, reactive, ref, watch } from 'vue'\nimport type { FdsIconName } from '../FdsIcon/types'\nimport type { FdsTreeNode, FdsTreeNodeArray, FdsTreeNodeItem } from './types'\nimport { getTitleFromProperties } from './utils'\n\ninterface TreeStateOptions {\n expandChildrenOnParentCheck?: boolean\n expandAllChildrenOnParentCheck?: boolean\n showIndeterminateOnlyOnChildrenSelection?: boolean\n searchExpandNodes?: boolean\n titleTemplate?: string\n searchInputTriggerLength?: number\n nodes?: FdsTreeNodeArray\n}\n\nconst useTreeState = (options: TreeStateOptions = {}) => {\n /** Default the trigger length to 1 when not provided */\n const triggerLength = options?.searchInputTriggerLength ?? 1\n /**\n * The set of selected nodes\n */\n const selectedNodes = reactive<Set<FdsTreeNode['nodeId']>>(new Set())\n /**\n * The array of selected node objects\n */\n const selectedNodeObjects = reactive<FdsTreeNode[]>([])\n /**\n * The set of expanded nodes\n */\n const expandedNodes = reactive<Set<FdsTreeNode['nodeId']>>(new Set())\n /**\n * The search term for filtering nodes\n */\n const searchTerm = ref<string>('')\n\n /**\n * If no results are found for the search term\n */\n const isEmptySearchResult = ref<boolean>(false)\n\n // Watch for search term changes to update empty result flag\n watch(searchTerm, (newTerm) => {\n if (!newTerm.trim() || newTerm.length < triggerLength) {\n isEmptySearchResult.value = false\n } else if (options.nodes && options.nodes.length > 0) {\n // Check if there are any results for the new search term\n // The tree structure has a root node with children, so we need to check the root's children\n const rootNode = options.nodes[0]\n const nodesToCheck = rootNode?.children || []\n const filtered = filterNodesRecursive(nodesToCheck, newTerm, ['title', 'nodeId'])\n isEmptySearchResult.value = filtered.length === 0\n }\n })\n\n /**\n * Clears all selected nodes. Can be used to reset the selections to the initial state.\n */\n const clearAllSelectedNodes = () => {\n selectedNodes.clear()\n selectedNodeObjects.length = 0\n }\n\n /**\n * Collapses all expanded nodes. Can be used to reset the tree to the initial state.\n */\n const collapseAllExpandedNodes = () => expandedNodes.clear()\n\n /**\n * Returns true if the node is selected\n */\n const isNodeSelected = (nodeId: FdsTreeNode['nodeId']) => selectedNodes.has(nodeId)\n\n /**\n * Returns true if the node is expanded\n */\n const isNodeExpanded = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.has(nodeId)\n\n /**\n * Expands the specific node\n */\n const expandNode = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.add(nodeId)\n\n /**\n * Collapses the specific node\n */\n const collapseNode = (nodeId: FdsTreeNode['nodeId']) => expandedNodes.delete(nodeId)\n /**\n * Selects the specific node and adds it to the selectedNodeObjects array.\n * Used to access the node object and it's underlying data\n */\n const injectNode = (nodeObject: FdsTreeNode) => {\n // Prevent duplicates\n if (selectedNodes.has(nodeObject.nodeId)) return\n\n selectedNodes.add(nodeObject.nodeId)\n if (!selectedNodeObjects.some((n) => n.nodeId === nodeObject.nodeId)) {\n selectedNodeObjects.push(nodeObject)\n }\n }\n\n /**\n * Expands all children of the specific node\n */\n const expandAllChildren = (node: FdsTreeNode) => {\n expandNode(node.nodeId)\n if (node.children && node.children.length > 0) {\n node.children.forEach(expandAllChildren)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectAllChildren = (node: FdsTreeNode) => {\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n\n // Inject the current node\n injectNode(node)\n\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n\n // Only expand children if the option is enabled\n if (options.expandChildrenOnParentCheck) {\n expandAllChildren(node)\n }\n }\n\n /**\n * Selects this node and recursively selects all children nodes\n */\n const selectNodeAndAllChildren = (nodeId: FdsTreeNode['nodeId']) => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return\n\n // Select the current node\n injectNode(node)\n\n // Deselect all children to avoid duplicates\n if (node.children && node.children.length > 0) {\n node.children.forEach(selectAllChildren)\n }\n }\n\n /**\n * Deselects the specific node\n */\n const deselectNode = (nodeId: FdsTreeNode['nodeId']) => {\n selectedNodes.delete(nodeId)\n const index = selectedNodeObjects.findIndex((node) => node.nodeId === nodeId)\n\n if (index > -1) {\n selectedNodeObjects.splice(index, 1)\n }\n }\n\n /**\n * Deselects this node and recursively deselects all children nodes\n */\n const deselectNodeAndAllChildren = (node: FdsTreeNode) => {\n // Remove the current node\n deselectNode(node.nodeId)\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n }\n\n /**\n * Deselects only the children of the specific node\n */\n const deselectChildrenOnly = (nodeId: FdsTreeNode['nodeId']) => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return\n\n // Ensure parent remains selected\n selectedNodes.add(node.nodeId)\n if (!selectedNodeObjects.some((n) => n.nodeId === node.nodeId)) {\n selectedNodeObjects.push(node)\n }\n\n // Recursively remove all children\n if (node.children && node.children.length > 0) {\n node.children.forEach(deselectNodeAndAllChildren)\n }\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeById = (nodes: FdsTreeNodeArray, nodeId: string): FdsTreeNodeItem | null => {\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Finds a node by ID\n */\n const findNodeObjectById = (nodeId: string): FdsTreeNodeItem | null => {\n const nodes = Array.isArray(options.nodes) ? options.nodes : []\n for (const node of nodes) {\n if (node.nodeId === nodeId) {\n return node\n }\n if (node.children) {\n const found = findNodeById(node.children, nodeId)\n if (found) return found\n }\n }\n return null\n }\n\n /**\n * Checks if a node has children\n */\n const hasChildrenNodes = (nodes: FdsTreeNodeArray) => nodes.length > 0\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentOrChildrenSelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node || !hasChildrenNodes(node.children || [])) return false\n\n return selectedNodes.has(node.nodeId) || isAnyChildSelected(node.children || [])\n }\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentAndAllChildrenSelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node) return false\n // Parent must be selected and all children\n return selectedNodes.has(node.nodeId) && isEveryChildSelected(node)\n }\n\n /**\n * Checks if a parent or it's children are selected\n */\n const isParentOnlySelected = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n\n if (!node || !hasChildrenNodes(node.children || [])) return false\n\n return !isAnyChildSelected(node.children || []) && selectedNodes.has(node.nodeId)\n }\n\n /**\n * Returns true if ALL children of a node are selected\n */\n const isEveryChildSelected = (node: FdsTreeNode): boolean => {\n if (!node.children || node.children.length === 0) return true\n\n return node.children.every((child) => selectedNodes.has(child.nodeId) && isEveryChildSelected(child))\n }\n\n /**\n * Checks if any child of a node is selected\n */\n const isAnyChildSelected = (nodes: FdsTreeNodeArray): boolean => {\n if (!nodes || nodes.length === 0) return false\n return nodes.some(\n (child) => selectedNodes.has(child.nodeId) || (child.children && isAnyChildSelected(child.children)),\n )\n }\n\n /**\n * Checks if a node is indeterminate (partially selected)\n */\n const isNodeIndeterminate = (nodes: FdsTreeNodeArray, parentNodeId?: string): boolean => {\n if (!hasChildrenNodes(nodes)) return false\n\n // Check each child's state\n const childStates = nodes.map((node) => ({\n isSelected: selectedNodes.has(node.nodeId),\n isIndeterminate:\n node.children && node.children.length > 0 ? isNodeIndeterminate(node.children, node.nodeId) : false,\n }))\n\n const hasSelected = childStates.some((child: { isSelected: boolean; isIndeterminate: boolean }) => child.isSelected)\n const hasUnselected = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => !child.isSelected && !child.isIndeterminate,\n )\n const hasIndeterminate = childStates.some(\n (child: { isSelected: boolean; isIndeterminate: boolean }) => child.isIndeterminate,\n )\n\n // If parent is selected, never show indeterminate\n if (parentNodeId && selectedNodes.has(parentNodeId)) return false\n\n // Standard behavior: some selected + some unselected, OR any child is indeterminate\n if (!options.showIndeterminateOnlyOnChildrenSelection) {\n return (hasSelected && hasUnselected) || hasIndeterminate\n }\n\n // Special behavior: any child selected OR any child indeterminate\n return hasSelected || hasIndeterminate\n }\n\n const isNodeIndeterminateById = (nodeId: FdsTreeNode['nodeId']): boolean => {\n const node = findNodeObjectById(nodeId)\n if (!node) return false\n return isNodeIndeterminate(node.children || [], nodeId)\n }\n\n /**\n * Toggles the selection state of the specific node\n */\n const toggleSelectNode = (nodeId: string, title?: string, data?: Record<string, unknown>) => {\n let node = findNodeObjectById(nodeId)\n\n if (!node && nodeId) {\n node = {\n nodeId,\n title,\n children: [],\n data,\n }\n }\n\n if (!node) return\n\n if (selectedNodes.has(nodeId)) {\n deselectNodeAndAllChildren(node)\n } else {\n selectAllChildren(node)\n\n if (selectedNodes.has(nodeId) && !expandedNodes.has(nodeId) && options.expandChildrenOnParentCheck) {\n expandNode(nodeId)\n }\n }\n }\n\n /**\n * Toggles the expansion state of the specific node\n */\n const toggleExpandNode = (nodeId: FdsTreeNode['nodeId']) => {\n if (isNodeExpanded(nodeId)) {\n collapseNode(nodeId)\n } else {\n expandNode(nodeId)\n }\n }\n\n /**\n * Gets the icons for expanded and collapsed nodes\n */\n const getNodeIcon = (nodeId: FdsTreeNode['nodeId'], expandIcon: FdsIconName, collapseIcon: FdsIconName) =>\n isNodeExpanded(nodeId) ? collapseIcon : expandIcon\n\n /**\n * Checks if a node matches the search term by searching through specified properties\n */\n const nodeMatchesSearch = (node: FdsTreeNode, term: string, searchParams?: string[]): boolean => {\n if (!term.trim()) return true\n if (!searchParams || !Array.isArray(searchParams)) return false\n\n const normalizeForSearch = (value: unknown): string => {\n const s = String(value ?? '')\n return s\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n }\n\n const searchLower = normalizeForSearch(term)\n\n const getValueByPath = (obj: unknown, path: string): unknown => {\n if (!obj) return undefined\n // If data is an array, check each element\n if (Array.isArray(obj)) {\n for (const item of obj) {\n const v = getValueByPath(item as Record<string, unknown>, path)\n if (v !== undefined && v !== null) return v\n }\n return undefined\n }\n if (typeof obj !== 'object') return undefined\n const segments = path.split('.')\n let current: unknown = obj as Record<string, unknown>\n for (const seg of segments) {\n if (current && typeof current === 'object' && seg in (current as Record<string, unknown>)) {\n current = (current as Record<string, unknown>)[seg]\n } else {\n return undefined\n }\n }\n return current\n }\n\n for (const rawParam of searchParams) {\n const param = rawParam.startsWith('data.') ? rawParam.slice(5) : rawParam\n if (param === 'title') {\n const renderedTitle = getTitleFromProperties(node, options?.titleTemplate)\n const titleToMatch = normalizeForSearch(renderedTitle || node.title)\n if (titleToMatch.includes(searchLower)) return true\n }\n if (param === 'nodeId' && normalizeForSearch(node.nodeId).includes(searchLower)) return true\n\n const dataSource = node.data as unknown\n if (Array.isArray(dataSource)) {\n for (const item of dataSource) {\n const v = getValueByPath(item, param)\n if (v !== undefined && v !== null) {\n try {\n if (normalizeForSearch(v).includes(searchLower)) return true\n } catch {}\n }\n }\n } else {\n const value = getValueByPath(dataSource, param)\n if (value !== undefined && value !== null) {\n try {\n if (normalizeForSearch(value).includes(searchLower)) return true\n } catch {}\n }\n }\n }\n\n return false\n }\n\n /**\n * Internal recursive filtering function\n */\n const filterNodesRecursive = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): FdsTreeNodeArray => {\n if (!term.trim()) return nodes\n\n const filtered: FdsTreeNodeArray = []\n\n for (const node of nodes) {\n const nodeMatches = nodeMatchesSearch(node, term, searchParams)\n const filteredChildren = node.children ? filterNodesRecursive(node.children, term, searchParams) : []\n\n // Include node if it matches OR has matching children\n if (nodeMatches || filteredChildren.length > 0) {\n filtered.push({\n ...node,\n children: filteredChildren.length > 0 ? filteredChildren : node.children,\n })\n }\n }\n\n return filtered\n }\n\n /**\n * Counts how many nodes match the search term across the provided subtree.\n */\n const countMatchingNodesRecursive = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): number => {\n if (!Array.isArray(nodes) || nodes.length === 0) return 0\n if (!term.trim()) return nodes.length\n\n let count = 0\n for (const node of nodes) {\n if (nodeMatchesSearch(node, term, searchParams)) count += 1\n if (node.children && node.children.length > 0) {\n count += countMatchingNodesRecursive(node.children, term, searchParams)\n }\n }\n return count\n }\n\n /**\n * Counts all nodes in the provided subtree.\n */\n const countAllNodesRecursive = (nodes: FdsTreeNodeArray): number => {\n if (!Array.isArray(nodes) || nodes.length === 0) return 0\n let count = 0\n for (const node of nodes) {\n count += 1\n if (node.children && node.children.length > 0) {\n count += countAllNodesRecursive(node.children)\n }\n }\n return count\n }\n\n /**\n * Filters nodes based on search term, including children that match\n */\n const filterNodes = (nodes: FdsTreeNodeArray, term: string, searchParams?: string[]): FdsTreeNodeArray => {\n if (!term.trim() || term.length < triggerLength) {\n return nodes\n }\n\n const filtered = filterNodesRecursive(nodes, term, searchParams)\n\n return filtered\n }\n\n /**\n * Sets the search term\n */\n const setSearchTerm = (term: string) => {\n searchTerm.value = term\n if (!term.trim() || term.length < triggerLength) {\n isEmptySearchResult.value = false\n }\n }\n\n /**\n * Clears the search term\n */\n const clearSearch = () => {\n searchTerm.value = ''\n isEmptySearchResult.value = false\n }\n\n /**\n * Reactive total count of nodes matching the current search term.\n * If there is no term, returns total nodes under the root's children.\n */\n const filteredMatchCount = computed<number>(() => {\n const t = String(searchTerm.value || '').trim()\n const rootNode = Array.isArray(options.nodes) && options.nodes.length > 0 ? options.nodes[0] : null\n const nodesToCheck = rootNode?.children || []\n if (!rootNode) return 0\n if (!t || t.length < triggerLength) {\n return countAllNodesRecursive(nodesToCheck)\n }\n return countMatchingNodesRecursive(nodesToCheck, t, ['title', 'nodeId'])\n })\n\n /**\n * Reactive total node count under the root's children.\n */\n const totalNodeCount = computed<number>(() => {\n const rootNode = Array.isArray(options.nodes) && options.nodes.length > 0 ? options.nodes[0] : null\n const nodesToCheck = rootNode?.children || []\n if (!rootNode) return 0\n return countAllNodesRecursive(nodesToCheck)\n })\n\n /**\n * Returns HTML string with hits from search term wrapped in <strong>.\n */\n const highlightText = (text: string | undefined, term: string | undefined): string => {\n const source = String(text ?? '')\n const t = String(term ?? '').trim()\n if (!t) return source\n try {\n const re = new RegExp(t.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'ig')\n return source.replace(re, '<strong>$&</strong>')\n } catch {\n return source\n }\n }\n\n return {\n triggerLength,\n clearSearch,\n collapseAllExpandedNodes,\n collapseNode,\n deselectNodeAndAllChildren,\n deselectChildrenOnly,\n deselectNode,\n expandAllChildren,\n expandedNodes,\n expandNode,\n filterNodes,\n getNodeIcon,\n injectNode,\n isNodeExpanded,\n isNodeIndeterminate,\n isNodeIndeterminateById,\n isNodeSelected,\n isParentOrChildrenSelected,\n isParentAndAllChildrenSelected,\n highlightText,\n searchTerm,\n filteredMatchCount,\n totalNodeCount,\n selectAllChildren,\n selectedNodeObjects,\n selectedNodes,\n setSearchTerm,\n toggleExpandNode,\n toggleSelectNode,\n isParentOnlySelected,\n selectNodeAndAllChildren,\n clearAllSelectedNodes,\n isEmptySearchResult,\n }\n}\n\nexport default useTreeState\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed, nextTick, watch } from 'vue'\nimport type { FdsCheckboxProps } from './types'\n\n// Support v-model as boolean (single checkbox) or array (checkbox group)\n// Also support :checked prop for backward compatibility\nconst modelValue = defineModel<boolean | Array<string | number>>({\n default: undefined,\n required: false,\n})\n\nconst props = withDefaults(defineProps<FdsCheckboxProps>(), {\n label: undefined,\n checked: false,\n indeterminate: false,\n disabled: false,\n value: undefined,\n name: undefined,\n id: undefined,\n required: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', value: boolean): void\n (e: 'input', value: boolean): void\n (e: 'update:checked', value: boolean): void\n}>()\n\nconst wrapperClasses = computed(() => ['block relative flex items-center mb-2 last:mb-0'])\nconst innerWrapperClasses = computed(() => [\n 'flex p-0.5 items-start rounded-md',\n 'hover:bg-blue_t-100 active:bg-blue_t-200',\n '[&:has(:focus-visible)]:outline-2 [&:has(:focus-visible)]:outline-dashed [&:has(:focus-visible)]:-outline-offset-2 [&:has(:focus-visible)]:outline-blue-500',\n props.disabled && 'hover:bg-transparent active:bg-transparent',\n])\n\nconst checkboxClasses = computed(() => [\n 'rounded-md transition-colors duration-200 accent-blue-500 m-[3px]',\n 'peer z-2 bg-white min-w-[18px] min-h-[18px] focus-visible:outline-none',\n props.disabled && 'cursor-not-allowed',\n])\n\nconst autoId = `fds-checkbox-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst hasLabelSlot = useHasSlot()\n\n// Bridge for v-model (boolean or array) or :checked prop\nconst internalChecked = computed<boolean>({\n get: () => {\n if (modelValue.value === undefined) {\n return props.checked\n }\n // If modelValue is an array, check if this checkbox's value is in it\n if (Array.isArray(modelValue.value)) {\n return props.value !== undefined && modelValue.value.includes(props.value)\n }\n // Otherwise treat as boolean\n return modelValue.value as boolean\n },\n set: (checked: boolean) => {\n if (modelValue.value === undefined) {\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n return\n }\n\n // If modelValue is an array, add/remove this checkbox's value\n if (Array.isArray(modelValue.value)) {\n if (props.value === undefined) {\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n return\n }\n\n const newArray = [...modelValue.value]\n if (checked) {\n // Add value if not already present\n if (!newArray.includes(props.value)) {\n newArray.push(props.value)\n }\n } else {\n // Remove value if present\n const index = newArray.indexOf(props.value)\n if (index > -1) {\n newArray.splice(index, 1)\n }\n }\n modelValue.value = newArray\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n } else {\n // Boolean mode\n modelValue.value = checked\n emit('update:checked', checked)\n emit('change', checked)\n emit('input', checked)\n }\n },\n})\n\n// Set indeterminate state when prop changes\nfunction setIndeterminate() {\n const checkbox = document.getElementById(inputId.value) as HTMLInputElement\n if (checkbox) {\n checkbox.indeterminate = props.indeterminate\n }\n}\n\n// Watch for indeterminate prop changes\nwatch(\n () => props.indeterminate,\n () => {\n nextTick(() => setIndeterminate())\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <label\n :for=\"inputId\"\n :class=\"[innerWrapperClasses, { 'cursor-not-allowed': disabled }]\"\n v-bind=\"$attrs\"\n >\n <input\n :id=\"inputId\"\n :name=\"name\"\n :value=\"value\"\n v-model=\"internalChecked\"\n :disabled=\"disabled\"\n :required=\"required\"\n type=\"checkbox\"\n :class=\"[checkboxClasses]\"\n />\n <span\n v-if=\"hasLabelSlot || label\"\n class=\"relative inline-block leading-6 pl-1 select-none\"\n :class=\"{ 'cursor-not-allowed': disabled }\"\n >\n <template v-if=\"hasLabelSlot\">\n <slot></slot>\n </template>\n <template v-else-if=\"label\">\n {{ label }}\n </template>\n </span>\n </label>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed } from 'vue'\nimport type { FdsRadioProps } from './types'\n\n// Support v-model for selected value in a radio group (string|number)\nconst modelValue = defineModel<string | number>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsRadioProps>(), {\n label: undefined,\n checked: false,\n disabled: false,\n value: undefined,\n name: undefined,\n id: undefined,\n required: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string | number): void\n (e: 'change', value: string | number): void\n (e: 'input', value: string | number): void\n}>()\n\nconst autoId = `fds-radio-${Math.random().toString(36).slice(2, 9)}`\nconst inputId = computed(() => props.id ?? autoId)\n\nconst hasLabelSlot = useHasSlot()\n\n// Proxy for v-model on radio groups: binds the selected value (string|number)\nconst radioModel = computed({\n get() {\n return modelValue.value\n },\n set(newChecked: string | number) {\n emit('update:modelValue', newChecked)\n emit('change', newChecked)\n emit('input', newChecked)\n },\n})\n\nconst wrapperClasses = computed(() => ['block relative flex items-center mb-2 last:mb-0'])\nconst innerWrapperClasses = computed(() => [\n 'flex p-0.5 items-start rounded-l-xl rounded-r-md',\n 'hover:bg-blue_t-100 active:bg-blue_t-200',\n '[&:has(:focus-visible)]:outline-2 [&:has(:focus-visible)]:outline-dashed [&:has(:focus-visible)]:-outline-offset-2 [&:has(:focus-visible)]:outline-blue-500',\n props.disabled && 'hover:bg-transparent active:bg-transparent',\n])\n\nconst inputClasses = computed(() => [\n 'peer z-2 bg-white min-w-[20px] min-h-[20px] focus-visible:outline-none rounded-full accent-blue-500',\n props.disabled && 'cursor-not-allowed',\n])\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <label\n :for=\"inputId\"\n :class=\"[innerWrapperClasses, { 'cursor-not-allowed': disabled }]\"\n v-bind=\"$attrs\"\n >\n <input\n :id=\"inputId\"\n :name=\"name\"\n :value=\"value\"\n v-model=\"radioModel\"\n :disabled=\"disabled\"\n :required=\"required\"\n type=\"radio\"\n :class=\"inputClasses\"\n class=\"m-[2px]\"\n />\n <span\n v-if=\"hasLabelSlot || label\"\n class=\"relative inline-block leading-6 pl-1 select-none\"\n :class=\"{ 'cursor-not-allowed': disabled }\"\n >\n <template v-if=\"hasLabelSlot\">\n <slot></slot>\n </template>\n <template v-else-if=\"label\">\n {{ label }}\n </template>\n </span>\n </label>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject, nextTick, reactive, ref, watch } from 'vue'\nimport FdsButtonIcon from '../Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsCheckbox from '../Form/FdsCheckbox/FdsCheckbox.vue'\nimport FdsRadio from '../Form/FdsRadio/FdsRadio.vue'\nimport type { FdsTreeViewProps } from './types'\nimport useTreeState from './useTreeState'\nimport { getTitleFromProperties } from './utils'\n\ntype Props<T = Record<string, unknown>> = FdsTreeViewProps<T>\n\nconst props = withDefaults(defineProps<Props>(), {\n nodes: () => [],\n depth: 0,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n searchHighlighting: false,\n})\n\ndefineOptions({\n name: 'TreeNode',\n})\n\nconst injectedTreeState = inject<ReturnType<typeof useTreeState> | null>('treeState', null)\nconst treeState = injectedTreeState!\nconst expandedNodes = treeState?.expandedNodes ?? reactive(new Set())\n\nconst childrenToggleAriaLabel = (title: string) => {\n const hasChildren = hasChildrenNodes.value\n const isExpanded = expandedNodes.has(props.nodeId)\n if (hasChildren && isExpanded) {\n return `Fäll ihop ${title}`\n }\n return `Fäll ut ${title}`\n}\n\nconst hasChildrenNodes = computed(() => {\n const nodesToCheck = props.searchEnabled && treeState?.searchTerm?.value ? filteredNodes.value : props.nodes\n return Array.isArray(nodesToCheck) && nodesToCheck.length > 0\n})\n\nconst indentValue = props.depth * props.indentation\n\nconst indent = computed(() => ({\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n paddingLeft: `${indentValue + (hasChildrenNodes.value ? 0 : 4)}px`,\n}))\n\nconst filteredNodes = computed(() => {\n const t = String(treeState?.searchTerm?.value || '').trim()\n if (!props.searchEnabled || !t || t.length < (treeState?.triggerLength ?? 1)) {\n return props.nodes\n }\n return treeState.filterNodes(props.nodes, t, props.searchMatchParams)\n})\n\nconst trimmedSearchTerm = computed(() => String(treeState?.searchTerm?.value || '').trim())\nconst meetsSearchTrigger = computed(() => trimmedSearchTerm.value.length >= (treeState?.triggerLength ?? 1))\nconst isSearchActive = computed(() => props.searchEnabled && meetsSearchTrigger.value)\nconst shouldHighlightSearch = computed(() => props.searchHighlighting && isSearchActive.value)\nconst childCount = computed(() => {\n if (!props.showChildrenCount || !hasChildrenNodes.value) return null\n return isSearchActive.value ? (filteredNodes.value?.length ?? 0) : props.nodes.length\n})\n\n// Auto-expand current node if search is active and it has matching children\nwatch(\n () => ({\n enabled: props.searchEnabled,\n expandOnSearch: props.searchExpandNodes,\n term: treeState?.searchTerm?.value,\n count: (filteredNodes.value || []).length,\n }),\n ({ enabled, expandOnSearch, term, count }) => {\n if (!enabled || !expandOnSearch) return\n const t = String(term || '').trim()\n if (!t || t.length < (treeState?.triggerLength ?? 1)) return\n if (typeof count === 'number' && count > 0) {\n expandedNodes.add(props.nodeId)\n }\n },\n)\n\nconst isOpen = ref(false)\nconst triggerRef = ref<HTMLElement | null>(null)\nconst popoverPanelRef = ref<HTMLElement | null>(null)\nconst popoverCoords = reactive({ bottom: 0, right: 0, left: 0, top: 0 })\n\nconst popoverWidth = 327\nconst popoverHeight = 80\n\nconst computePopoverCoords = () => {\n const componentInstance = triggerRef.value\n if (!componentInstance) return\n // Get the actual DOM element from the Vue component instance\n const triggerEl = '$el' in componentInstance ? (componentInstance as { $el: HTMLElement }).$el : componentInstance\n if (!(triggerEl instanceof HTMLElement)) return\n const rect = triggerEl.getBoundingClientRect()\n popoverCoords.bottom = Math.round(rect.bottom)\n popoverCoords.right = Math.round(rect.right)\n popoverCoords.left = Math.round(rect.left)\n popoverCoords.top = Math.round(rect.top)\n}\n\nconst openPopover = async () => {\n computePopoverCoords()\n isOpen.value = true\n window.addEventListener('scroll', computePopoverCoords, true)\n window.addEventListener('resize', computePopoverCoords)\n document.addEventListener('pointerdown', handleGlobalPointerDown, { passive: true })\n document.addEventListener('keydown', handleGlobalKeydown)\n\n // Focus first radio inside the popover for immediate keyboard use\n await nextTick()\n const firstRadio = popoverPanelRef.value?.querySelector('input[type=\"radio\"]') as HTMLInputElement | null\n firstRadio?.focus()\n}\n\nconst closePopover = () => {\n isOpen.value = false\n}\n\nconst onAfterPopoverLeave = () => {\n window.removeEventListener('scroll', computePopoverCoords, true)\n window.removeEventListener('resize', computePopoverCoords)\n document.removeEventListener('pointerdown', handleGlobalPointerDown)\n document.removeEventListener('keydown', handleGlobalKeydown)\n}\n\nconst togglePopover = () => {\n if (isOpen.value) closePopover()\n else openPopover()\n}\n\nconst handleGlobalPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return\n\n const hasComposedPath = (ev: Event): ev is Event & { composedPath: () => EventTarget[] } =>\n typeof (ev as { composedPath?: () => EventTarget[] }).composedPath === 'function'\n\n const clickedPath = hasComposedPath(event) ? event.composedPath() : ([] as EventTarget[])\n const contains = (el: HTMLElement | null) => (el ? clickedPath.includes(el) : false)\n\n // Extract DOM element from component instance if needed\n const getTriggerElement = (): HTMLElement | null => {\n const instance = triggerRef.value\n if (!instance) return null\n return '$el' in instance\n ? (instance as { $el: HTMLElement }).$el\n : instance instanceof HTMLElement\n ? instance\n : null\n }\n\n if (!contains(getTriggerElement()) && !contains(popoverPanelRef.value)) {\n closePopover()\n }\n}\n\nconst handleGlobalKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen.value) {\n closePopover()\n }\n}\n\nconst onPanelFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as HTMLElement | null\n const panelEl = popoverPanelRef.value\n if (!panelEl) return\n\n const triggerVal = triggerRef.value as unknown\n const triggerEl =\n triggerVal && typeof triggerVal === 'object' && '$el' in (triggerVal as Record<string, unknown>)\n ? (triggerVal as { $el: HTMLElement }).$el\n : (triggerVal as HTMLElement | null)\n\n const isButton = next?.tagName === 'BUTTON' && next?.id !== 'tree-popover-close-button'\n const isInsidePanel = !!next && panelEl.contains(next)\n const isTrigger = !!next && !!triggerEl && triggerEl.contains(next)\n\n const leavingPanel = !next || (!isInsidePanel && !isTrigger) || isButton\n if (leavingPanel) closePopover()\n}\n\nconst options = [\n { label: props.popoverLabels?.parentAndChildren, value: 'parent_and_children' },\n { label: props.popoverLabels?.parent, value: 'parent' },\n]\n\nconst currentOption = computed(() => {\n if (treeState?.isParentAndAllChildrenSelected(props.nodeId)) return 'parent_and_children'\n if (treeState?.isParentOnlySelected(props.nodeId)) return 'parent'\n return ''\n})\n\n// Ref for v-model on radio group - matches FdsRadio v-model type (string | number)\nconst selectedOption = ref<string | number>(currentOption.value)\n\n// Sync selectedOption when currentOption changes externally\nwatch(\n currentOption,\n (newValue) => {\n selectedOption.value = newValue\n },\n { immediate: true },\n)\n\n// Watch selectedOption to handle changes\nwatch(selectedOption, (newValue) => {\n if (newValue) {\n handleOptionClick(newValue as (typeof options)[number]['value'])\n }\n})\n\nconst handleOptionClick = (option: (typeof options)[number]['value']) => {\n if (option === 'parent_and_children') {\n treeState?.selectNodeAndAllChildren(props.nodeId)\n } else if (option === 'parent') {\n treeState?.deselectChildrenOnly(props.nodeId)\n }\n closePopover()\n}\n</script>\n\n<template>\n <div :class=\"props?.style?.container\">\n <div\n :style=\"indent\"\n :class=\"'pt-2 pb-2'\"\n >\n <div class=\"flex items-start\">\n <FdsButtonIcon\n v-if=\"hasChildrenNodes\"\n @click=\"treeState?.toggleExpandNode(props.nodeId)\"\n :ariaLabel=\"props.title ? childrenToggleAriaLabel(props.title) : undefined\"\n :icon=\"\n treeState?.getNodeIcon(props.nodeId, props.nodeExpandIcon, props.nodeCollapseIcon) ?? props.nodeExpandIcon\n \"\n :size=\"24\"\n class=\"fill-blue-500 mr-3 items-center\"\n />\n <div\n v-if=\"!hasChildrenNodes\"\n :style=\"{ minWidth: `${indentation}px` }\"\n />\n <div class=\"flex-1 flex\">\n <FdsCheckbox\n :id=\"`checkbox-${props.nodeId}`\"\n :checked=\"treeState?.isNodeSelected(props.nodeId)\"\n :indeterminate=\"showIndeterminate && (treeState?.isNodeIndeterminateById(props.nodeId) ?? false)\"\n @change=\"treeState?.toggleSelectNode(props.nodeId, props.title, props.data)\"\n >\n <span>\n <span\n v-if=\"shouldHighlightSearch && title\"\n v-html=\"treeState?.highlightText(title, treeState?.searchTerm?.value)\"\n />\n <span v-else>{{ title }}</span>\n </span>\n <span v-if=\"childCount !== null\"> (+{{ childCount }})</span>\n </FdsCheckbox>\n </div>\n <div\n class=\"items-center max-h-[28px]\"\n v-if=\"\n treeState?.isParentOrChildrenSelected(props.nodeId) &&\n !(treeState?.isNodeIndeterminateById(props.nodeId) ?? false)\n \"\n >\n <FdsButtonIcon\n ref=\"triggerRef\"\n icon=\"more\"\n :size=\"24\"\n @click=\"togglePopover\"\n :ariaLabel=\"`Fler val för ${title}`\"\n class=\"items-center\"\n />\n <!-- <teleport to=\"body\"> -->\n <Transition\n enter-active-class=\"transition-opacity duration-200 ease-in-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-500 ease-in-out\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n @after-leave=\"onAfterPopoverLeave\"\n >\n <div\n v-if=\"isOpen\"\n class=\"fixed z-9999\"\n :style=\"{\n top: popoverCoords.top + 'px',\n left: popoverCoords.right - popoverWidth - (popoverCoords.right - popoverCoords.left) + 'px',\n }\"\n >\n <div\n ref=\"popoverPanelRef\"\n class=\"bg-white border border-blue-500 rounded-md p-4 shadow-lg flex flex-row justify-between items-start gap-3\"\n :style=\"{\n width: popoverWidth + 'px',\n minHeight: popoverHeight + 'px',\n }\"\n @click.stop\n @focusout=\"onPanelFocusOut\"\n >\n <div class=\"flex flex-col gap-2\">\n <div\n v-for=\"option in options\"\n :key=\"option.value\"\n @click=\"\n (e) => {\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n handleOptionClick(option.value)\n }\n }\n \"\n class=\"cursor-pointer\"\n >\n <FdsRadio\n v-model=\"selectedOption\"\n :id=\"`tree-popover-${props.nodeId}-${option.value}`\"\n :name=\"`tree-popover-${props.nodeId}`\"\n :value=\"option.value\"\n @blur=\"closePopover\"\n :label=\"option.label\"\n />\n </div>\n </div>\n <FdsButtonIcon\n icon=\"cross\"\n id=\"tree-popover-close-button\"\n :size=\"24\"\n @click=\"closePopover()\"\n class=\"fill-blue-500\"\n ariaLabel=\"Stäng\"\n />\n </div>\n </div>\n </Transition>\n <!-- </teleport> -->\n </div>\n </div>\n </div>\n\n <div v-if=\"expandedNodes.has(props.nodeId)\">\n <TreeNode\n v-for=\"child in filteredNodes\"\n :key=\"child.nodeId\"\n :nodes=\"child.children || []\"\n :title=\"getTitleFromProperties(child, props.titleTemplate)\"\n :nodeId=\"child.nodeId\"\n :data=\"child.data\"\n :depth=\"props.depth + 1\"\n :indentation=\"props.indentation\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :showNodeDescription=\"showNodeDescription\"\n :showChildrenCount=\"showChildrenCount\"\n :expandChildrenOnSelect=\"expandChildrenOnSelect\"\n :showIndeterminate=\"showIndeterminate\"\n :showIndeterminateOnlyOnChildrenSelection=\"showIndeterminateOnlyOnChildrenSelection\"\n :expandChildrenOnParentCheck=\"expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"expandAllChildrenOnParentCheck\"\n :searchEnabled=\"searchEnabled\"\n :searchExpandNodes=\"searchExpandNodes\"\n :searchMatchParams=\"searchMatchParams\"\n :searchHighlighting=\"searchHighlighting\"\n :titleTemplate=\"props.titleTemplate\"\n :popoverLabels=\"props.popoverLabels\"\n />\n </div>\n </div>\n</template>\n","import { watchEffect, type Ref } from 'vue'\n\nexport function useElementFinalSize(\n elementRef: Ref<HTMLElement | null>,\n onFinalSize: (height: number) => void,\n delay = 100,\n) {\n watchEffect((onCleanup) => {\n const { value: element } = elementRef\n if (!element) return\n\n // Wait for next frame after a short delay, then measure\n const timeoutId = setTimeout(() => {\n requestAnimationFrame(() => {\n const { height } = element.getBoundingClientRect()\n if (height > 0) {\n onFinalSize(height)\n }\n })\n }, delay)\n\n onCleanup(() => clearTimeout(timeoutId))\n })\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsTextProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTextProps>(), {\n type: 'default',\n})\n\nconst textClasses = computed(() => {\n const baseClasses = 'inline-block'\n\n if (props.type === 'lead') {\n return `${baseClasses} font-light text-lg`\n }\n\n if (props.type === 'meta') {\n return `${baseClasses} font-light`\n }\n\n return baseClasses\n})\n</script>\n\n<template>\n <span :class=\"textClasses\">\n <slot />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\nimport useTreeState from './useTreeState'\nimport TreeNode from './TreeNode.vue'\nimport { getTitleFromProperties } from './utils'\nimport type { FdsTreeNode as TreeNodeType, FdsNodeShape, WrapperProps } from './types'\nimport { useElementFinalSize } from '../../composables/useElementFinalSize'\nimport FdsInput from '../Form/FdsInput/FdsInput.vue'\nimport FdsBlockContent from '../Blocks/FdsBlockContent/FdsBlockContent.vue'\nimport FdsText from '../Typography/FdsText/FdsText.vue'\n\nconst props = withDefaults(defineProps<WrapperProps<Record<string, unknown>>>(), {\n indentation: 36,\n showNodeDescription: false,\n showChildrenCount: false,\n expandChildrenOnSelect: false,\n showIndeterminate: false,\n expandChildrenOnParentCheck: false,\n expandAllChildrenOnParentCheck: true,\n showIndeterminateOnlyOnChildrenSelection: false,\n searchEnabled: false,\n searchExpandNodes: false,\n horizontalScroll: false,\n searchMatchParams: () => ['title', 'nodeId'],\n titleTemplate: '[[title]]',\n})\n\nconst emit = defineEmits<{\n (e: 'update:selectedNodes', value: FdsNodeShape[]): void\n (e: 'getSearchContainerHeight', value: number): void\n}>()\n\nconst rootNode = props.data\nconst nodesForState = rootNode ? [rootNode] : []\n\nconst treeState = useTreeState({\n expandChildrenOnParentCheck: props.expandChildrenOnParentCheck,\n expandAllChildrenOnParentCheck: props.expandAllChildrenOnParentCheck,\n showIndeterminateOnlyOnChildrenSelection: props.showIndeterminateOnlyOnChildrenSelection,\n searchExpandNodes: props.searchExpandNodes,\n titleTemplate: props.titleTemplate,\n nodes: nodesForState,\n searchInputTriggerLength: props.searchInputTriggerLength,\n})\nprovide('treeState', treeState)\n\nconst pruneNode = (node: TreeNodeType): FdsNodeShape => ({\n nodeId: node.nodeId,\n title: node.title,\n data: node.data,\n children: Array.isArray(node.children) ? node.children.map(pruneNode) : undefined,\n})\n\nconst selectedNodeObjects = computed<FdsNodeShape[]>(() => treeState.selectedNodeObjects.map(pruneNode))\n\nconst searchContainerRef = ref<HTMLElement | null>(null)\n\nuseElementFinalSize(searchContainerRef, (height) => {\n emit('getSearchContainerHeight', height)\n})\n\ndefineExpose({\n selectedNodeObjects,\n selectedNodes: treeState.selectedNodes,\n getSearchContainerHeight: () => searchContainerRef.value?.getBoundingClientRect().height,\n})\n\nwatch(\n () => treeState.selectedNodeObjects,\n () => {\n emit('update:selectedNodes', selectedNodeObjects.value)\n },\n { deep: true },\n)\n\n// Add 1 to the total node count to include the root node\nconst totalNodeCount = computed(() => 1 + (treeState?.totalNodeCount.value ?? 0))\n</script>\n\n<template>\n <div>\n <div\n v-if=\"props.searchEnabled\"\n ref=\"searchContainerRef\"\n class=\"pb-4\"\n >\n <FdsInput\n :value=\"treeState?.searchTerm?.value ?? ''\"\n @input=\"treeState?.setSearchTerm(($event.target as HTMLInputElement).value)\"\n class=\"w-full\"\n :label=\"props.searchLabel\"\n clear-button\n @clearInput=\"treeState?.clearSearch()\"\n >\n <input id=\"tree-view-search-input\" />\n </FdsInput>\n <div v-if=\"props.searchCountTemplate || props.searchCountTemplateUnfiltered\">\n <h2\n v-if=\"\n props.searchCountTemplate &&\n treeState?.searchTerm?.value &&\n String(treeState?.searchTerm?.value || '').trim().length >= (treeState?.triggerLength ?? 1)\n \"\n class=\"text-xl\"\n >\n {{\n props.searchCountTemplate\n .replace('[[filteredNodes]]', treeState?.filteredMatchCount.value.toString())\n .replace('[[totalNodes]]', totalNodeCount.toString())\n }}\n </h2>\n <h2\n class=\"text-xl\"\n v-else\n >\n {{\n props.searchCountTemplateUnfiltered\n ?.replace('[[totalNodes]]', totalNodeCount.toString())\n .replace('[[totalNodes]]', totalNodeCount.toString())\n }}\n </h2>\n </div>\n </div>\n\n <FdsBlockContent\n v-if=\"treeState?.isEmptySearchResult?.value\"\n class=\"mt-4\"\n >\n <template #header>{{ props.searchResultNoMatchesTitle }}</template>\n <FdsText>{{ props.searchResultNoMatchesBody }}</FdsText>\n </FdsBlockContent>\n\n <div :class=\"['rounded-md', { 'overflow-x-auto bg-white-solid': props.horizontalScroll }]\">\n <TreeNode\n v-if=\"props.data && !treeState?.isEmptySearchResult?.value\"\n :style=\"{ container: 'bg-white-solid px-3 py-2' }\"\n :nodes=\"props.data.children || []\"\n :title=\"getTitleFromProperties(props.data, props.titleTemplate)\"\n :nodeId=\"props.data.nodeId\"\n :data=\"props.data.data\"\n :indentation=\"props.indentation\"\n :showNodeDescription=\"props.showNodeDescription\"\n :showChildrenCount=\"props.showChildrenCount\"\n :expandChildrenOnSelect=\"props.expandChildrenOnSelect\"\n :showIndeterminate=\"props.showIndeterminate\"\n :expandChildrenOnParentCheck=\"props.expandChildrenOnParentCheck\"\n :expandAllChildrenOnParentCheck=\"props.expandAllChildrenOnParentCheck\"\n :showIndeterminateOnlyOnChildrenSelection=\"props.showIndeterminateOnlyOnChildrenSelection\"\n :searchEnabled=\"props.searchEnabled\"\n :searchLabel=\"props.searchLabel\"\n :searchExpandNodes=\"props.searchExpandNodes\"\n :searchMatchParams=\"props.searchMatchParams\"\n :horizontalScroll=\"props.horizontalScroll\"\n :nodeExpandIcon=\"props.nodeExpandIcon\"\n :nodeCollapseIcon=\"props.nodeCollapseIcon\"\n :searchHighlighting=\"props.searchHighlighting\"\n :titleTemplate=\"props.titleTemplate\"\n :popoverLabels=\"props.popoverLabels\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../composables/useHasSlots'\nimport { computed, onMounted, ref, watch } from 'vue'\nimport FdsButtonMinor from '../Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport type { FdsTruncatedTextProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTruncatedTextProps>(), {\n open: false,\n btnExpand: 'Visa mer',\n btnCollapse: 'Visa mindre',\n})\n\nconst emit = defineEmits<{\n (e: 'toggleHandler', data: { open: boolean }): void\n}>()\n\nconst isOpen = ref(props.open)\nconst contentRef = ref<HTMLDivElement | null>(null)\nconst hasSlotContent = useHasSlot()\nconst containerWidth = ref(0)\nconst truncated = ref(false)\nconst slotContentRef = ref<HTMLDivElement | null>(null)\n\nconst shouldShowButton = computed(() => {\n if (hasSlotContent.value) return true\n return truncated.value\n})\n\nconst toggleComponent = () => {\n isOpen.value = !isOpen.value\n emit('toggleHandler', { open: isOpen.value })\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n isOpen.value = newValue\n },\n)\n\nonMounted(() => {\n if (hasSlotContent.value && slotContentRef.value?.parentElement) {\n containerWidth.value = slotContentRef.value.parentElement.offsetWidth\n const threshold = slotContentRef.value.offsetWidth / 8\n const slotText = slotContentRef.value.textContent || ''\n if (threshold <= slotText.length) {\n truncated.value = true\n }\n } else if (contentRef.value?.parentElement) {\n containerWidth.value = contentRef.value.parentElement.offsetWidth\n const threshold = contentRef.value.offsetWidth / 8\n if (threshold <= props.content.length) {\n truncated.value = true\n }\n }\n})\n</script>\n\n<template>\n <div class=\"block mb-4\">\n <div\n v-if=\"hasSlotContent\"\n ref=\"slotContentRef\"\n :class=\"['content', { open: isOpen }]\"\n :style=\"{ maxWidth: `${containerWidth}px` }\"\n >\n <slot />\n </div>\n <div\n v-else\n ref=\"contentRef\"\n :class=\"['content', { open: isOpen }]\"\n :style=\"{ maxWidth: `${containerWidth}px` }\"\n >\n {{ content }}\n </div>\n <FdsButtonMinor\n v-if=\"shouldShowButton\"\n :icon=\"isOpen ? 'arrowUp' : 'arrowDown'\"\n iconPos=\"right\"\n :text=\"isOpen ? btnCollapse : btnExpand\"\n @click=\"toggleComponent\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsSelectProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsSelectProps>(), {\n value: undefined,\n label: undefined,\n meta: undefined,\n disabled: false,\n optional: false,\n valid: undefined,\n invalidMessage: undefined,\n name: undefined,\n id: undefined,\n placeholder: undefined,\n options: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'change', ev: Event): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-select-${Math.random().toString(36).slice(2, 9)}`\nconst selectId = computed(() => props.id ?? autoId)\n\nconst slots = useSlots()\nconst hasDefaultSlot = computed(() => !!slots.default)\n\nconst showInvalidMessage = computed(\n () => props.valid === 'false' && !props.optional && props.invalidMessage && !props.disabled,\n)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\n\nconst selectClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-2 pr-8 h-12 mb-4',\n 'focus:outline-2 focus:outline-blue-500 focus:border-transparent',\n 'appearance-none',\n props.disabled\n ? 'outline-dashed text-gray-600 outline-2 -outline-offset-2 outline-gray-400 cursor-not-allowed border-transparent'\n : 'bg-white cursor-pointer',\n isInvalid.value && !props.disabled && 'outline-2 -outline-offset-2 outline-red-600 text-red-600',\n])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () => (modelValue.value !== undefined ? modelValue.value : (props.value ?? '')),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n\nfunction handleChange(ev: Event) {\n emit('change', ev)\n emit('input', ev)\n}\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <label\n v-if=\"label\"\n :for=\"selectId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >\n {{ label }}\n </label>\n <div v-if=\"meta\" class=\"font-thin mb-1\">\n {{ meta }}\n </div>\n <div class=\"relative\">\n <select\n :id=\"selectId\"\n :name=\"name || undefined\"\n :disabled=\"disabled\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"selectClasses\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @input=\"(e) => emit('input', e)\"\n >\n <option v-if=\"placeholder && !hasDefaultSlot\" value=\"\" disabled>\n {{ placeholder }}\n </option>\n <!-- Render options from prop if no slot is provided -->\n <template v-if=\"!hasDefaultSlot && options\">\n <option v-for=\"option in options\" :key=\"option.value\" :value=\"option.value\" :disabled=\"option.disabled\">\n {{ option.label }}\n </option>\n </template>\n <!-- Render slot content (supports optgroups and custom options) -->\n <slot v-else />\n </select>\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FdsIcon\n name=\"arrowDown\"\n :size=\"24\"\n :class=\"{\n 'fill-gray-500': disabled,\n 'fill-red-500': isInvalid && !disabled,\n 'fill-blue-500': !disabled && !isInvalid,\n }\"\n />\n </div>\n </div>\n <div v-if=\"showInvalidMessage\" class=\"text-red-600 font-bold mt-1\">\n {{ invalidMessage }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsTextareaProps } from './types'\n\n// Support both v-model (modelValue) and :value prop for backward compatibility\nconst modelValue = defineModel<string>({ default: undefined, required: false })\n\nconst props = withDefaults(defineProps<FdsTextareaProps>(), {\n value: undefined,\n label: undefined,\n meta: undefined,\n disabled: false,\n optional: false,\n valid: undefined,\n rows: 4,\n name: undefined,\n id: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'input', ev: Event): void\n (e: 'update:value', value: string): void\n}>()\n\nconst autoId = `fds-textarea-${Math.random().toString(36).slice(2, 9)}`\nconst textareaId = computed(() => props.id ?? autoId)\n\nconst showInvalidMessage = computed(() => props.valid === 'false' && !props.optional && props.invalidMessage)\nconst isInvalid = computed(() => props.valid === 'false' && !props.optional && !props.disabled)\nconst isValid = computed(() => props.valid === 'true')\n\nconst inputClasses = computed(() => [\n 'block w-full rounded-md border border-gray-500 px-3 py-2',\n 'focus:outline-2 focus:outline-blue-500 focus:border-transparent',\n props.disabled\n ? 'outline-dashed outline-2 -outline-offset-2 outline-gray-400 cursor-not-allowed border-transparent bg-gray-50'\n : 'bg-white',\n isInvalid.value && 'outline-2 -outline-offset-2 outline-red-600',\n])\n\nconst validationIconClasses = computed(() => ['absolute right-3 top-3 flex items-center gap-2 pointer-events-none'])\n\n// Use modelValue if bound via v-model, otherwise use value prop\nconst internalValue = computed({\n get: () => (modelValue.value !== undefined ? modelValue.value : (props.value ?? '')),\n set: (newValue: string) => {\n // Update modelValue if it's being used\n if (modelValue.value !== undefined) {\n modelValue.value = newValue\n }\n // Always emit update:value for backward compatibility\n emit('update:value', newValue)\n },\n})\n</script>\n\n<template>\n <div class=\"w-full mb-4\">\n <label\n v-if=\"label\"\n :for=\"textareaId\"\n class=\"block font-bold text-gray-900 cursor-pointer\"\n :class=\"{ 'mb-0': meta, 'mb-1': !meta }\"\n >\n {{ label }}\n </label>\n <div v-if=\"meta\" class=\"font-thin mb-1\">\n {{ meta }}\n </div>\n <div class=\"relative\">\n <textarea\n :id=\"textareaId\"\n :name=\"name || undefined\"\n :disabled=\"disabled\"\n :rows=\"rows\"\n v-model=\"internalValue\"\n :aria-invalid=\"valid === 'false' ? 'true' : undefined\"\n :class=\"inputClasses\"\n v-bind=\"$attrs\"\n @input=\"(e) => emit('input', e)\"\n />\n <div :class=\"validationIconClasses\">\n <FdsIcon v-if=\"isInvalid\" name=\"alert\" class=\"fill-red-600\" />\n <FdsIcon v-if=\"isValid\" name=\"bigSuccess\" />\n </div>\n </div>\n <div v-if=\"showInvalidMessage\" class=\"text-red-600 font-bold mt-1\">\n {{ invalidMessage }}\n </div>\n </div>\n <div v-if=\"isValid\" class=\"sr-only\">OK</div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsTableProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTableProps>(), {\n bordered: false,\n compact: false,\n})\n\nconst wrapperClasses = computed(() => [\n 'fds-table-wrapper',\n props.bordered && 'fds-table-wrapper--bordered',\n props.compact && 'fds-table-wrapper--compact',\n])\n\ndefineSlots<{\n default?: unknown\n}>()\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useHasSlot } from '../../../composables/useHasSlots'\nimport { computed } from 'vue'\nimport FdsIcon from '../../FdsIcon/FdsIcon.vue'\nimport type { FdsTableHeadProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTableHeadProps>(), {\n align: 'left',\n icon: undefined,\n heading: undefined,\n})\n\nconst hasSlot = useHasSlot()\n\nconst headerClasses = computed(() => [\n 'appearance-none p-4 bg-transparent flex items-center border-none text-left w-full bg-transparent text-gray-800 whitespace-nowrap text-base font-bold leading-5 tracking-normal',\n props.align === 'center' && 'text-center justify-center',\n props.align === 'right' && 'text-right justify-end',\n iconName.value &&\n 'text-blue-600! hover:bg-blue_t-200 cursor-pointer focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-blue-500 active:bg-blue_t-300',\n])\n\n/* Sending an icon makes the th sortable */\nconst iconName = computed(() => props.icon)\n\ndefineEmits<{\n (e: 'sort'): void\n}>()\n</script>\n\n<template>\n <th class=\"fds-table-head\">\n <button\n v-if=\"iconName\"\n :class=\"headerClasses\"\n @click=\"$emit('sort')\"\n >\n <span v-if=\"hasSlot\"><slot /></span>\n <span v-else>{{ heading }}</span>\n <FdsIcon\n :name=\"iconName\"\n size=\"24px\"\n class=\"fill-blue-500\"\n />\n </button>\n <div\n v-else\n :class=\"headerClasses\"\n >\n <span v-if=\"hasSlot\"><slot /></span>\n <span v-else>{{ heading }}</span>\n </div>\n </th>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\nimport type { FdsTabsProps } from './types'\n\nconst props = withDefaults(defineProps<FdsTabsProps>(), {\n block: false,\n variant: 'primary',\n})\n\nconst tabsClasses = computed(() => [\n 'inline-flex overflow-auto max-w-full p-0.5 gap-0.5',\n {\n 'flex justify-between w-full': props.block,\n 'bg-blue_t-100 rounded-[10px] mb-8': props.variant === 'primary',\n 'gap-2 mb-4': props.variant === 'secondary',\n },\n])\n\nprovide('tabsVariant', props.variant)\nprovide('tabsBlock', props.block)\n</script>\n\n<template>\n <div :class=\"tabsClasses\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, useAttrs } from 'vue'\nimport type { FdsTabsItemProps } from './types'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst attrs = useAttrs()\n\n// Try to get route from vue-router if available\nconst instance = getCurrentInstance()\nconst route = computed(() => {\n try {\n // Check if vue-router is available via app context\n const router = instance?.appContext.config.globalProperties.$router\n if (router && router.currentRoute) {\n return router.currentRoute.value\n }\n } catch {\n // vue-router not available\n }\n return null\n})\n\nconst props = withDefaults(defineProps<FdsTabsItemProps>(), {\n to: undefined,\n href: undefined,\n as: undefined,\n active: undefined,\n exact: false,\n disabled: false,\n label: undefined,\n})\n\nconst variant = inject<'primary' | 'secondary'>('tabsVariant', 'primary')\nconst block = inject<boolean>('tabsBlock', false)\n\n// Auto-detect active state from router if to/href is provided\nconst isActive = computed(() => {\n if (props.active !== undefined) return props.active\n const currentRoute = route.value\n if (!currentRoute) return false\n\n const currentPath = currentRoute.path\n\n if (props.exact) {\n // Exact matching\n if (props.to && currentPath === props.to) return true\n if (props.href && currentPath === props.href) return true\n } else {\n // Include matching - check if current path includes to/href\n if (props.to && currentPath.includes(props.to)) return true\n if (props.href && currentPath.includes(props.href)) return true\n }\n\n return false\n})\n\nconst componentType = computed(() => {\n if (props.as) return props.as\n if (props.href) return 'a'\n if (props.to) return 'router-link'\n return 'router-link' // Default to router-link\n})\n\nconst linkAttrs = computed(() => {\n if (componentType.value === 'a') return { href: props.href || props.to }\n if (componentType.value === 'router-link') {\n // If no to/href provided, use current path or empty string\n return { to: props.to || props.href || route.value?.path || '#' }\n }\n return {}\n})\n\nconst componentAttrs = computed(() => ({\n ...linkAttrs.value,\n ...attrs,\n}))\n\nconst baseClasses = computed(() => {\n const blockClasses = block ? 'flex flex-1' : ''\n return [\n 'text-center',\n blockClasses,\n 'flex justify-center w-full cursor-pointer font-bold text-base leading-6 m-0 select-none no-underline whitespace-nowrap',\n ]\n})\n\nconst variantClasses = computed(() => {\n if (variant === 'primary') {\n return [\n 'bg-transparent py-2 px-4 rounded-lg border-2 border-transparent text-inherit',\n isActive.value\n ? 'border-transparent bg-white shadow-md'\n : 'hover:bg-white/59 hover:outline-none active:border-transparent active:bg-white/80',\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-blue-500 focus-visible:outline-offset-[-2px]',\n ]\n } else {\n return [\n 'text-blue-700 py-1 px-2 rounded-md border-none',\n isActive.value ? 'bg-blue-500 text-white' : 'hover:bg-blue_t-100 active:bg-blue_t-200',\n 'focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-blue-500',\n 'tracking-[0.002em]',\n ]\n }\n})\n\nconst disabledClasses = computed(() => (props.disabled ? 'cursor-not-allowed pointer-events-none opacity-35' : ''))\n\nconst buttonClasses = computed(() => [...baseClasses.value, ...variantClasses.value, disabledClasses.value])\n</script>\n\n<template>\n <component\n :is=\"componentType\"\n v-bind=\"componentAttrs\"\n :class=\"buttonClasses\"\n :disabled=\"componentType === 'button' ? disabled : undefined\"\n :aria-disabled=\"disabled\"\n :aria-current=\"isActive ? 'page' : undefined\"\n >\n <slot>{{ label }}</slot>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FdsHeadingProps } from './types'\n\nconst props = withDefaults(defineProps<FdsHeadingProps>(), {\n size: 'responsive',\n})\n\nconst headingClasses = computed(() => {\n const baseClasses = 'font-raleway leading-tight m-0'\n\n if (props.type === 'h1') {\n return [baseClasses, 'mb-3', getResponsiveSize('h1', props.size)].filter(Boolean).join(' ')\n }\n if (props.type === 'h2') {\n return [baseClasses, 'mt-4 mb-2', getResponsiveSize('h2', props.size)].filter(Boolean).join(' ')\n }\n if (props.type === 'h3') {\n return [baseClasses, 'mt-4 mb-2', getResponsiveSize('h3', props.size)].filter(Boolean).join(' ')\n }\n\n return baseClasses\n})\n\nfunction getResponsiveSize(element: 'h1' | 'h2' | 'h3', size: string) {\n if (size !== 'responsive') {\n const sizeMap: Record<typeof element, Record<string, string>> = {\n h1: { xl: 'text-6xl', lg: 'text-5xl', md: 'text-4xl', sm: 'text-2xl' },\n h2: { xl: 'text-5xl', lg: 'text-4xl', md: 'text-3xl', sm: 'text-xl' },\n h3: { xl: 'text-3xl', lg: 'text-2xl', md: 'text-xl', sm: 'text-lg' },\n }\n return sizeMap[element][size]\n }\n\n const responsiveMap: Record<typeof element, string> = {\n h1: 'text-2xl sm:text-4xl md:text-5xl lg:text-6xl',\n h2: 'text-xl sm:text-3xl md:text-4xl lg:text-5xl',\n h3: 'text-lg sm:text-xl md:text-2xl lg:text-3xl',\n }\n return responsiveMap[element]\n}\n</script>\n\n<template>\n <component\n :is=\"type\"\n :class=\"headingClasses\"\n >\n {{ text }}\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport FdsSpinner from '../../FdsSpinner/FdsSpinner.vue'\nimport type { FdsListHeadingProps } from './types'\n\nconst props = withDefaults(defineProps<FdsListHeadingProps>(), {\n loading: false,\n language: 'sv',\n})\n\nconst separatorText = () => (props.language === 'sv' ? 'av' : 'of')\n\nconst headingText = computed(() => {\n // If total is falsy, show \"0 separator unfiltered text\"\n if (!props.total) {\n let result = '0'\n if (props.unfiltered) {\n result += ` ${separatorText()} ${props.unfiltered}`\n }\n if (props.text) {\n result += ` ${props.text}`\n }\n return result\n }\n\n // If no text, just show total\n if (!props.text) return String(props.total)\n\n // If unfiltered exists and differs from total, show \"total separator unfiltered text\"\n if (props.unfiltered && props.total !== props.unfiltered) {\n return `${props.total} ${separatorText()} ${props.unfiltered} ${props.text}`\n }\n\n // Default: show \"total text\"\n return `${props.total} ${props.text}`\n})\n\nconst handleLoadingText = () => {\n if (props.loadingText && props.loadingText.length > 0) {\n return props.loadingText\n }\n return props.language === 'sv' ? 'Laddar...' : 'Loading...'\n}\n</script>\n\n<template>\n <div class=\"inline-block mb-3 h-7 font-bold text-xl\">\n <FdsSpinner\n v-if=\"loading\"\n size=\"24px\"\n color=\"blue\"\n :label=\"handleLoadingText()\"\n label-position=\"right\"\n />\n <h3\n v-else\n class=\"heading font-heading text-xl m-0\"\n >\n {{ headingText }}\n </h3>\n </div>\n</template>\n","<script setup lang=\"ts\"></script>\n\n<template>\n <hr class=\"block border-0 h-px w-full bg-black/12 my-4\" />\n</template>\n","// Import styles\nimport type { App, Plugin } from 'vue'\nimport './style.css'\n\n// Import all components (use relative paths so consumers don't need our TS alias)\nimport FdsBlockAlert from './components/Blocks/FdsBlockAlert/FdsBlockAlert.vue'\nimport FdsBlockContent from './components/Blocks/FdsBlockContent/FdsBlockContent.vue'\nimport FdsBlockExpander from './components/Blocks/FdsBlockExpander/FdsBlockExpander.vue'\nimport FdsBlockInfo from './components/Blocks/FdsBlockInfo/FdsBlockInfo.vue'\nimport FdsBlockLink from './components/Blocks/FdsBlockLink/FdsBlockLink.vue'\nimport FdsButtonCopy from './components/Buttons/FdsButtonCopy/FdsButtonCopy.vue'\nimport FdsButtonDownload from './components/Buttons/FdsButtonDownload/FdsButtonDownload.vue'\nimport FdsButtonIcon from './components/Buttons/FdsButtonIcon/FdsButtonIcon.vue'\nimport FdsButtonMinor from './components/Buttons/FdsButtonMinor/FdsButtonMinor.vue'\nimport FdsButtonPrimary from './components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue'\nimport FdsButtonSecondary from './components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue'\nimport FdsIcon from './components/FdsIcon/FdsIcon.vue'\nimport FdsModal from './components/FdsModal/FdsModal.vue'\nimport FdsPagination from './components/FdsPagination/FdsPagination.vue'\nimport FdsSearchSelect from './components/FdsSearchSelect/FdsSearchSelect.vue'\nimport FdsSpinner from './components/FdsSpinner/FdsSpinner.vue'\nimport FdsSticker from './components/FdsSticker/FdsSticker.vue'\nimport FdsTreeView from './components/FdsTreeView/FdsTreeView.vue'\nimport FdsTruncatedText from './components/FdsTruncatedText/FdsTruncatedText.vue'\nimport FdsCheckbox from './components/Form/FdsCheckbox/FdsCheckbox.vue'\nimport FdsInput from './components/Form/FdsInput/FdsInput.vue'\nimport FdsRadio from './components/Form/FdsRadio/FdsRadio.vue'\nimport FdsSelect from './components/Form/FdsSelect/FdsSelect.vue'\nimport FdsTextarea from './components/Form/FdsTextarea/FdsTextarea.vue'\nimport FdsTable from './components/Table/FdsTable/FdsTable.vue'\nimport FdsTableHead from './components/Table/FdsTableHead/FdsTableHead.vue'\nimport FdsTabs from './components/Tabs/FdsTabs/FdsTabs.vue'\nimport FdsTabsItem from './components/Tabs/FdsTabsItem/FdsTabsItem.vue'\nimport FdsHeading from './components/Typography/FdsHeading/FdsHeading.vue'\nimport FdsListHeading from './components/Typography/FdsListHeading/FdsListHeading.vue'\nimport FdsSeparator from './components/Typography/FdsSeparator/FdsSeparator.vue'\nimport FdsText from './components/Typography/FdsText/FdsText.vue'\n\n// Import composables (relative paths)\nimport useTreeState from './components/FdsTreeView/useTreeState'\nimport { useBoldQuery } from './composables/useBoldQuery'\nimport { isPidString, useIsPid } from './composables/useIsPid'\n\n// Export individual components\nexport {\n FdsBlockAlert,\n FdsBlockContent,\n FdsBlockExpander,\n FdsBlockInfo,\n FdsBlockLink,\n FdsButtonCopy,\n FdsButtonDownload,\n FdsButtonIcon,\n FdsButtonMinor,\n FdsButtonPrimary,\n FdsButtonSecondary,\n FdsCheckbox,\n FdsHeading,\n FdsIcon,\n FdsInput,\n FdsListHeading,\n FdsModal,\n FdsPagination,\n FdsRadio,\n FdsSearchSelect,\n FdsSelect,\n FdsSeparator,\n FdsSpinner,\n FdsSticker,\n FdsTable,\n FdsTableHead,\n FdsTabs,\n FdsTabsItem,\n FdsText,\n FdsTextarea,\n FdsTreeView,\n FdsTruncatedText,\n}\n\n// Export composables\nexport { isPidString, useBoldQuery, useIsPid, useTreeState }\n\n// Export component library plugin\nconst FdsVueCorePlugin: Plugin = {\n install(app: App) {\n // Register all components globally\n app.component('FdsTreeView', FdsTreeView)\n // Register button variants with direct names\n app.component('FdsButtonPrimary', FdsButtonPrimary)\n app.component('FdsButtonSecondary', FdsButtonSecondary)\n app.component('FdsButtonMinor', FdsButtonMinor)\n app.component('FdsButtonIcon', FdsButtonIcon)\n app.component('FdsButtonCopy', FdsButtonCopy)\n app.component('FdsButtonDownload', FdsButtonDownload)\n app.component('FdsIcon', FdsIcon)\n app.component('FdsSpinner', FdsSpinner)\n app.component('FdsRadio', FdsRadio)\n app.component('FdsCheckbox', FdsCheckbox)\n app.component('FdsTextarea', FdsTextarea)\n app.component('FdsSelect', FdsSelect)\n app.component('FdsTable', FdsTable)\n app.component('FdsTableHead', FdsTableHead)\n app.component('FdsInput', FdsInput)\n app.component('FdsBlockContent', FdsBlockContent)\n app.component('FdsBlockInfo', FdsBlockInfo)\n app.component('FdsBlockAlert', FdsBlockAlert)\n app.component('FdsBlockExpander', FdsBlockExpander)\n app.component('FdsBlockLink', FdsBlockLink)\n app.component('FdsSticker', FdsSticker)\n app.component('FdsTabs', FdsTabs)\n app.component('FdsTabsItem', FdsTabsItem)\n app.component('FdsModal', FdsModal)\n app.component('FdsPagination', FdsPagination)\n app.component('FdsSearchSelect', FdsSearchSelect)\n app.component('FdsTruncatedText', FdsTruncatedText)\n app.component('FdsHeading', FdsHeading)\n app.component('FdsSeparator', FdsSeparator)\n app.component('FdsText', FdsText)\n app.component('FdsListHeading', FdsListHeading)\n },\n}\n\nexport default FdsVueCorePlugin\n\n// Export all component types\n// TreeView types (only consumer-facing types)\nexport type { FdsNodeShape, FdsTreeNode, FdsTreeViewProps, FdsTreeViewStyles } from './components/FdsTreeView/types'\n\n// Button component types\nexport type { FdsButtonBaseProps } from './components/Buttons/ButtonBaseProps'\nexport type { FdsCopyButtonProps } from './components/Buttons/FdsButtonCopy/types'\nexport type { DownloadOptions, FdsButtonDownloadProps } from './components/Buttons/FdsButtonDownload/types'\nexport type { FdsIconButtonProps } from './components/Buttons/FdsButtonIcon/types'\n\n// Button components that use FdsButtonBaseProps\nimport type { FdsButtonBaseProps } from './components/Buttons/ButtonBaseProps'\nexport type FdsButtonPrimaryProps = FdsButtonBaseProps\nexport type FdsButtonSecondaryProps = FdsButtonBaseProps\nexport type FdsButtonMinorProps = FdsButtonBaseProps\n\n// Form component types\nexport type { FdsCheckboxProps } from './components/Form/FdsCheckbox/types'\nexport type { FdsInputProps } from './components/Form/FdsInput/types'\nexport type { FdsRadioProps } from './components/Form/FdsRadio/types'\nexport type { FdsSelectProps } from './components/Form/FdsSelect/types'\nexport type { FdsTextareaProps } from './components/Form/FdsTextarea/types'\n\n// Table component types\nexport type { FdsTableProps } from './components/Table/FdsTable/types'\nexport type { FdsTableHeadProps } from './components/Table/FdsTableHead/types'\n\n// Block component types\n// Use relative paths so the generated declarations are resolvable from the published package\nexport type { FdsAlertBlockProps } from './components/Blocks/FdsBlockAlert/types'\nexport type { FdsContentBlockProps } from './components/Blocks/FdsBlockContent/types'\nexport type { FdsExpanderBlockProps } from './components/Blocks/FdsBlockExpander/types'\nexport type { FdsBlockInfoProps } from './components/Blocks/FdsBlockInfo/types'\nexport type { FdsInteractionBlockProps } from './components/Blocks/FdsBlockLink/types'\n\n// Tab component types\nexport type { FdsTabsProps } from './components/Tabs/FdsTabs/types'\nexport type { FdsTabsItemProps } from './components/Tabs/FdsTabsItem/types'\n\n// Typography component types\nexport type { FdsHeadingProps } from './components/Typography/FdsHeading/types'\nexport type { FdsListHeadingProps } from './components/Typography/FdsListHeading/types'\nexport type { FdsTextProps } from './components/Typography/FdsText/types'\n\n// Other component types\nexport type { FdsIconName, FdsIconProps } from './components/FdsIcon/types'\nexport type { FdsModalProps } from './components/FdsModal/types'\nexport type { FdsPaginationProps } from './components/FdsPagination/types'\nexport type { FdsSearchSelectProps } from './components/FdsSearchSelect/types'\nexport type { FdsSpinnerProps } from './components/FdsSpinner/types'\nexport type { FdsStickerProps } from './components/FdsSticker/types'\nexport type { FdsTruncatedTextProps } from './components/FdsTruncatedText/types'\n"],"names":["_createElementBlock","_normalizeStyle","id","type","disabled","ariaLabel","ariaDisabled","loading","_createBlock","FdsIcon","icon","_createElementVNode","label","collapsable","_unref","_hoisted_2","_createVNode","_hoisted_3","closeable","FdsButtonIcon","_normalizeClass","_openBlock","_hoisted_4","_renderSlot","heading","_hoisted_5","_hoisted_1","preIcon","size","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_resolveDynamicComponent","_mergeProps","target","rel","download","dataTestid","arrow","labelPosition","elBase","variantClasses","iconFillClass","as","FdsSpinner","text","FdsButtonMinor","_createTextVNode","_Teleport","strict","bName","fromPos","toPos","_useModel","createMask","labelLeft","meta","_withDirectives","name","required","maxlength","valid","$attrs","$emit","clearButton","invalidMessage","current","_Fragment","FdsInput","max","locale","singleItemLabel","searchContext","_renderList","_withKeys","_withModifiers","page","FdsPagination","noResultPrompt","bullet","value","indentation","FdsCheckbox","showIndeterminate","title","_Transition","FdsRadio","showNodeDescription","showChildrenCount","expandChildrenOnSelect","showIndeterminateOnlyOnChildrenSelection","expandChildrenOnParentCheck","expandAllChildrenOnParentCheck","searchEnabled","searchExpandNodes","searchMatchParams","searchHighlighting","FdsBlockContent","FdsText","TreeNode","content","btnCollapse","btnExpand","placeholder","options","rows","FdsTreeView","FdsButtonPrimary","FdsButtonSecondary","FdsButtonCopy","FdsButtonDownload","FdsTextarea","FdsSelect","FdsTable","FdsTableHead","FdsBlockInfo","FdsBlockAlert","FdsBlockExpander","FdsBlockLink","FdsSticker","FdsTabs","FdsTabsItem","FdsModal","FdsSearchSelect","FdsTruncatedText","FdsHeading","FdsListHeading"],"mappings":"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","x_google_ignoreList":[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43]}
|