@enos5/enos-vue-default 1.16.4 → 1.16.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{code-Ck9l0J11.js → code-DBX6icrh.js} +2 -2
- package/dist/{code-Ck9l0J11.js.map → code-DBX6icrh.js.map} +1 -1
- package/dist/{default-C-ygURG1.js → default-DA3xL5_3.js} +2 -2
- package/dist/{default-C-ygURG1.js.map → default-DA3xL5_3.js.map} +1 -1
- package/dist/{dom-B5C34Hss.js → dom-BzW7SOnS.js} +2 -2
- package/dist/{dom-B5C34Hss.js.map → dom-BzW7SOnS.js.map} +1 -1
- package/dist/{image-om1zgdO9.js → image-Cdyosizw.js} +2 -2
- package/dist/{image-om1zgdO9.js.map → image-Cdyosizw.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/index.node.js +1 -1
- package/dist/{link-udJozaqN.js → link-DnFiMBaY.js} +2 -2
- package/dist/{link-udJozaqN.js.map → link-DnFiMBaY.js.map} +1 -1
- package/dist/{lists-7DI9Tv0m.js → lists-eijGbH8c.js} +2 -2
- package/dist/{lists-7DI9Tv0m.js.map → lists-eijGbH8c.js.map} +1 -1
- package/dist/{plugin-D0P_jRZq.js → plugin-DEYPewKV.js} +11 -11
- package/dist/{plugin-D0P_jRZq.js.map → plugin-DEYPewKV.js.map} +1 -1
- package/dist/{silver-CijRmxnT.js → silver-BSteqiRy.js} +2 -2
- package/dist/{silver-CijRmxnT.js.map → silver-BSteqiRy.js.map} +1 -1
- package/dist/{table-CePDnvBC.js → table-4gjLq7XO.js} +2 -2
- package/dist/{table-CePDnvBC.js.map → table-4gjLq7XO.js.map} +1 -1
- package/dist/{tinymce-qDvRw4Ap.js → tinymce-BNj9wZ1G.js} +2 -2
- package/dist/{tinymce-qDvRw4Ap.js.map → tinymce-BNj9wZ1G.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-D0P_jRZq.js","names":["$emit","$slots","$attrs","$attrs","$slots","$emit","$attrs","$attrs","__iconNode","__iconNode","__iconNode","$emit","$slots","$slots","$emit"],"sources":["../src/components/CardTabs.vue","../src/components/Card.vue","../src/components/Divider.vue","../src/components/ActionCard.vue","../src/components/ActionMessage.vue","../src/components/SectionTitle.vue","../src/components/ActionSection.vue","../src/components/Badge.vue","../src/components/Button.vue","../src/components/Checkbox.vue","../src/components/CheckboxInput.vue","../src/components/TextInput.vue","../src/components/TextArea.vue","../src/components/CustomSelect.vue","../src/components/SelectInput.vue","../src/components/DateInput.vue","../src/components/DateRangeInput.vue","../src/components/ImageInput.vue","../src/components/NotationInput.vue","../src/components/RadioInput.vue","../src/components/ToggleInput.vue","../src/components/RadioMultipleInput.vue","../src/components/TinyEditor.vue","../src/components/ColorPicker.vue","../src/components/InputGroup.vue","../src/components/CheckboxMultipleInput.vue","../src/components/Modal.vue","../src/components/ConfirmationModal.vue","../src/components/DialogModal.vue","../src/components/Dropdown.vue","../src/components/DropdownLink.vue","../src/components/FormSection.vue","../src/components/InputError.vue","../src/components/InputLabel.vue","../src/components/LinkButton.vue","../src/components/SectionBorder.vue","../src/components/sidebar-context.ts","../src/components/Sidebar.vue","../src/components/Sidebar.vue","../src/components/SidebarContent.vue","../src/components/SidebarContent.vue","../src/components/SidebarFooter.vue","../src/components/SidebarFooter.vue","../src/components/SidebarGroup.vue","../src/components/SidebarGroup.vue","../src/components/SidebarGroupContent.vue","../src/components/SidebarGroupContent.vue","../src/components/SidebarGroupLabel.vue","../src/components/SidebarGroupLabel.vue","../src/components/SidebarHeader.vue","../src/components/SidebarHeader.vue","../src/components/SidebarInset.vue","../src/components/SidebarInset.vue","../src/components/SidebarMenu.vue","../src/components/SidebarMenu.vue","../src/components/SidebarMenuButton.vue","../src/components/SidebarMenuButton.vue","../src/components/SidebarMenuItem.vue","../src/components/SidebarMenuItem.vue","../src/components/SidebarProvider.vue","../src/components/SidebarProvider.vue","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/isEmptyString.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/mergeClasses.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toKebabCase.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toCamelCase.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toPascalCase.js","../../../node_modules/@lucide/vue/dist/esm/defaultAttributes.js","../../../node_modules/@lucide/vue/dist/esm/context.js","../../../node_modules/@lucide/vue/dist/esm/Icon.js","../../../node_modules/@lucide/vue/dist/esm/createLucideIcon.js","../../../node_modules/@lucide/vue/dist/esm/icons/grip-vertical.js","../../../node_modules/@lucide/vue/dist/esm/icons/panel-left-close.js","../../../node_modules/@lucide/vue/dist/esm/icons/panel-left-open.js","../../../node_modules/@lucide/vue/dist/esm/icons/search.js","../src/components/SidebarTrigger.vue","../src/components/SidebarTrigger.vue","../src/components/slide-panel-context.ts","../src/components/SlidePanel.vue","../src/components/SlidePanel.vue","../src/components/SortControls.vue","../src/components/ThSortable.vue","../src/components/TableSearch.vue","../src/components/tableListOrdering.js","../src/components/TableList.vue","../src/components/TableListForm.vue","../src/components/Toast.vue","../src/components/Toast.vue","../src/components/ToastContainer.vue","../src/components/ToastContainer.vue","../src/exports.ts","../src/plugin.ts"],"sourcesContent":["<script setup>\nimport { computed, ref, watch } from \"vue\";\n\nconst props = defineProps({\n tabs: {\n type: Array,\n default: () => [],\n validator: (tabs) => tabs.every((tab) => (\n typeof tab === 'object'\n && tab !== null\n && typeof tab.value === 'string'\n && tab.value.length > 0\n && typeof tab.label === 'string'\n )),\n },\n activeTab: {\n type: String,\n default: \"\",\n },\n});\n\nconst emit = defineEmits([\n 'update:activeTab',\n 'tab-click',\n]);\n\nconst tabButtons = ref([]);\n\nconst availableTabValues = computed(() => props.tabs.map((tab) => tab.value));\nconst currentActiveTab = computed(() => (\n availableTabValues.value.includes(props.activeTab)\n ? props.activeTab\n : (availableTabValues.value[0] ?? '')\n));\n\nwatch(currentActiveTab, (value) => {\n if (value !== props.activeTab) {\n emit('update:activeTab', value);\n }\n}, { immediate: true });\n\nconst setTabButtonRef = (element, index) => {\n tabButtons.value[index] = element;\n};\n\nconst activateTab = (value) => {\n if (!value || value === props.activeTab) {\n return;\n }\n\n emit('update:activeTab', value);\n emit('tab-click', value);\n};\n\nconst focusTabAtIndex = (index) => {\n tabButtons.value[index]?.focus();\n};\n\nconst onTabKeydown = (event, index) => {\n if (props.tabs.length === 0) {\n return;\n }\n\n let targetIndex = index;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n targetIndex = (index + 1) % props.tabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n targetIndex = (index - 1 + props.tabs.length) % props.tabs.length;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = props.tabs.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n activateTab(props.tabs[targetIndex].value);\n focusTabAtIndex(targetIndex);\n};\n</script>\n\n<template>\n <div class=\"border-b border-neutral-200 bg-neutral-50/80 p-2 dark:border-neutral-800 dark:bg-neutral-900/80\">\n <div role=\"tablist\" class=\"flex overflow-hidden rounded-lg bg-white shadow-sm ring-1 ring-neutral-200 dark:bg-neutral-950 dark:ring-neutral-800\">\n <button\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.value\"\n :ref=\"(element) => setTabButtonRef(element, index)\"\n type=\"button\"\n :style=\"{ width: `${100 / tabs.length}%` }\"\n role=\"tab\"\n :aria-selected=\"currentActiveTab === tab.value\"\n :tabindex=\"currentActiveTab === tab.value ? 0 : -1\"\n :class=\"[\n 'px-4 py-3 text-center text-sm font-semibold tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-neutral-900/20 focus-visible:ring-inset dark:focus-visible:ring-neutral-100/20',\n currentActiveTab === tab.value\n ? 'bg-neutral-100 text-neutral-950 shadow-[inset_0_-2px_0_0_rgb(23_23_23)] dark:bg-neutral-800 dark:text-neutral-50 dark:shadow-[inset_0_-2px_0_0_rgb(245_245_245)]'\n : 'text-neutral-700 hover:bg-neutral-50 dark:text-neutral-100 dark:hover:bg-neutral-900',\n {\n 'border-r border-neutral-200 dark:border-neutral-800': index !== tabs.length - 1,\n }\n ]\"\n @click=\"activateTab(tab.value)\"\n @keydown=\"onTabKeydown($event, index)\"\n >\n {{ tab.label }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, watch, computed } from 'vue';\nimport CardTabs from \"./CardTabs.vue\";\n\nconst props = defineProps({\n title: {\n type: String,\n default: \"\"\n },\n sticky: {\n type: Boolean,\n default: false,\n },\n paddingClass: {\n type: String,\n default: \"p-6 lg:p-8\"\n },\n cardClass: {\n type: String,\n default: \"\"\n },\n overflowClass: {\n type: String,\n default: \"overflow-visible\",\n },\n contentClass: {\n type: String,\n default: \"\"\n },\n tabs: {\n type: Array,\n default: () => [],\n validator: (tabs) => tabs.every((tab) => (\n typeof tab === 'object'\n && tab !== null\n && typeof tab.value === 'string'\n && tab.value.length > 0\n && typeof tab.label === 'string'\n )),\n },\n activeTab: {\n type: String,\n default: \"\",\n }\n});\n\ndefineEmits([\n 'update:activeTab',\n 'tab-click',\n]);\n\nconst previousActiveTab = ref('');\nconst slideDirection = ref('right');\n\nconst currentTabIndex = computed(() => {\n return props.tabs.findIndex(tab => tab.value === props.activeTab);\n});\n\nconst previousTabIndex = computed(() => {\n return props.tabs.findIndex(tab => tab.value === previousActiveTab.value);\n});\n\nwatch(currentTabIndex, (newIndex, oldIndex) => {\n if (oldIndex !== undefined && oldIndex !== -1 && newIndex !== -1 && newIndex !== oldIndex) {\n slideDirection.value = newIndex > oldIndex ? 'right' : 'left';\n previousActiveTab.value = props.activeTab;\n }\n});\n</script>\n\n<template>\n <div :class=\"['rounded-2xl border border-neutral-200 bg-white text-neutral-950 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50', overflowClass, { 'sticky top-6 self-start': sticky }, cardClass]\">\n <CardTabs\n v-if=\"tabs.length > 0\"\n :tabs=\"tabs\"\n :active-tab=\"activeTab\"\n @update:active-tab=\"$emit('update:activeTab', $event)\"\n @tab-click=\"$emit('tab-click', $event)\"\n />\n <div :class=\"paddingClass\">\n <div v-if=\"$slots.customTitle\" class=\"mb-4\">\n <slot name=\"customTitle\" />\n </div>\n <h3 v-else-if=\"title\" class=\"mb-4 text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50\">{{ title }}</h3>\n\n <!-- Animated Content Container -->\n <div :class=\"['relative', tabs.length > 0 ? 'overflow-hidden' : 'overflow-visible']\">\n <transition\n enter-active-class=\"transition-all duration-200 ease-in-out\"\n :enter-from-class=\"slideDirection === 'right' ? 'translate-x-full opacity-0' : '-translate-x-full opacity-0'\"\n enter-to-class=\"translate-x-0 opacity-100\"\n leave-active-class=\"transition-all duration-200 ease-in-out\"\n leave-from-class=\"translate-x-0 opacity-100\"\n :leave-to-class=\"slideDirection === 'right' ? '-translate-x-full opacity-0' : 'translate-x-full opacity-0'\"\n mode=\"out-in\"\n >\n <div\n :key=\"activeTab\"\n :class=\"[\n tabs.length > 0 ? 'p-2' : '',\n 'dark:text-neutral-50 dark:[&_h1]:text-neutral-50 dark:[&_h2]:text-neutral-50 dark:[&_h3]:text-neutral-50 dark:[&_h4]:text-neutral-50 dark:[&_h5]:text-neutral-50 dark:[&_h6]:text-neutral-50 dark:[&_p]:text-neutral-100 dark:[&_li]:text-neutral-100 dark:[&_a]:text-neutral-100',\n contentClass,\n ]\"\n >\n <slot />\n </div>\n </transition>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n</script>\n\n<template>\n <div class=\"border-t border-neutral-200 dark:border-neutral-800\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<script setup>\nimport { useSlots } from \"vue\";\nimport Card from \"./Card.vue\";\nimport Divider from \"./Divider.vue\";\n\ndefineProps({\n title: {\n type: String,\n default: \"\"\n },\n actionsClass: {\n type: String,\n default: \"space-y-3\"\n }\n});\n\nconst slots = useSlots();\n</script>\n\n<template>\n <Card :title=\"title\" :content-class=\"actionsClass\">\n <slot />\n <Divider v-if=\"slots.danger\" class=\"mt-6 pt-4\">\n <slot name=\"danger\" />\n </Divider>\n </Card>\n</template>\n","<script setup>\ndefineProps({\n on: Boolean,\n});\n</script>\n\n<template>\n <div>\n <transition leave-active-class=\"transition ease-in duration-1000\" leave-from-class=\"opacity-100\" leave-to-class=\"opacity-0\">\n <div v-show=\"on\" class=\"text-sm text-gray-600\">\n <slot />\n </div>\n </transition>\n </div>\n</template>\n","<template>\n <div class=\"md:col-span-1 flex justify-between\">\n <div class=\"px-4 sm:px-0\">\n <h3 class=\"text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </h3>\n\n <p class=\"mt-1 max-w-2xl text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"description\" />\n </p>\n </div>\n\n <div class=\"px-4 sm:px-0\">\n <slot name=\"aside\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport SectionTitle from './SectionTitle.vue';\n</script>\n\n<template>\n <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n <SectionTitle>\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #description>\n <slot name=\"description\" />\n </template>\n </SectionTitle>\n\n <div class=\"mt-5 md:mt-0 md:col-span-2\">\n <div class=\"rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6\">\n <slot name=\"content\" />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\ndefineProps({\n type: {\n type: String,\n default: 'default',\n validator: (value) => ['default', 'dot'].includes(value)\n },\n color: {\n type: String,\n default: 'default',\n validator: (value) => [\n 'default', 'primary', 'secondary', 'success', 'warning', 'danger', 'info', 'gray'\n ].includes(value)\n },\n size: {\n type: String,\n default: 'md',\n validator: (value) => ['xs', 'sm', 'md', 'lg'].includes(value)\n },\n rounded: {\n type: String,\n default: 'full',\n validator: (value) => ['none', 'sm', 'md', 'lg', 'full'].includes(value)\n }\n});\n\nconst colorClasses = {\n default: { bg: 'bg-slate-100', text: 'text-slate-700', dot: 'bg-slate-600' },\n primary: { bg: 'bg-blue-100 dark:bg-blue-400/20', text: 'text-blue-700 dark:text-blue-200', dot: 'bg-blue-600 dark:bg-blue-300' },\n secondary: { bg: 'bg-slate-100', text: 'text-slate-700', dot: 'bg-slate-600' },\n success: { bg: 'bg-emerald-100', text: 'text-emerald-700', dot: 'bg-emerald-600' },\n warning: { bg: 'bg-amber-100', text: 'text-amber-700', dot: 'bg-amber-600' },\n danger: { bg: 'bg-rose-100', text: 'text-rose-700', dot: 'bg-rose-600' },\n info: { bg: 'bg-cyan-100', text: 'text-cyan-700', dot: 'bg-cyan-600' },\n gray: { bg: 'bg-slate-100', text: 'text-slate-600', dot: 'bg-slate-600' }\n};\n\nconst sizeClasses = {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm'\n};\n\nconst roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full'\n};\n</script>\n\n<template>\n <!-- Dot type with circular indicator -->\n <span v-if=\"type === 'dot'\" class=\"inline-flex items-center justify-center w-6 h-6 rounded-full\" :class=\"colorClasses[color].bg\">\n <span class=\"w-2 h-2 rounded-full\" :class=\"colorClasses[color].dot\"></span>\n <span class=\"sr-only\">\n <slot />\n </span>\n </span>\n \n <!-- Default type with colored background -->\n <span v-else\n class=\"inline-flex items-center font-medium\"\n :class=\"[\n colorClasses[color].bg,\n colorClasses[color].text,\n sizeClasses[size],\n roundedClasses[rounded]\n ]\"\n >\n <slot />\n </span>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n\nimport { computed, useAttrs } from 'vue';\n\nconst attrs = useAttrs();\n\nconst props = defineProps({\n type: {\n type: String,\n default: 'submit',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n variant: {\n type: String,\n default: 'default',\n },\n size: {\n type: String,\n default: 'default',\n },\n});\n\nconst variantClasses = {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-neutral-300 text-neutral-900 hover:bg-neutral-300/80 dark:bg-secondary dark:text-secondary-foreground dark:hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n success:\n 'bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-600 dark:text-white dark:hover:bg-emerald-600/90',\n tertiary:\n 'border border-neutral-200 bg-white text-neutral-900 shadow-xs hover:bg-neutral-50 dark:border-neutral-200 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-100',\n warning:\n 'bg-amber-100 text-amber-700 hover:bg-amber-100/90 focus-visible:ring-amber-500/20 dark:bg-amber-600/20 dark:text-neutral-50 dark:hover:bg-amber-600/30 dark:focus-visible:ring-amber-500/40',\n danger:\n 'bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:text-destructive-foreground dark:hover:bg-destructive/25',\n 'warning-solid':\n 'bg-amber-500 text-white hover:bg-amber-500/90 dark:bg-amber-500 dark:text-white dark:hover:bg-amber-500/90',\n 'danger-solid':\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n};\n\nconst sizeClasses = {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n};\n\nconst resolvedVariant = computed(() => {\n return variantClasses[props.variant] ? props.variant : 'default';\n});\n\nconst resolvedSize = computed(() => {\n return sizeClasses[props.size] ? props.size : 'default';\n});\n\nconst buttonClasses = computed(() => [\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*=size-])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n variantClasses[resolvedVariant.value],\n sizeClasses[resolvedSize.value],\n attrs.class,\n]);\n</script>\n\n<template>\n <button\n v-bind=\"attrs\"\n :type=\"type\"\n :disabled=\"disabled\"\n :class=\"buttonClasses\"\n >\n <slot />\n </button>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nconst emit = defineEmits(['update:checked']);\n\nconst props = defineProps({\n checked: {\n type: [Array, Boolean],\n default: false,\n },\n value: {\n type: String,\n default: null,\n },\n});\n\nconst proxyChecked = computed({\n get() {\n return props.checked;\n },\n\n set(val) {\n emit('update:checked', val);\n },\n});\n</script>\n\n\n<template>\n <input\n v-model=\"proxyChecked\"\n type=\"checkbox\"\n :value=\"value\"\n class=\"rounded border-neutral-300 text-neutral-900 shadow-sm focus:ring-neutral-900 dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-100 dark:focus:ring-neutral-100\"\n >\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps({\n modelValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n value: {\n type: [Boolean, String, Number],\n default: true,\n },\n uncheckedValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n label: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => props.modelValue === props.value);\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = () => {\n hasFocus.value = false;\n};\n\nconst onChange = (event) => {\n emit('update:modelValue', event.target.checked ? props.value : props.uncheckedValue);\n};\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center gap-2 rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors',\n props.ui.root,\n isChecked ? 'border-neutral-900 bg-neutral-900 text-neutral-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-50' : 'border-neutral-200 text-neutral-600 dark:border-neutral-700 dark:text-neutral-300',\n disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer',\n hasFocus && !disabled ? 'ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950' : '',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n :name=\"name\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n >\n <span\n :class=\"[\n 'inline-flex h-4 w-4 items-center justify-center border text-[10px] font-bold leading-none',\n props.ui.control,\n isChecked ? 'border-current bg-white/15 text-current dark:bg-neutral-900/15' : 'border-neutral-400 text-transparent dark:border-neutral-500',\n 'rounded',\n ]\"\n >\n <span :class=\"props.ui.indicator\">✓</span>\n </span>\n <span :class=\"props.ui.label\">{{ label }}</span>\n </label>\n</template>\n","<script setup>\r\nimport { computed, onMounted, ref, useAttrs } from 'vue';\r\nimport { LockClosedIcon } from '@heroicons/vue/24/outline';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'blur']);\r\nconst attrs = useAttrs();\r\nconst input = ref(null);\r\nconst revealed = ref(false);\r\nconst DEFAULT_MAX_LENGTH = 254;\r\n\r\nconst baseType = computed(() => String(attrs.type ?? 'text'));\r\nconst isPasswordField = computed(() => baseType.value === 'password');\r\nconst inputType = computed(() => (isPasswordField.value && revealed.value) ? 'text' : baseType.value);\r\nconst normalizedValue = computed(() => props.modelValue ?? '');\r\n\r\nconst inputAttrs = computed(() => {\r\n const { class: _class, type: _type, ...rest } = attrs;\r\n if (rest.maxlength === undefined) {\r\n rest.maxlength = DEFAULT_MAX_LENGTH;\r\n }\r\n return rest;\r\n});\r\n\r\nconst inputClasses = computed(() => [\r\n 'w-full min-w-0 max-w-full h-[48px] rounded-lg border border-neutral-200 bg-white text-neutral-950 shadow-sm outline-none transition-colors placeholder:text-neutral-400 focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n isPasswordField.value ? 'pr-10 pl-10' : '',\r\n props.ui.input,\r\n]);\r\n\r\nconst toggleVisibility = () => {\r\n revealed.value = !revealed.value;\r\n};\r\n\r\nconst handleWheel = (event) => {\r\n if (inputType.value !== 'number') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const scrollTarget = document.scrollingElement ?? document.documentElement ?? document.body;\r\n if (scrollTarget) {\r\n scrollTarget.scrollTop += event.deltaY;\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n if (input.value?.hasAttribute('autofocus')) {\r\n input.value.focus();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => input.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative flex items-center', props.ui.root]\">\r\n <div\r\n v-if=\"isPasswordField\"\r\n :class=\"['absolute inset-y-0 left-0 flex items-center pointer-events-none pl-3', props.ui.leadingIcon]\"\r\n >\r\n <LockClosedIcon class=\"h-5 w-5 text-neutral-400 dark:text-neutral-200\" />\r\n </div>\r\n <input\r\n ref=\"input\"\r\n v-bind=\"inputAttrs\"\r\n :type=\"inputType\"\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"normalizedValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"emit('update:modelValue', $event.target.value)\"\r\n @blur=\"emit('blur', $event)\"\r\n @wheel=\"handleWheel\"\r\n >\r\n\r\n <button\r\n v-if=\"isPasswordField\"\r\n type=\"button\"\r\n :class=\"['absolute inset-y-0 right-0 flex items-center pr-3 text-neutral-400 transition-colors hover:text-neutral-700 focus:outline-none dark:text-neutral-200 dark:hover:text-neutral-50', props.ui.trailingAction]\"\r\n :aria-label=\"revealed ? 'Hide password' : 'Show password'\"\r\n @click=\"toggleVisibility\"\r\n >\r\n <svg v-if=\"revealed\" class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9.27-3.11-11-7 1.01-2.27 2.78-4.1 5-5.32m3.08-1.3A9.96 9.96 0 0112 5c5 0 9.27 3.11 11 7a11.03 11.03 0 01-4.16 4.91M15 12a3 3 0 00-3-3m0 0a3 3 0 00-2.94 3.59M3 3l18 18\" />\r\n </svg>\r\n <svg v-else class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5s8.268 2.943 9.542 7c-1.274 4.057-5.065 7-9.542 7S3.732 16.057 2.458 12z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed, nextTick, onMounted, ref, useAttrs, watch } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: String,\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\r\n },\r\n autoResize: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\nconst textarea = ref(null);\nconst DEFAULT_MAX_LENGTH = 1000;\n\r\nconst textareaAttrs = computed(() => {\r\n const { class: _class, ...rest } = attrs;\r\n if (rest.maxlength === undefined) {\r\n rest.maxlength = DEFAULT_MAX_LENGTH;\r\n }\r\n if (rest.rows === undefined) {\r\n rest.rows = 1;\r\n }\r\n return rest;\r\n});\r\n\r\nconst textareaClasses = computed(() => [\n 'w-full min-w-0 max-w-full min-h-[48px] rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors placeholder:text-neutral-400 focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\n props.autoResize ? 'resize-none overflow-y-hidden' : 'resize-y',\n attrs.class,\n props.ui.textarea ?? props.ui.input,\n]);\n\nconst resizeTextarea = () => {\n if (!props.autoResize || !textarea.value) {\n return;\n }\n\n const computedStyles = window.getComputedStyle(textarea.value);\n const minHeight = Number.parseFloat(computedStyles.minHeight) || 0;\n\n textarea.value.style.height = 'auto';\n textarea.value.style.height = `${Math.max(textarea.value.scrollHeight, minHeight)}px`;\n};\n\r\nconst updateValue = (event) => {\r\n emit('update:modelValue', event.target.value);\r\n resizeTextarea();\r\n};\r\n\r\nonMounted(() => {\r\n if (textarea.value?.hasAttribute('autofocus')) {\r\n textarea.value.focus();\r\n }\r\n\r\n nextTick(() => {\r\n resizeTextarea();\r\n });\r\n});\r\n\r\nwatch(() => props.modelValue, () => {\r\n nextTick(() => {\r\n resizeTextarea();\r\n });\r\n});\r\n\r\ndefineExpose({ focus: () => textarea.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"props.ui.root\">\r\n <textarea\r\n ref=\"textarea\"\r\n v-bind=\"textareaAttrs\"\r\n :class=\"[textareaClasses, (props.disabled ? props.disabledClass : '')]\"\r\n :value=\"props.modelValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"updateValue\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, watch } from 'vue';\r\nimport { ChevronDownIcon, XMarkIcon } from '@heroicons/vue/24/outline';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: '',\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n options: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: 'name',\r\n },\r\n valueKey: {\r\n type: String,\r\n default: 'id',\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: 'deleted_at',\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: 'block w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-950 dark:text-neutral-50',\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-950 dark:text-neutral-50',\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-500 dark:text-neutral-200',\r\n },\r\n dropdownClass: {\r\n type: [String, Array, Object],\r\n default: 'z-50 max-h-60 overflow-auto rounded-lg border border-neutral-200 bg-white shadow-xl dark:border-neutral-800 dark:bg-neutral-950',\r\n },\r\n dropdownOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'cursor-pointer px-4 py-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-900',\r\n },\r\n dropdownSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-neutral-100 font-medium text-neutral-950 dark:bg-neutral-900 dark:text-neutral-50',\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-slate-50 text-slate-900 dark:bg-neutral-800 dark:text-neutral-50',\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: 'Search...',\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: 'w-full border-b border-neutral-200 px-4 py-3 text-sm outline-none focus:border-neutral-900 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100',\r\n },\r\n noOptionsText: {\r\n type: String,\r\n default: 'No options available',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\n\r\nconst isOpen = ref(false);\nconst rootRef = ref(null);\nconst triggerRef = ref(null);\nconst triggerValueRef = ref(null);\nconst dropdownMenuRef = ref(null);\nconst dropdownStyle = ref({\n position: 'absolute',\n left: '0px',\n top: '0px',\n visibility: 'hidden',\n});\nconst teleportTarget = ref('body');\nconst isDarkMode = ref(false);\nconst isMounted = ref(false);\nconst isDropdownReady = ref(false);\nconst searchQuery = ref('');\nconst searchInputRef = ref(null);\nconst highlightedOptionValue = ref(null);\nconst typeaheadQuery = ref('');\nconst isSelectingTriggerValue = ref(false);\nconst triggerValuePointerActive = ref(false);\nconst triggerValuePointerStartX = ref(0);\nconst shouldSuppressTriggerClick = ref(false);\nlet typeaheadResetTimeout = null;\nlet positionFrame = null;\nlet revealFrame = null;\nlet resizeObserver = null;\n\r\nconst isObjectOption = (option) => typeof option === 'object' && option !== null;\r\n\r\nconst optionValue = (option) => {\r\n if (isObjectOption(option)) {\r\n return option[props.valueKey];\r\n }\r\n\r\n return option;\r\n};\r\n\r\nconst optionText = (option) => {\r\n if (props.optionLabel) {\r\n return props.optionLabel(option);\r\n }\r\n\r\n if (isObjectOption(option)) {\r\n return option[props.labelKey] ?? option[props.valueKey] ?? '';\r\n }\r\n\r\n return option;\r\n};\r\n\r\nconst optionDeleted = (option) => {\r\n if (!props.softDeleteAware || !isObjectOption(option)) {\r\n return false;\r\n }\r\n\r\n return Boolean(option[props.deletedKey]);\r\n};\r\n\r\nconst modelValueArray = computed(() => (\r\n Array.isArray(props.modelValue) ? props.modelValue : []\r\n));\r\n\r\nconst modelValueAsString = computed(() => String(props.modelValue ?? ''));\r\nconst modelValueSet = computed(() => new Set(modelValueArray.value.map((value) => String(value))));\r\n\r\nconst selectedDeletedOption = computed(() => {\r\n if (props.multiple || !props.softDeleteAware || modelValueAsString.value === '') {\r\n return null;\r\n }\r\n\r\n return props.options.find((option) => (\r\n optionDeleted(option) && String(optionValue(option) ?? '') === modelValueAsString.value\r\n )) ?? null;\r\n});\r\n\r\nconst availableOptions = computed(() => {\r\n if (!props.softDeleteAware) {\r\n return props.options;\r\n }\r\n\r\n return props.options.filter((option) => !optionDeleted(option));\r\n});\r\n\r\nconst selectedDeletedOptions = computed(() => {\r\n if (!props.softDeleteAware || !props.multiple || modelValueSet.value.size === 0) {\r\n return [];\r\n }\r\n\r\n return props.options.filter((option) => (\r\n optionDeleted(option) && modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n ));\r\n});\r\n\r\nconst multipleOptions = computed(() => {\r\n if (!props.multiple) {\r\n return availableOptions.value;\r\n }\r\n\r\n const seen = new Set();\r\n\r\n return [...selectedDeletedOptions.value, ...availableOptions.value].filter((option) => {\r\n const key = String(optionValue(option) ?? '');\r\n\r\n if (seen.has(key)) {\r\n return false;\r\n }\r\n\r\n seen.add(key);\r\n return true;\r\n });\r\n});\r\n\r\nconst filteredOptions = computed(() => {\r\n if (!props.searchable || !searchQuery.value) {\r\n return props.multiple ? multipleOptions.value : availableOptions.value;\r\n }\r\n\r\n const query = searchQuery.value.toLowerCase();\r\n const options = props.multiple ? multipleOptions.value : availableOptions.value;\r\n\r\n return options.filter((option) => {\r\n const text = String(optionText(option)).toLowerCase();\r\n return text.includes(query);\r\n });\r\n});\r\n\r\nconst selectedMultipleOptions = computed(() => {\r\n if (!props.multiple || modelValueSet.value.size === 0) {\r\n return [];\r\n }\r\n\r\n return multipleOptions.value.filter((option) => (\r\n modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n ));\r\n});\r\n\r\nconst hasVisibleOptions = computed(() => filteredOptions.value.length > 0);\r\nconst visibleOptions = computed(() => filteredOptions.value);\r\n\r\nconst canClearSelection = computed(() => (\r\n !props.multiple\r\n && !props.placeholderDisabled\r\n && !props.disabled\r\n && props.modelValue !== null\r\n && props.modelValue !== undefined\r\n && props.modelValue !== ''\r\n));\r\n\r\nconst triggerClasses = computed(() => [\n props.baseClass,\n (selectedDeletedOption.value || (props.multiple && selectedMultipleOptions.value.some(optionDeleted))) ? props.deletedSelectedClass : props.normalTextClass,\n { 'text-neutral-50': isDarkMode.value && !(selectedDeletedOption.value || (props.multiple && selectedMultipleOptions.value.some(optionDeleted))) },\n 'flex h-[48px] min-w-0 items-center justify-between gap-2 cursor-pointer',\n attrs.class,\n props.ui.trigger,\n]);\n\nconst triggerValueClasses = computed(() => [\n isSelectingTriggerValue.value\n ? 'block min-w-0 flex-1 cursor-text select-text overflow-x-auto whitespace-nowrap [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden'\n : 'block min-w-0 flex-1 truncate',\n ((props.multiple && selectedMultipleOptions.value.length === 0) || (!props.multiple && !props.modelValue)) && props.placeholder ? props.placeholderClass : null,\n ((props.multiple && selectedMultipleOptions.value.length === 0) || (!props.multiple && !props.modelValue)) ? props.ui.placeholder : props.ui.value,\n]);\n\r\nconst clearButtonClasses = computed(() => [\r\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full text-neutral-400 transition hover:bg-neutral-100 hover:text-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950/20 dark:hover:bg-neutral-900 dark:hover:text-neutral-200 dark:focus-visible:ring-neutral-100/20',\r\n props.ui.clearButton,\r\n]);\r\n\r\nconst chevronClasses = computed(() => [\r\n 'size-5 text-neutral-400 transition-transform dark:text-neutral-200',\r\n { 'rotate-180': isOpen.value },\r\n props.ui.chevron,\r\n]);\r\n\r\nconst dropdownClasses = computed(() => [\n 'enos-default-custom-select-dropdown',\n props.dropdownClass,\n { 'bg-neutral-950 border-neutral-800': isDarkMode.value },\n props.ui.dropdown,\n]);\r\n\r\nconst searchInputClasses = computed(() => [\r\n props.searchInputClass,\r\n props.ui.searchInput,\r\n]);\r\n\r\nconst emptyStateClasses = computed(() => [\r\n props.dropdownOptionClass,\r\n props.placeholderClass,\r\n 'cursor-default',\r\n props.ui.option,\r\n props.ui.placeholder,\r\n]);\r\n\r\nconst optionClasses = (option) => [\r\n props.dropdownOptionClass,\r\n optionDeleted(option) ? props.deletedOptionClass : props.optionClass,\r\n props.ui.option,\r\n { 'text-neutral-50': isDarkMode.value && !optionDeleted(option) },\r\n {\r\n [props.dropdownHighlightedClass]: optionIsHighlighted(option),\r\n [props.dropdownSelectedClass]: props.multiple\r\n ? optionIsSelected(option)\r\n : optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue),\r\n 'rounded-b-lg': option === availableOptions.value[availableOptions.value.length - 1],\r\n 'rounded-lg': availableOptions.value.length === 1,\r\n },\r\n optionIsHighlighted(option) ? props.ui.optionHighlighted : null,\r\n (props.multiple\r\n ? optionIsSelected(option)\r\n : optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue))\r\n ? props.ui.optionSelected\r\n : null,\r\n];\r\n\r\nconst displayText = computed(() => {\r\n if (props.multiple) {\r\n if (selectedMultipleOptions.value.length === 0) {\r\n return props.placeholder;\r\n }\r\n\r\n return selectedMultipleOptions.value.map((option) => optionText(option)).join(', ');\r\n }\r\n\r\n if ((props.modelValue === null || props.modelValue === undefined) ||\r\n (props.modelValue === '' && !props.options.some((option) => optionValue(option) === ''))) {\r\n return props.placeholder;\r\n }\r\n\r\n const selectedOption = props.options.find((option) => {\r\n const optionVal = optionValue(option);\r\n return optionVal === props.modelValue || String(optionVal) === String(props.modelValue);\r\n });\r\n\r\n return selectedOption ? optionText(selectedOption) : props.modelValue;\r\n});\r\n\r\nconst normalizeEmittedValue = (value) => {\r\n if (props.modelModifiers.number) {\r\n if (value === '') {\r\n return '';\r\n }\r\n\r\n return Number(value);\r\n }\r\n\r\n return value;\r\n};\r\n\r\nconst normalizeEmittedValues = (values) => values.map((value) => normalizeEmittedValue(value));\r\n\r\nconst optionIsSelected = (option) => (\r\n modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n);\r\n\r\nconst optionIsHighlighted = (option) => (\r\n highlightedOptionValue.value === String(optionValue(option) ?? '')\r\n);\r\n\r\nconst hasTriggerValueSelection = () => {\n const selection = window.getSelection();\n\n if (!selection || selection.isCollapsed || !triggerValueRef.value) {\n return false;\n }\n\n const { anchorNode, focusNode } = selection;\n\n return (\n (anchorNode && triggerValueRef.value.contains(anchorNode))\n || (focusNode && triggerValueRef.value.contains(focusNode))\n );\n};\n\nconst syncTriggerValueSelection = () => {\n if (triggerValuePointerActive.value) {\n isSelectingTriggerValue.value = true;\n return;\n }\n\n isSelectingTriggerValue.value = hasTriggerValueSelection();\n\n if (!isSelectingTriggerValue.value && triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n};\n\nconst autoScrollTriggerValue = (clientX) => {\n if (!triggerValueRef.value) {\n return;\n }\n\n const rect = triggerValueRef.value.getBoundingClientRect();\n const threshold = 24;\n const maxStep = 18;\n\n if (clientX > rect.right - threshold) {\n const ratio = Math.min((clientX - (rect.right - threshold)) / threshold, 1);\n triggerValueRef.value.scrollLeft += Math.ceil(ratio * maxStep);\n return;\n }\n\n if (clientX < rect.left + threshold) {\n const ratio = Math.min(((rect.left + threshold) - clientX) / threshold, 1);\n triggerValueRef.value.scrollLeft -= Math.ceil(ratio * maxStep);\n }\n};\n\nconst handleTriggerValuePointerDown = (event) => {\n if (event.button !== 0) {\n return;\n }\n\n triggerValuePointerActive.value = true;\n triggerValuePointerStartX.value = event.clientX;\n shouldSuppressTriggerClick.value = false;\n isSelectingTriggerValue.value = true;\n};\n\nconst handleTriggerValuePointerMove = (event) => {\n if (!triggerValuePointerActive.value) {\n return;\n }\n\n if (Math.abs(event.clientX - triggerValuePointerStartX.value) > 4) {\n shouldSuppressTriggerClick.value = true;\n }\n\n autoScrollTriggerValue(event.clientX);\n};\n\nconst handleTriggerValuePointerUp = () => {\n if (!triggerValuePointerActive.value) {\n return;\n }\n\n triggerValuePointerActive.value = false;\n\n window.setTimeout(() => {\n syncTriggerValueSelection();\n }, 0);\n};\n\nconst resetTriggerValueSelectionState = () => {\n isSelectingTriggerValue.value = false;\n triggerValuePointerActive.value = false;\n shouldSuppressTriggerClick.value = false;\n\n if (triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n};\n\nconst toggleDropdown = () => {\n if (shouldSuppressTriggerClick.value || hasTriggerValueSelection()) {\n shouldSuppressTriggerClick.value = false;\n return;\n }\n\n if (!props.disabled) {\n isOpen.value = !isOpen.value;\n }\n};\n\nconst findModalScrollContainer = (modal) => {\n let element = rootRef.value?.parentElement ?? null;\n\n while (element && element !== modal) {\n const styles = window.getComputedStyle(element);\n const canScrollVertically = /(auto|scroll|overlay)/.test(styles.overflowY)\n && element.scrollHeight > element.clientHeight;\n const canScrollHorizontally = /(auto|scroll|overlay)/.test(styles.overflowX)\n && element.scrollWidth > element.clientWidth;\n\n if (canScrollVertically || canScrollHorizontally) {\n return element;\n }\n\n element = element.parentElement;\n }\n\n return modal;\n};\n\nconst syncTeleportTarget = () => {\n const modal = rootRef.value?.closest(\n 'dialog, [role=\"dialog\"], [data-dismissable-layer]',\n );\n\n teleportTarget.value = modal\n ? findModalScrollContainer(modal)\n : document.body;\n};\n\r\nconst selectOption = (option) => {\r\n const value = optionValue(option);\r\n emit('update:modelValue', normalizeEmittedValue(value));\r\n isOpen.value = false;\r\n};\r\n\r\nconst clearSelection = () => {\r\n if (canClearSelection.value) {\r\n emit('update:modelValue', normalizeEmittedValue(''));\r\n isOpen.value = false;\r\n }\r\n};\r\n\r\nconst toggleMultipleOption = (option) => {\n const normalizedValue = normalizeEmittedValue(optionValue(option));\r\n const currentValues = [...modelValueArray.value];\r\n const selectedIndex = currentValues.findIndex((value) => (\r\n String(value) === String(normalizedValue)\r\n ));\r\n\r\n if (selectedIndex >= 0) {\r\n currentValues.splice(selectedIndex, 1);\r\n } else {\r\n currentValues.push(normalizedValue);\r\n }\r\n\r\n emit('update:modelValue', normalizeEmittedValues(currentValues));\n};\n\nconst measureNaturalDropdownWidth = () => {\n if (!dropdownMenuRef.value) {\n return 0;\n }\n\n const currentWidth = dropdownMenuRef.value.style.width;\n dropdownMenuRef.value.style.width = 'max-content';\n const naturalWidth = Math.ceil(dropdownMenuRef.value.getBoundingClientRect().width);\n dropdownMenuRef.value.style.width = currentWidth;\n\n return naturalWidth;\n};\n\nconst updateDropdownPosition = () => {\n if (!isOpen.value || !triggerRef.value || !dropdownMenuRef.value) {\n return;\n }\n\n const rect = triggerRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 8;\n const portalElement = teleportTarget.value instanceof HTMLElement ? teleportTarget.value : null;\n const isBodyPortal = !portalElement || portalElement === document.body;\n const portalRect = isBodyPortal ? null : portalElement.getBoundingClientRect();\n const portalScrollLeft = isBodyPortal ? window.scrollX : portalElement.scrollLeft;\n const portalScrollTop = isBodyPortal ? window.scrollY : portalElement.scrollTop;\n const triggerIsVisible = rect.bottom > 0\n && rect.top < viewportHeight\n && rect.right > 0\n && rect.left < viewportWidth;\n\n if (!triggerIsVisible) {\n dropdownStyle.value = {\n ...dropdownStyle.value,\n visibility: 'hidden',\n };\n return;\n }\n\n const spaceBelow = Math.max(viewportHeight - rect.bottom - gap, 0);\n const spaceAbove = Math.max(rect.top - gap, 0);\n const measuredHeight = dropdownMenuRef.value.offsetHeight;\n const shouldOpenUpward = measuredHeight > spaceBelow && spaceAbove > spaceBelow;\n const availableSpace = shouldOpenUpward ? spaceAbove : spaceBelow;\n const maxHeight = Math.min(240, availableSpace);\n const menuHeight = Math.min(measuredHeight || maxHeight, maxHeight);\n const maxWidth = Math.max(viewportWidth - (gap * 2), 0);\n const naturalWidth = measureNaturalDropdownWidth();\n const width = Math.min(Math.max(rect.width, 160, naturalWidth), maxWidth);\n const leftInViewport = Math.max(gap, Math.min(rect.left, viewportWidth - width - gap));\n const left = isBodyPortal\n ? leftInViewport + window.scrollX\n : leftInViewport - portalRect.left + portalScrollLeft;\n const triggerTop = isBodyPortal\n ? rect.top + window.scrollY\n : rect.top - portalRect.top + portalScrollTop;\n const triggerBottom = isBodyPortal\n ? rect.bottom + window.scrollY\n : rect.bottom - portalRect.top + portalScrollTop;\n const top = shouldOpenUpward\n ? triggerTop - menuHeight - 1\n : triggerBottom - 1;\n\n dropdownStyle.value = {\n position: 'absolute',\n left: `${left}px`,\n top: `${Math.max(portalScrollTop + gap, top)}px`,\n width: `${width}px`,\n maxHeight: `${maxHeight}px`,\n pointerEvents: 'auto',\n zIndex: '2147483647',\n visibility: isDropdownReady.value ? 'visible' : 'hidden',\n };\n};\n\nconst scheduleDropdownPositionUpdate = () => {\n if (!isOpen.value || positionFrame !== null) {\n return;\n }\n\n positionFrame = window.requestAnimationFrame(() => {\n positionFrame = null;\n updateDropdownPosition();\n });\n};\n\nconst cancelDropdownFrames = () => {\n if (positionFrame !== null) {\n window.cancelAnimationFrame(positionFrame);\n positionFrame = null;\n }\n\n if (revealFrame !== null) {\n window.cancelAnimationFrame(revealFrame);\n revealFrame = null;\n }\n};\n\nconst disconnectResizeObserver = () => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n};\n\nconst refreshDropdownPosition = async () => {\n if (!isOpen.value) {\n return;\n }\n\n cancelDropdownFrames();\n isDropdownReady.value = false;\n dropdownStyle.value = {\n ...dropdownStyle.value,\n visibility: 'hidden',\n };\n\n await nextTick();\n updateDropdownPosition();\n\n if (typeof ResizeObserver !== 'undefined') {\n disconnectResizeObserver();\n resizeObserver = new ResizeObserver(scheduleDropdownPositionUpdate);\n resizeObserver.observe(triggerRef.value);\n resizeObserver.observe(dropdownMenuRef.value);\n }\n\n revealFrame = window.requestAnimationFrame(() => {\n revealFrame = null;\n\n if (!isOpen.value) {\n return;\n }\n\n isDropdownReady.value = true;\n updateDropdownPosition();\n });\n};\n\r\nconst closeDropdown = (event) => {\n const clickedInsideTrigger = rootRef.value?.contains(event.target);\n const clickedInsideMenu = dropdownMenuRef.value?.contains(event.target);\n\n if (!clickedInsideTrigger && !clickedInsideMenu) {\n isOpen.value = false;\n resetTriggerValueSelectionState();\n searchQuery.value = '';\n highlightedOptionValue.value = null;\n typeaheadQuery.value = '';\n }\n};\n\nconst updateDropdownOnModalScroll = () => {\n if (!isOpen.value) {\n return;\n }\n\n if (!rootRef.value?.closest('dialog, [role=\"dialog\"], [data-dismissable-layer]')) {\n return;\n }\n\n scheduleDropdownPositionUpdate();\n};\n\r\nconst syncDarkMode = () => {\r\n if (rootRef.value?.closest('.dark')) {\r\n isDarkMode.value = true;\r\n return;\r\n }\r\n\r\n isDarkMode.value = document.documentElement.classList.contains('dark') || document.body.classList.contains('dark');\r\n};\r\n\r\nconst darkTextStyle = computed(() => (isDarkMode.value ? { color: '#ffffff' } : null));\r\n\r\nconst clearTypeaheadQuery = () => {\r\n typeaheadQuery.value = '';\r\n\r\n if (typeaheadResetTimeout) {\r\n window.clearTimeout(typeaheadResetTimeout);\r\n typeaheadResetTimeout = null;\r\n }\r\n};\r\n\r\nconst scheduleTypeaheadReset = () => {\r\n if (typeaheadResetTimeout) {\r\n window.clearTimeout(typeaheadResetTimeout);\r\n }\r\n\r\n typeaheadResetTimeout = window.setTimeout(() => {\r\n typeaheadQuery.value = '';\r\n typeaheadResetTimeout = null;\r\n }, 700);\r\n};\r\n\r\nconst escapeSelectorValue = (value) => {\r\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\r\n return CSS.escape(value);\r\n }\r\n\r\n return value.replace(/[\"\\\\]/g, '\\\\$&');\r\n};\r\n\r\nconst scrollOptionByValue = async (value) => {\r\n await nextTick();\r\n\r\n if (!dropdownMenuRef.value) {\r\n return null;\r\n }\r\n\r\n const optionElement = dropdownMenuRef.value.querySelector(\r\n `[data-option-value=\"${escapeSelectorValue(value)}\"]`,\r\n );\r\n\r\n if (!optionElement) {\r\n return null;\r\n }\r\n\r\n optionElement.scrollIntoView({ block: 'nearest' });\r\n return optionElement;\r\n};\r\n\r\nconst focusOptionByValue = async (value) => {\r\n const optionElement = await scrollOptionByValue(value);\r\n\r\n if (!optionElement) {\r\n return;\r\n }\r\n\r\n optionElement.focus({ preventScroll: true });\r\n};\r\n\r\nconst setHighlightedOption = async (option, { focus = !props.searchable } = {}) => {\r\n const value = String(optionValue(option) ?? '');\r\n highlightedOptionValue.value = value;\r\n\r\n if (focus) {\r\n await focusOptionByValue(value);\r\n return;\r\n }\r\n\r\n await scrollOptionByValue(value);\r\n};\r\n\r\nconst findMatchingOption = (query) => {\r\n const normalizedQuery = query.trimStart().toLowerCase();\r\n\r\n if (!normalizedQuery) {\r\n return null;\r\n }\r\n\r\n const options = props.multiple ? multipleOptions.value : availableOptions.value;\r\n\r\n return options.find((option) => (\r\n String(optionText(option)).toLowerCase().startsWith(normalizedQuery)\r\n )) ?? null;\r\n};\r\n\r\nconst findHighlightedOptionIndex = () => {\r\n return visibleOptions.value.findIndex((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n};\r\n\r\nconst moveHighlightedOption = async (direction) => {\r\n if (!visibleOptions.value.length) {\r\n return;\r\n }\r\n\r\n const currentIndex = findHighlightedOptionIndex();\r\n const fallbackIndex = direction > 0 ? 0 : visibleOptions.value.length - 1;\r\n const nextIndex = currentIndex === -1\r\n ? fallbackIndex\r\n : (currentIndex + direction + visibleOptions.value.length) % visibleOptions.value.length;\r\n\r\n await setHighlightedOption(visibleOptions.value[nextIndex]);\r\n};\r\n\r\nconst selectHighlightedOption = () => {\r\n const highlightedOption = visibleOptions.value.find((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n\r\n if (!highlightedOption) {\r\n return;\r\n }\r\n\r\n if (props.multiple) {\r\n toggleMultipleOption(highlightedOption);\r\n return;\r\n }\r\n\r\n selectOption(highlightedOption);\r\n};\r\n\r\nconst syncHighlightedOption = async () => {\r\n if (!visibleOptions.value.length) {\r\n highlightedOptionValue.value = null;\r\n return;\r\n }\r\n\r\n const hasCurrentHighlight = visibleOptions.value.some((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n\r\n if (hasCurrentHighlight) {\r\n await setHighlightedOption(\r\n visibleOptions.value.find((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n )),\r\n { focus: false },\r\n );\r\n return;\r\n }\r\n\r\n await setHighlightedOption(visibleOptions.value[0], { focus: false });\r\n};\r\n\r\nconst handleTypeaheadKeydown = (event) => {\r\n if (!isOpen.value || props.searchable) {\r\n return;\r\n }\r\n\r\n if (event.ctrlKey || event.altKey || event.metaKey || event.key.length !== 1) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n const targetInsideSelect = rootRef.value?.contains(target) || dropdownMenuRef.value?.contains(target);\r\n\r\n if (!targetInsideSelect) {\r\n return;\r\n }\r\n\r\n typeaheadQuery.value += event.key;\r\n scheduleTypeaheadReset();\r\n\r\n const matchingOption = findMatchingOption(typeaheadQuery.value);\r\n\r\n if (!matchingOption) {\r\n return;\r\n }\r\n\r\n setHighlightedOption(matchingOption);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n};\r\n\r\nconst handleDropdownKeydown = (event) => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n const targetInsideSelect = rootRef.value?.contains(target) || dropdownMenuRef.value?.contains(target);\r\n\r\n if (!targetInsideSelect) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n isOpen.value = false;\r\n triggerRef.value?.focus();\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n moveHighlightedOption(1);\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n moveHighlightedOption(-1);\r\n return;\r\n }\r\n\r\n if (event.key === 'Enter' && highlightedOptionValue.value !== null) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n selectHighlightedOption();\r\n }\r\n};\r\n\r\nconst handleOptionKeydown = (event, option) => {\r\n if (event.key !== 'Enter' && event.key !== ' ') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (props.multiple) {\r\n toggleMultipleOption(option);\r\n return;\r\n }\r\n\r\n selectOption(option);\r\n};\r\n\r\nonMounted(() => {\n isMounted.value = true;\n syncTeleportTarget();\n syncDarkMode();\n document.addEventListener('click', closeDropdown);\n document.addEventListener('pointermove', handleTriggerValuePointerMove);\n document.addEventListener('pointerup', handleTriggerValuePointerUp);\n document.addEventListener('selectionchange', syncTriggerValueSelection);\n document.addEventListener('keydown', handleDropdownKeydown, true);\n document.addEventListener('keydown', handleTypeaheadKeydown, true);\n window.addEventListener('resize', scheduleDropdownPositionUpdate);\n document.addEventListener('scroll', updateDropdownOnModalScroll, true);\n});\n\nonBeforeUnmount(() => {\n cancelDropdownFrames();\n disconnectResizeObserver();\n clearTypeaheadQuery();\n document.removeEventListener('click', closeDropdown);\n document.removeEventListener('pointermove', handleTriggerValuePointerMove);\n document.removeEventListener('pointerup', handleTriggerValuePointerUp);\n document.removeEventListener('selectionchange', syncTriggerValueSelection);\n document.removeEventListener('keydown', handleDropdownKeydown, true);\n document.removeEventListener('keydown', handleTypeaheadKeydown, true);\n window.removeEventListener('resize', scheduleDropdownPositionUpdate);\n document.removeEventListener('scroll', updateDropdownOnModalScroll, true);\n});\n\r\nwatch(isOpen, async (open) => {\n if (!open) {\n cancelDropdownFrames();\n disconnectResizeObserver();\n isDropdownReady.value = false;\n resetTriggerValueSelectionState();\n searchQuery.value = '';\n highlightedOptionValue.value = null;\n clearTypeaheadQuery();\n return;\n }\r\n\r\n clearTypeaheadQuery();\n syncTeleportTarget();\n syncDarkMode();\n await refreshDropdownPosition();\n\r\n if (props.searchable) {\r\n await nextTick();\r\n await syncHighlightedOption();\r\n searchInputRef.value?.focus();\r\n return;\r\n }\r\n\r\n const initialOption = props.multiple\r\n ? selectedMultipleOptions.value[0] ?? multipleOptions.value[0]\r\n : props.options.find((option) => (\r\n optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue)\r\n )) ?? availableOptions.value[0];\r\n\r\n if (initialOption) {\r\n await setHighlightedOption(initialOption);\r\n }\r\n});\r\n\r\nwatch(filteredOptions, async () => {\n if (!isOpen.value || !props.searchable) {\n return;\n }\n\n await syncHighlightedOption();\n scheduleDropdownPositionUpdate();\n});\n\nwatch(() => props.modelValue, () => {\n if (!isSelectingTriggerValue.value && triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n});\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"rootRef\"\r\n :class=\"['relative', props.ui.root]\"\r\n @click=\"toggleDropdown\"\r\n >\r\n <div\r\n ref=\"triggerRef\"\r\n :class=\"triggerClasses\"\r\n v-bind=\"attrs\"\r\n tabindex=\"0\"\n >\n <span\n ref=\"triggerValueRef\"\n :class=\"triggerValueClasses\"\n :style=\"darkTextStyle\"\n @pointerdown=\"handleTriggerValuePointerDown\"\n >\n {{ displayText }}\n </span>\n <div class=\"flex h-5 shrink-0 items-center gap-1\">\n <button\r\n v-if=\"canClearSelection\"\r\n type=\"button\"\r\n :class=\"clearButtonClasses\"\r\n aria-label=\"Clear selection\"\r\n @click.stop.prevent=\"clearSelection\"\r\n @pointerdown.stop\r\n >\r\n <XMarkIcon class=\"size-4\" />\r\n </button>\r\n <ChevronDownIcon\r\n :class=\"chevronClasses\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <Teleport :to=\"teleportTarget\" v-if=\"isMounted\">\n <transition\n enter-active-class=\"transition-opacity duration-150 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-100 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\r\n v-if=\"isOpen\"\r\n ref=\"dropdownMenuRef\"\r\n :class=\"[{ dark: isDarkMode }, props.ui.dropdownRoot]\"\r\n :style=\"dropdownStyle\"\r\n >\r\n <div\n :class=\"dropdownClasses\"\n :style=\"{ maxHeight: dropdownStyle.maxHeight }\"\n >\n <input\r\n v-if=\"searchable\"\r\n ref=\"searchInputRef\"\r\n v-model=\"searchQuery\"\r\n type=\"text\"\r\n :placeholder=\"searchPlaceholder\"\r\n :class=\"searchInputClasses\"\r\n @click.stop\r\n @keydown.stop\r\n >\r\n <div\r\n v-if=\"selectedDeletedOption\"\r\n :class=\"[\r\n dropdownOptionClass,\r\n deletedOptionClass,\r\n dropdownSelectedClass,\r\n ]\"\r\n >\r\n {{ optionText(selectedDeletedOption) }}\r\n </div>\r\n\r\n <div\r\n v-if=\"!hasVisibleOptions\"\r\n :class=\"emptyStateClasses\"\r\n :style=\"darkTextStyle\"\r\n >\r\n {{ noOptionsText }}\r\n </div>\r\n\r\n <div\r\n v-for=\"option in filteredOptions\"\r\n :key=\"String(optionValue(option))\"\r\n :data-option-value=\"String(optionValue(option) ?? '')\"\r\n data-select-option=\"true\"\r\n tabindex=\"-1\"\r\n :class=\"optionClasses(option)\"\r\n @click.stop=\"multiple ? toggleMultipleOption(option) : selectOption(option)\"\r\n @focus=\"highlightedOptionValue = String(optionValue(option) ?? '')\"\r\n @keydown=\"handleOptionKeydown($event, option)\"\r\n >\r\n <div\n v-if=\"multiple\"\n class=\"flex items-center gap-3\"\n >\n <input\r\n type=\"checkbox\"\r\n :class=\"['h-4 w-4 rounded border-neutral-300 text-neutral-900 focus:ring-neutral-900', props.ui.optionControl]\"\r\n :checked=\"optionIsSelected(option)\"\r\n :disabled=\"disabled\"\r\n tabindex=\"-1\"\r\n @click.stop\r\n @change.stop=\"toggleMultipleOption(option)\"\r\n >\r\n <span class=\"shrink-0 whitespace-nowrap\" :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </div>\n <template v-else>\n <span class=\"whitespace-nowrap\" :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n </transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport CustomSelect from './CustomSelect.vue';\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: '',\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n options: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: 'name',\r\n },\r\n valueKey: {\r\n type: String,\r\n default: 'id',\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: 'deleted_at',\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: 'block w-full rounded-lg border border-slate-300 bg-white px-4 py-3 text-sm text-slate-900 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-900 dark:text-neutral-50',\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-900 dark:text-neutral-50',\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-rose-700 dark:text-neutral-100',\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-500 dark:text-neutral-200',\r\n },\r\n dropdownClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-white border border-slate-200 rounded-xl shadow-xl max-h-60 overflow-auto z-50 backdrop-blur-sm dark:bg-neutral-950 dark:border-neutral-800',\r\n },\r\n dropdownOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'px-4 py-3 hover:bg-slate-100 cursor-pointer transition-colors dark:hover:bg-neutral-900',\r\n },\r\n dropdownSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-blue-50 text-blue-700 font-medium dark:bg-neutral-900 dark:text-neutral-50',\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-slate-100 text-slate-900 dark:bg-neutral-800 dark:text-neutral-50',\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: 'Search...',\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: 'w-full border-b border-neutral-200 px-4 py-3 text-sm outline-none focus:border-neutral-900 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100',\r\n },\r\n noOptionsText: {\n type: String,\n default: 'No options available',\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\r\nconst emit = defineEmits(['update:modelValue']);\r\n</script>\r\n\r\n<template>\r\n <CustomSelect\r\n :model-value=\"modelValue\"\r\n :model-modifiers=\"modelModifiers\"\r\n :options=\"options\"\r\n :placeholder=\"placeholder\"\r\n :placeholder-disabled=\"placeholderDisabled\"\r\n :multiple=\"multiple\"\r\n :disabled=\"disabled\"\r\n :soft-delete-aware=\"softDeleteAware\"\r\n :label-key=\"labelKey\"\r\n :value-key=\"valueKey\"\r\n :deleted-key=\"deletedKey\"\r\n :option-label=\"optionLabel\"\r\n :base-class=\"baseClass\"\r\n :normal-text-class=\"normalTextClass\"\r\n :deleted-selected-class=\"deletedSelectedClass\"\r\n :option-class=\"optionClass\"\r\n :deleted-option-class=\"deletedOptionClass\"\r\n :placeholder-class=\"placeholderClass\"\r\n :dropdown-class=\"dropdownClass\"\r\n :dropdown-option-class=\"dropdownOptionClass\"\r\n :dropdown-selected-class=\"dropdownSelectedClass\"\r\n :dropdown-highlighted-class=\"dropdownHighlightedClass\"\r\n :searchable=\"searchable\"\n :search-placeholder=\"searchPlaceholder\"\n :search-input-class=\"searchInputClass\"\n :no-options-text=\"noOptionsText\"\n :ui=\"ui\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n v-bind=\"$attrs\"\n />\n</template>\n","<script setup>\r\nimport { computed, onMounted, ref, useAttrs } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n locale: {\r\n type: String,\r\n default: 'en',\r\n },\r\n withTimestamp: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\nconst input = ref(null);\r\n\r\nconst inputType = computed(() => (props.withTimestamp ? 'datetime-local' : 'date'));\r\nconst normalizedValue = computed(() => props.modelValue ?? '');\r\nconst inputLang = computed(() => {\r\n const lang = attrs.lang;\r\n return typeof lang === 'string' && lang !== '' ? lang : props.locale;\r\n});\r\nconst cappedMax = computed(() => {\r\n const limit = props.withTimestamp ? '9999-12-31T23:59' : '9999-12-31';\r\n const incoming = attrs.max;\r\n if (typeof incoming !== 'string' || incoming === '') {\r\n return limit;\r\n }\r\n\r\n return incoming > limit ? limit : incoming;\r\n});\r\n\r\nconst inputAttrs = computed(() => {\r\n const { class: _class, type: _type, lang: _lang, ...rest } = attrs;\r\n return rest;\r\n});\r\n\r\nconst inputClasses = computed(() => [\r\n 'date-input h-[48px] w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n props.ui.input,\r\n]);\r\n\r\nconst normalizeDateValue = (rawValue) => {\r\n if (typeof rawValue !== 'string') {\r\n return '';\r\n }\r\n\r\n return rawValue.replace(/^(\\d{4})\\d+/, '$1');\r\n};\r\n\r\nconst handleDateInput = (event) => {\r\n const target = event.target;\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const rawValue = String(target.value ?? '');\r\n const normalized = normalizeDateValue(rawValue);\r\n\r\n if (normalized !== rawValue) {\r\n target.value = normalized;\r\n }\r\n\r\n emit('update:modelValue', normalized);\r\n};\r\n\r\nonMounted(() => {\r\n if (input.value?.hasAttribute('autofocus')) {\r\n input.value.focus();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => input.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <input\r\n ref=\"input\"\r\n v-bind=\"inputAttrs\"\r\n :type=\"inputType\"\r\n :lang=\"inputLang\"\r\n :max=\"cappedMax\"\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"normalizedValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"handleDateInput\"\r\n @change=\"handleDateInput\"\r\n >\r\n</template>\r\n\r\n<style scoped>\r\n.date-input {\r\n color-scheme: light;\r\n}\r\n\r\n.dark .date-input {\r\n color-scheme: dark;\r\n}\r\n\r\n.date-input::-webkit-calendar-picker-indicator {\r\n cursor: pointer;\r\n}\r\n\r\n.date-input:disabled::-webkit-calendar-picker-indicator {\r\n cursor: default;\r\n}\r\n</style>\r\n","<script setup>\r\nimport { computed, ref, useAttrs, watch, onMounted, onUnmounted } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: Object,\r\n default: () => ({ start: '', end: '' }),\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n min: {\r\n type: String,\r\n default: '',\r\n },\r\n max: {\r\n type: String,\r\n default: '',\r\n },\r\n minDays: {\r\n type: Number,\r\n default: 0,\r\n },\r\n maxDays: {\r\n type: Number,\r\n default: null,\r\n },\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholder: {\r\n type: String,\r\n default: 'Select date range',\r\n },\r\n locale: {\r\n type: String,\r\n default: 'en',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\n\r\nconst isOpen = ref(false);\r\nconst calendarRef = ref(null);\r\nconst inputRef = ref(null);\r\nconst hoveredDate = ref(null);\r\nconst currentMonth = ref(new Date().getMonth());\r\nconst currentYear = ref(new Date().getFullYear());\r\n\r\nconst startDate = computed(() => props.modelValue?.start ?? '');\r\nconst endDate = computed(() => props.modelValue?.end ?? '');\r\n\r\nconst displayText = computed(() => {\r\n if (!startDate.value && !endDate.value) return props.placeholder;\r\n if (startDate.value && !endDate.value) return startDate.value;\r\n if (!startDate.value && endDate.value) return endDate.value;\r\n return `${startDate.value} - ${endDate.value}`;\r\n});\r\n\r\nconst daysBetween = computed(() => {\r\n if (!startDate.value || !endDate.value) return 0;\r\n const start = new Date(startDate.value);\r\n const end = new Date(endDate.value);\r\n const diffTime = end - start;\r\n // Inclusive counting: May 14 to May 16 = 3 days\r\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1;\r\n});\r\n\r\nconst calendarDays = computed(() => {\r\n const firstDay = new Date(currentYear.value, currentMonth.value, 1);\r\n const lastDay = new Date(currentYear.value, currentMonth.value + 1, 0);\r\n const startDate = new Date(firstDay);\r\n startDate.setDate(startDate.getDate() - firstDay.getDay());\r\n \r\n const days = [];\r\n const current = new Date(startDate);\r\n \r\n while (current <= lastDay || current.getDay() !== 0) {\r\n const currentDate = new Date(current);\r\n days.push({\r\n date: currentDate,\r\n isCurrentMonth: current.getMonth() === currentMonth.value,\r\n isToday: current.toDateString() === new Date().toDateString(),\r\n isSelected: isDateSelected(current),\r\n isInRange: isDateInRange(current),\r\n isStartDate: isDateStart(current),\r\n isEndDate: isDateEnd(current),\r\n isHoveredInRange: isDateInHoveredRange(current),\r\n isDisabled: !isDateAllowed(currentDate),\r\n });\r\n current.setDate(current.getDate() + 1);\r\n if (current.getMonth() > currentMonth.value && current.getDay() === 0) break;\r\n }\r\n \r\n return days;\r\n});\r\n\r\nconst isDateSelected = (date) => {\r\n if (!startDate.value && !endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === startDate.value || dateStr === endDate.value;\r\n};\r\n\r\nconst isDateInRange = (date) => {\r\n if (!startDate.value || !endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr > startDate.value && dateStr < endDate.value;\r\n};\r\n\r\nconst isDateStart = (date) => {\r\n if (!startDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === startDate.value;\r\n};\r\n\r\nconst isDateEnd = (date) => {\r\n if (!endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === endDate.value;\r\n};\r\n\r\nconst isDateInHoveredRange = (date) => {\r\n if (!startDate.value || endDate.value || !hoveredDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n const startStr = startDate.value;\r\n const hoveredStr = hoveredDate.value.toISOString().split('T')[0];\r\n \r\n // Only exclude start date from hover range, allow hovered date to show selection\r\n if (dateStr === startStr) return false;\r\n \r\n return (dateStr > startStr && dateStr <= hoveredStr) || (dateStr < startStr && dateStr >= hoveredStr);\r\n};\r\n\r\nconst isDateInValidRange = (date) => {\r\n if (!startDate.value || endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n const startStr = startDate.value;\r\n \r\n // Check if date is after or equal to start date (allow same day for 1-day range)\r\n if (dateStr < startStr) return false;\r\n \r\n const start = new Date(startStr);\r\n const selected = new Date(dateStr);\r\n // Inclusive counting: same day = 1 day, next day = 2 days\r\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check if within minDays and maxDays constraints (using inclusive counting)\r\n return daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays);\r\n};\r\n\r\nconst inputClasses = computed(() => [\r\n 'date-range-input h-[48px] w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10 cursor-pointer',\r\n attrs.class,\r\n props.ui.trigger,\r\n]);\r\n\r\nconst toggleCalendar = () => {\r\n if (!props.disabled) {\r\n if (isOpen.value) {\r\n // If closing the calendar and we have a partial selection, clear it\r\n if (startDate.value && !endDate.value) {\r\n emit('update:modelValue', { start: '', end: '' });\r\n }\r\n isOpen.value = false;\r\n } else {\r\n isOpen.value = true;\r\n }\r\n }\r\n};\r\n\r\nconst isDateAllowed = (date) => {\r\n const dateStr = date.toISOString().split('T')[0];\r\n \r\n // Check min date constraint\r\n if (props.min && dateStr < props.min) {\r\n return false;\r\n }\r\n \r\n // Check max date constraint\r\n if (props.max && dateStr > props.max) {\r\n return false;\r\n }\r\n \r\n // If we have a start date but no end date, check if this date is valid for end selection\r\n if (startDate.value && !endDate.value) {\r\n // Allow selecting the same day as start date only if minDays is 1 (inclusive: 1 day)\r\n if (dateStr === startDate.value) {\r\n return props.minDays <= 1;\r\n }\r\n return isDateInValidRange(date);\r\n }\r\n \r\n // If we're selecting a start date (no selection yet or complete selection), \r\n // check if this date can be a valid start date considering minDays and max date\r\n if (!startDate.value || (startDate.value && endDate.value)) {\r\n const selected = new Date(dateStr);\r\n \r\n // Check if there are enough days after this date to satisfy minDays\r\n if (props.minDays > 0 && props.max) {\r\n const minEndDate = new Date(selected);\r\n minEndDate.setDate(minEndDate.getDate() + props.minDays);\r\n const minEndStr = minEndDate.toISOString().split('T')[0];\r\n \r\n // If minEndDate is beyond the max date, this start date is too late\r\n if (minEndStr > props.max) {\r\n return false;\r\n }\r\n }\r\n }\r\n \r\n return true;\r\n};\r\n\r\nconst selectDate = (date) => {\r\n const dateStr = date.toISOString().split('T')[0];\r\n \r\n // Special case: if clicking the same day as start date, complete selection with 1-day range\r\n // Only allowed if minDays is 1 or less (inclusive counting: 1 day)\r\n if (startDate.value && !endDate.value && dateStr === startDate.value && props.minDays <= 1) {\r\n emit('update:modelValue', { start: startDate.value, end: dateStr });\r\n isOpen.value = false;\r\n return;\r\n }\r\n \r\n // Check if the selected date is allowed by min/max constraints\r\n if (!isDateAllowed(date)) {\r\n return; // Don't select dates outside min/max range\r\n }\r\n \r\n if (!startDate.value || (startDate.value && endDate.value)) {\r\n // Start new selection\r\n emit('update:modelValue', { start: dateStr, end: '' });\r\n } else if (!endDate.value) {\r\n // Complete selection\r\n const start = new Date(startDate.value);\r\n const selected = new Date(dateStr);\r\n \r\n if (selected < start) {\r\n // If selected date is before start, swap them\r\n // Inclusive counting\r\n const daysDiff = Math.ceil((start - selected) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check constraints for swapped range\r\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\r\n emit('update:modelValue', { start: dateStr, end: startDate.value });\r\n isOpen.value = false;\r\n } else {\r\n // Invalid range, keep original start date and don't close\r\n return;\r\n }\r\n } else {\r\n // Normal selection (including same day)\r\n // Inclusive counting\r\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check constraints using inclusive counting\r\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\r\n emit('update:modelValue', { start: startDate.value, end: dateStr });\r\n isOpen.value = false;\r\n } else {\r\n // Invalid range, keep original start date and don't close\r\n return;\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst closeCalendar = (event) => {\r\n if (calendarRef.value && !calendarRef.value.contains(event.target) && !inputRef.value.contains(event.target)) {\r\n // If we have a start date but no end date, clear the selection\r\n if (startDate.value && !endDate.value) {\r\n emit('update:modelValue', { start: '', end: '' });\r\n }\r\n isOpen.value = false;\r\n }\r\n};\r\n\r\nconst handleDateHover = (date) => {\r\n if (startDate.value && !endDate.value) {\r\n hoveredDate.value = date;\r\n }\r\n};\r\n\r\nconst handleDateLeave = () => {\r\n hoveredDate.value = null;\r\n};\r\n\r\nconst previousMonth = () => {\r\n if (currentMonth.value === 0) {\r\n currentMonth.value = 11;\r\n currentYear.value--;\r\n } else {\r\n currentMonth.value--;\r\n }\r\n};\r\n\r\nconst nextMonth = () => {\r\n if (currentMonth.value === 11) {\r\n currentMonth.value = 0;\r\n currentYear.value++;\r\n } else {\r\n currentMonth.value++;\r\n }\r\n};\r\n\r\nconst goToToday = () => {\r\n const today = new Date();\r\n currentMonth.value = today.getMonth();\r\n currentYear.value = today.getFullYear();\r\n};\r\n\r\nconst clearSelection = () => {\r\n emit('update:modelValue', { start: '', end: '' });\r\n isOpen.value = false;\r\n};\r\n\r\nconst monthNames = computed(() => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n return new Intl.DateTimeFormat(props.locale, { month: 'long' }).format(new Date(2000, i, 1));\r\n });\r\n});\r\n\r\nconst dayNames = computed(() => {\r\n return Array.from({ length: 7 }, (_, i) => {\r\n return new Intl.DateTimeFormat(props.locale, { weekday: 'short' }).format(new Date(2000, 0, i + 2));\r\n });\r\n});\r\n\r\n// Handle click outside to close dropdown\r\nwatch(isOpen, (newValue) => {\r\n if (newValue) {\r\n document.addEventListener('click', closeCalendar);\r\n } else {\r\n document.removeEventListener('click', closeCalendar);\r\n }\r\n});\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('click', closeCalendar);\r\n});\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative', props.ui.root]\">\r\n <label\r\n v-if=\"label\"\r\n :class=\"['text-sm font-medium text-neutral-700 dark:text-neutral-300 mb-1 block', props.ui.label]\"\r\n >\r\n {{ label }}\r\n </label>\r\n <input\r\n ref=\"inputRef\"\r\n readonly\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"displayText\"\r\n :disabled=\"props.disabled\"\r\n @click=\"toggleCalendar\"\r\n >\r\n \r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"calendarRef\"\r\n :class=\"['absolute top-full left-0 z-50 mt-1 w-80 rounded-lg border border-neutral-200 bg-white shadow-xl dark:border-neutral-800 dark:bg-neutral-950', props.ui.panel]\"\r\n @click.stop\r\n >\r\n <div :class=\"['p-4', props.ui.panelContent]\">\r\n <div :class=\"['mb-4 flex items-center justify-between', props.ui.header]\">\r\n <button\r\n type=\"button\"\r\n :class=\"['p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors', props.ui.navButton]\"\r\n @click=\"previousMonth\"\r\n >\r\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n \r\n <div :class=\"['text-sm font-medium text-neutral-900 dark:text-neutral-50', props.ui.monthLabel]\">\r\n {{ monthNames[currentMonth] }} {{ currentYear }}\r\n </div>\r\n \r\n <button\r\n type=\"button\"\r\n :class=\"['p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors', props.ui.navButton]\"\r\n @click=\"nextMonth\"\r\n >\r\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n <div :class=\"['grid grid-cols-7 gap-1 mb-2', props.ui.weekdays]\">\r\n <div\r\n v-for=\"day in dayNames\"\r\n :key=\"day\"\r\n :class=\"['text-xs font-medium text-neutral-500 dark:text-neutral-400 text-center py-1', props.ui.weekday]\"\r\n >\r\n {{ day }}\r\n </div>\r\n </div>\r\n \r\n <div class=\"grid grid-cols-7 gap-1\">\r\n <div\r\n v-for=\"day in calendarDays\"\r\n :key=\"day.date.toISOString()\"\r\n class=\"relative\"\r\n >\r\n <button\r\n type=\"button\"\r\n :class=\"[\r\n 'w-8 h-8 text-xs rounded transition-colors',\r\n props.ui.day,\r\n day.isToday && !day.isSelected ? props.ui.dayToday : null,\r\n day.isDisabled ? props.ui.dayDisabled : null,\r\n day.isSelected ? props.ui.daySelected : null,\r\n day.isInRange ? props.ui.dayInRange : null,\r\n day.isHoveredInRange ? props.ui.dayHovered : null,\r\n {\r\n 'text-neutral-400 dark:text-neutral-600': !day.isCurrentMonth,\r\n 'text-neutral-900 dark:text-neutral-50': day.isCurrentMonth && !day.isDisabled,\r\n 'text-neutral-300 dark:text-neutral-500 cursor-not-allowed': day.isDisabled,\r\n 'bg-neutral-200 dark:bg-neutral-700': day.isToday && !day.isSelected,\r\n 'bg-blue-500 text-white hover:bg-blue-600': day.isSelected,\r\n 'bg-blue-100 dark:bg-blue-900': day.isInRange,\r\n 'bg-blue-50 dark:bg-blue-950': day.isHoveredInRange,\r\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800': !day.isDisabled,\r\n 'rounded-l-full': day.isStartDate && !day.isEndDate,\r\n 'rounded-r-full': day.isEndDate && !day.isStartDate,\r\n 'rounded-full': day.isStartDate && day.isEndDate,\r\n }]\"\r\n :disabled=\"day.isDisabled\"\r\n @click=\"selectDate(day.date)\"\r\n @mouseenter=\"handleDateHover(day.date)\"\r\n @mouseleave=\"handleDateLeave\"\r\n >\r\n {{ day.date.getDate() }}\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div :class=\"['mt-4 pt-4 border-t border-neutral-200 dark:border-neutral-800', props.ui.footer]\">\r\n <div class=\"flex items-center justify-between\">\r\n <div :class=\"['text-xs text-neutral-500 dark:text-neutral-400', props.ui.footerText]\">\r\n <div v-if=\"startDate && endDate\">\r\n Range: {{ daysBetween }} days\r\n </div>\r\n <div v-else-if=\"startDate\">\r\n Select end date\r\n </div>\r\n <div v-else>\r\n Select start date\r\n </div>\r\n </div>\r\n \r\n <button\r\n v-if=\"startDate || endDate\"\r\n type=\"button\"\r\n :class=\"['text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 transition-colors', props.ui.clearButton]\"\r\n @click=\"clearSelection\"\r\n >\r\n Clear\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.date-range-input {\r\n color-scheme: light;\r\n}\r\n\r\n.dark .date-range-input {\r\n color-scheme: dark;\r\n}\r\n\r\n.date-range-input:disabled {\r\n cursor: not-allowed;\r\n}\r\n</style>\r\n","<script setup>\r\nimport { PhotoIcon } from '@heroicons/vue/24/outline';\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst props = defineProps({\r\n currentImageUrl: {\r\n type: String,\r\n default: '',\r\n },\r\n accept: {\r\n type: String,\r\n default: 'image/*',\r\n },\r\n currentLabel: {\r\n type: String,\r\n default: 'Current logo',\r\n },\r\n currentSubtext: {\r\n type: String,\r\n default: 'Upload a new logo to replace this one',\r\n },\r\n attrs: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst handleFileChange = (event) => {\r\n const file = event.target.files?.[0] ?? null;\r\n emit('update:modelValue', file);\r\n};\r\n</script>\r\n\r\n<template>\r\n <div :class=\"props.ui.root\">\r\n <div :class=\"['relative', props.ui.inputWrapper]\">\r\n <div :class=\"['absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none', props.ui.leadingIcon]\">\r\n <PhotoIcon class=\"size-5 text-neutral-400 dark:text-neutral-200\" />\r\n </div>\r\n <input\r\n v-bind=\"attrs\"\r\n type=\"file\"\r\n :accept=\"accept\"\r\n :class=\"['block h-[48px] w-full cursor-pointer rounded-lg border border-neutral-200 bg-white py-[7px] pl-10 pr-4 text-sm text-neutral-700 align-middle shadow-sm transition-all duration-200 file:mr-3 file:h-[34px] file:align-middle file:rounded-md file:border-0 file:bg-neutral-900 file:px-4 file:py-0 file:text-sm file:font-medium file:leading-[34px] file:text-neutral-50 hover:file:bg-neutral-800 focus:border-neutral-900 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-100 dark:file:bg-neutral-800 dark:file:text-neutral-50 dark:hover:file:bg-neutral-700 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10', props.ui.input]\"\r\n @change=\"handleFileChange\"\r\n />\r\n </div>\r\n\r\n <div\r\n v-if=\"props.currentImageUrl\"\r\n :class=\"['mt-4 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-800 dark:bg-neutral-900/50', props.ui.previewCard]\"\r\n >\r\n <div class=\"flex items-center space-x-4\">\r\n <img :src=\"props.currentImageUrl\" alt=\"Current logo\" :class=\"['h-16 w-auto max-w-24 object-contain rounded-lg shadow-sm', props.ui.previewImage]\">\r\n <div>\r\n <p :class=\"['text-sm font-medium text-neutral-900 dark:text-neutral-50', props.ui.previewTitle]\">{{ props.currentLabel }}</p>\r\n <p :class=\"['text-xs text-neutral-500 dark:text-neutral-200', props.ui.previewText]\">{{ props.currentSubtext }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed } from 'vue';\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n options: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst normalizedOptions = computed(() => {\r\n return props.options\r\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\r\n .filter((option) => option !== '');\r\n});\r\n\r\nconst isSelected = (option) => String(option) === String(props.modelValue ?? '');\r\nconst selectOption = (option) => emit('update:modelValue', option);\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['flex h-[48px] overflow-hidden rounded-lg border border-neutral-200 bg-white text-sm dark:border-neutral-800 dark:bg-neutral-950', props.ui.root]\">\r\n <button\r\n v-for=\"(option, idx) in normalizedOptions\"\r\n :key=\"`notation-${idx}-${option}`\"\r\n type=\"button\"\r\n :class=\"[\r\n 'flex-1 border-l border-neutral-200 px-2 text-center font-semibold transition-colors duration-150 first:border-l-0 dark:border-neutral-800',\r\n props.ui.option,\r\n idx === 0 ? 'rounded-l-lg' : '',\r\n idx === normalizedOptions.length - 1 ? 'rounded-r-lg' : '',\r\n isSelected(option)\r\n ? 'bg-neutral-900 text-neutral-50 dark:bg-neutral-800 dark:text-neutral-50'\r\n : 'bg-white text-neutral-700 hover:bg-neutral-100 dark:bg-neutral-950 dark:text-neutral-100 dark:hover:bg-neutral-900',\r\n 'focus-visible:ring-2 focus-visible:ring-neutral-900/20 focus-visible:ring-offset-0 dark:focus-visible:ring-neutral-100/20',\r\n isSelected(option) ? props.ui.optionSelected : props.ui.optionUnselected,\r\n ]\"\r\n :disabled=\"disabled\"\r\n @click=\"selectOption(option)\"\r\n >\r\n {{ option }}\r\n </button>\r\n </div>\r\n</template>\r\n","<script setup>\nimport { computed, ref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean, null],\n default: null,\n },\n value: {\n type: [String, Number, Boolean],\n default: true,\n },\n label: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => String(props.modelValue ?? '') === String(props.value));\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = () => {\n hasFocus.value = false;\n};\n\nconst onChange = () => emit('update:modelValue', props.value);\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors',\n props.ui.root,\n isChecked ? 'border-neutral-900 bg-neutral-900 text-neutral-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-50' : 'border-neutral-200 text-neutral-600 dark:border-neutral-800 dark:text-neutral-100',\n disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer',\n hasFocus && !disabled ? 'ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950' : '',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"radio\"\n class=\"sr-only\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n >\n <span :class=\"props.ui.label\">\n <span :class=\"props.ui.indicator\">{{ isChecked ? '✓' : '○' }}</span> {{ label }}\n </span>\n </label>\n</template>\n","<script setup>\nimport { computed, ref } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\", \"blur\"]);\n\nconst props = defineProps({\n modelValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n value: {\n type: [Boolean, String, Number],\n default: true,\n },\n uncheckedValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n label: {\n type: String,\n default: \"\",\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => props.modelValue === props.value);\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = (event) => {\n hasFocus.value = false;\n emit(\"blur\", event);\n};\n\nconst onChange = (event) => {\n emit(\n \"update:modelValue\",\n event.target.checked ? props.value : props.uncheckedValue,\n );\n};\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center gap-3 select-none',\n props.ui.root,\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n hasFocus && !disabled\n ? 'rounded-full ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950'\n : '',\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n :name=\"name\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <span\n aria-hidden=\"true\"\n :class=\"[\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition-colors duration-200',\n props.ui.control,\n isChecked\n ? 'border-neutral-900 bg-neutral-900 dark:border-neutral-100 dark:bg-neutral-100'\n : 'border-neutral-300 bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n ]\"\n >\n <span\n :class=\"['inline-block size-4 rounded-full bg-white shadow-sm transition-transform duration-200 dark:bg-neutral-950', props.ui.indicator, isChecked ? 'translate-x-6' : 'translate-x-1']\"\n />\n </span>\n\n <span v-if=\"label\" :class=\"['text-sm text-neutral-700 dark:text-neutral-200', props.ui.label]\">\n {{ label }}\n </span>\n </label>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport InputGroup from './InputGroup.vue';\n\nconst emit = defineEmits(['update:modelValue']);\nconst props = defineProps({\n modelValue: {\n type: [String, Number, null],\n default: '',\n },\n options: {\n type: Array,\n default: () => [],\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst normalizedOptions = computed(() => {\n return props.options\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\n .filter((option) => option !== '');\n});\n\nconst selectOption = (option) => emit('update:modelValue', option);\n</script>\n\n<template>\n <div :class=\"['flex flex-wrap gap-3', props.ui.group]\">\n <InputGroup\n v-for=\"option in normalizedOptions\"\n :key=\"`radio-${name ?? 'group'}-${option}`\"\n type=\"radio-input\"\n :model-value=\"props.modelValue\"\n :name=\"name\"\n :value=\"option\"\n :label=\"option\"\n :disabled=\"disabled\"\n :ui=\"props.ui.item ?? props.ui\"\n @update:modelValue=\"selectOption\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport Editor from '@tinymce/tinymce-vue';\nimport 'tinymce/skins/ui/oxide/skin.css';\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: '',\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n height: {\n type: Number,\n default: 300,\n },\n menubar: {\n type: [Boolean, String],\n default: false,\n },\n toolbar: {\n type: [String, Array],\n default: 'undo redo | bold italic underline | bullist numlist | link image | alignleft aligncenter alignright | code',\n },\n plugins: {\n type: [String, Array],\n default: () => ['link', 'table', 'code', 'lists', 'image'],\n },\n init: {\n type: Object,\n default: () => ({}),\n },\n licenseKey: {\n type: String,\n default: 'gpl',\n },\n outputFormat: {\n type: String,\n default: 'html',\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['update:modelValue', 'blur', 'init']);\n\nconst content = ref(props.modelValue ?? '');\nconst isEditorReady = ref(false);\nconst editorRevision = ref(0);\nconst editorComponentRef = ref(null);\nconst editorInstance = ref(null);\n\nconst getEditor = () => editorInstance.value ?? editorComponentRef.value?.getEditor?.() ?? null;\n\nconst syncContentFromEditor = (editor = getEditor()) => {\n if (!editor) {\n return '';\n }\n\n const nextValue = editor.getContent({ format: props.outputFormat });\n content.value = nextValue;\n emit('update:modelValue', nextValue);\n\n return nextValue;\n};\n\nconst waitForFrames = async (frameCount = 1) => {\n for (let index = 0; index < frameCount; index += 1) {\n await new Promise((resolve) => {\n requestAnimationFrame(() => resolve());\n });\n }\n};\n\nconst loadTinyMce = async () => {\n const tinymceModule = await import('tinymce/tinymce');\n const tinymce = tinymceModule.default ?? tinymceModule;\n\n if (typeof globalThis !== 'undefined' && !globalThis.tinymce) {\n globalThis.tinymce = tinymce;\n }\n\n await Promise.all([\n import('tinymce/models/dom'),\n import('tinymce/icons/default'),\n import('tinymce/themes/silver'),\n import('tinymce/plugins/code'),\n import('tinymce/plugins/image'),\n import('tinymce/plugins/link'),\n import('tinymce/plugins/lists'),\n import('tinymce/plugins/table'),\n ]);\n\n isEditorReady.value = true;\n};\n\nwatch(\n () => props.modelValue,\n (value) => {\n const nextValue = value ?? '';\n\n if (nextValue === content.value) {\n return;\n }\n\n content.value = nextValue;\n editorRevision.value += 1;\n },\n);\n\nconst normalizedToolbar = computed(() => (\n Array.isArray(props.toolbar)\n ? props.toolbar.join(' | ')\n : props.toolbar\n));\n\nconst normalizedPlugins = computed(() => (\n Array.isArray(props.plugins)\n ? [...props.plugins]\n : props.plugins\n));\n\nconst editorKey = computed(() => {\n const mode = props.readonly ? 'tiny-editor-readonly' : 'tiny-editor-editable';\n const menubarKey = props.menubar === undefined ? 'menubar-undefined' : `menubar-${String(props.menubar)}`;\n return `${mode}-${menubarKey}-${editorRevision.value}`;\n});\n\nconst editorInit = computed(() => {\n return {\n height: props.height,\n menubar: props.menubar,\n plugins: normalizedPlugins.value,\n toolbar: normalizedToolbar.value,\n skin: false,\n content_css: false,\n ...props.init,\n };\n});\n\nonMounted(() => {\n void loadTinyMce();\n});\n\nonBeforeUnmount(() => {\n editorInstance.value = null;\n});\n\nconst handleEditorInit = (_event, editor) => {\n editorInstance.value = editor;\n emit('init', editor);\n};\n\nconst handleEditorInput = (_event, editor) => {\n syncContentFromEditor(editor);\n};\n\nconst handleEditorBlur = (_event, editor) => {\n emit('blur', editor.getContent({ format: props.outputFormat }));\n};\n\ndefineExpose({\n getEditor,\n focus: () => getEditor()?.focus(),\n execCommand: (command, ui = false, value) => getEditor()?.execCommand(command, ui, value),\n getContent: (options) => getEditor()?.getContent(options) ?? '',\n getBody: () => getEditor()?.getBody?.() ?? null,\n selectNode: (node) => {\n const editor = getEditor();\n\n if (!editor || !node) {\n return;\n }\n\n editor.selection.select(node);\n },\n getBookmark: () => getEditor()?.selection.getBookmark() ?? null,\n moveToBookmark: (bookmark) => {\n const editor = getEditor();\n\n if (!editor || !bookmark) {\n return;\n }\n\n editor.selection.moveToBookmark(bookmark);\n },\n syncContent: () => syncContentFromEditor(),\n insertContent: async (value, options = {}) => {\n const editor = getEditor();\n\n if (!editor) {\n return null;\n }\n\n editor.focus();\n editor.insertContent(value);\n\n if (options.selectLast) {\n await waitForFrames(options.frames ?? 2);\n\n const matchingNodes = Array.from(\n editor.getBody().querySelectorAll(options.selectLast),\n );\n const selectedNode = matchingNodes.at(-1);\n\n if (selectedNode) {\n editor.selection.select(selectedNode);\n }\n }\n\n if (options.command) {\n await waitForFrames(options.frames ?? 2);\n editor.execCommand(options.command, false, options.commandValue);\n }\n\n if (options.sync !== false) {\n syncContentFromEditor(editor);\n }\n\n return editor;\n },\n});\n</script>\n\n<template>\n <div :key=\"editorKey\" :class=\"props.ui.root\">\n <div v-if=\"!isEditorReady\" :class=\"['min-h-[12rem] w-full rounded-lg border border-slate-300 bg-slate-50', props.ui.container]\" />\n\n <Editor\n v-else\n ref=\"editorComponentRef\"\n :class=\"[props.ui.container, props.ui.editorFrame]\"\n :initial-value=\"content\"\n :license-key=\"licenseKey\"\n :readonly=\"readonly\"\n :output-format=\"outputFormat\"\n :init=\"editorInit\"\n @init=\"handleEditorInit\"\n @input=\"handleEditorInput\"\n @blur=\"handleEditorBlur\"\n />\n </div>\n</template>\n\n<style scoped>\n</style>\n","<script setup>\r\nimport { ChevronDownIcon, EyeDropperIcon } from '@heroicons/vue/24/outline';\r\nimport { computed, nextTick, onMounted, onUnmounted, ref, useAttrs, watch } from 'vue';\r\nimport { useI18n } from 'vue-i18n';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, null],\r\n default: '',\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n allowAlpha: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n variant: {\r\n type: String,\r\n default: 'classic',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'blur']);\r\nconst attrs = useAttrs();\r\nconst { t } = useI18n();\r\n\r\nconst DEFAULT_HEX = '#000000';\r\nconst DEFAULT_ALPHA = 255;\r\nconst PICKER_PANEL_WIDTH = 320;\r\nconst PICKER_PANEL_GAP = 8;\r\n\r\nconst triggerRef = ref(null);\r\nconst panelRef = ref(null);\r\nconst hexInputRef = ref(null);\r\nconst saturationRef = ref(null);\r\n\r\nconst isOpen = ref(false);\r\nconst supportsEyeDropper = ref(false);\r\nconst lastEmittedValue = ref('');\r\nconst hue = ref(220);\r\nconst saturation = ref(84);\r\nconst brightness = ref(92);\r\nconst alpha = ref(DEFAULT_ALPHA);\r\nconst displayValue = ref('');\r\nconst panelStyle = ref({\r\n position: 'fixed',\r\n left: '0px',\r\n top: '0px',\r\n visibility: 'hidden',\r\n width: `${PICKER_PANEL_WIDTH}px`,\r\n zIndex: '9999',\r\n});\r\nlet dragCleanup = null;\r\nlet revealFrame = null;\r\n\r\nconst clamp = (value, min, max) => Math.min(max, Math.max(min, value));\r\n\r\nconst parseHexColor = (value) => {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const trimmed = value.trim();\r\n if (trimmed === '') {\r\n return null;\r\n }\r\n\r\n const withHash = trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\r\n const shortRgbMatch = withHash.match(/^#([0-9a-fA-F]{3})$/);\r\n if (shortRgbMatch) {\r\n const expanded = shortRgbMatch[1].split('').map((char) => char.repeat(2)).join('').toUpperCase();\r\n return { hex6: `#${expanded}`, alpha: DEFAULT_ALPHA };\r\n }\r\n\r\n const longRgbMatch = withHash.match(/^#([0-9a-fA-F]{6})$/);\r\n if (longRgbMatch) {\r\n return { hex6: `#${longRgbMatch[1].toUpperCase()}`, alpha: DEFAULT_ALPHA };\r\n }\r\n\r\n const shortRgbaMatch = withHash.match(/^#([0-9a-fA-F]{4})$/);\r\n if (shortRgbaMatch) {\r\n const expanded = shortRgbaMatch[1].split('').map((char) => char.repeat(2)).join('').toUpperCase();\r\n return {\r\n hex6: `#${expanded.slice(0, 6)}`,\r\n alpha: Number.parseInt(expanded.slice(6, 8), 16),\r\n };\r\n }\r\n\r\n const longRgbaMatch = withHash.match(/^#([0-9a-fA-F]{8})$/);\r\n if (longRgbaMatch) {\r\n const expanded = longRgbaMatch[1].toUpperCase();\r\n return {\r\n hex6: `#${expanded.slice(0, 6)}`,\r\n alpha: Number.parseInt(expanded.slice(6, 8), 16),\r\n };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst formatColor = (parsedColor, allowAlpha = false) => {\r\n if (!parsedColor) {\r\n return '';\r\n }\r\n\r\n if (!allowAlpha) {\r\n return parsedColor.hex6;\r\n }\r\n\r\n return `${parsedColor.hex6}${parsedColor.alpha.toString(16).padStart(2, '0').toUpperCase()}`;\r\n};\r\n\r\nconst normalizeModelValue = (value, allowAlpha = false) => {\r\n const parsed = parseHexColor(value);\r\n if (!parsed) {\r\n return '';\r\n }\r\n\r\n return formatColor({\r\n hex6: parsed.hex6,\r\n alpha: allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, allowAlpha);\r\n};\r\n\r\nconst hexToRgb = (hex6) => {\r\n const normalized = hex6.replace('#', '');\r\n return {\r\n red: Number.parseInt(normalized.slice(0, 2), 16),\r\n green: Number.parseInt(normalized.slice(2, 4), 16),\r\n blue: Number.parseInt(normalized.slice(4, 6), 16),\r\n };\r\n};\r\n\r\nconst rgbToHex = ({ red, green, blue }) => {\r\n const toHex = (value) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, '0').toUpperCase();\r\n return `#${toHex(red)}${toHex(green)}${toHex(blue)}`;\r\n};\r\n\r\nconst rgbToHsv = ({ red, green, blue }) => {\r\n const r = red / 255;\r\n const g = green / 255;\r\n const b = blue / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const delta = max - min;\r\n\r\n let nextHue = hue.value;\r\n\r\n if (delta !== 0) {\r\n if (max === r) {\r\n nextHue = 60 * (((g - b) / delta) % 6);\r\n } else if (max === g) {\r\n nextHue = 60 * (((b - r) / delta) + 2);\r\n } else {\r\n nextHue = 60 * (((r - g) / delta) + 4);\r\n }\r\n }\r\n\r\n if (nextHue < 0) {\r\n nextHue += 360;\r\n }\r\n\r\n const nextSaturation = max === 0 ? 0 : (delta / max) * 100;\r\n const nextBrightness = max * 100;\r\n\r\n return {\r\n hue: clamp(nextHue, 0, 360),\r\n saturation: clamp(nextSaturation, 0, 100),\r\n brightness: clamp(nextBrightness, 0, 100),\r\n };\r\n};\r\n\r\nconst hsvToRgb = ({ hue: colorHue, saturation: colorSaturation, brightness: colorBrightness }) => {\r\n const h = ((colorHue % 360) + 360) % 360;\r\n const s = clamp(colorSaturation, 0, 100) / 100;\r\n const v = clamp(colorBrightness, 0, 100) / 100;\r\n\r\n const chroma = v * s;\r\n const x = chroma * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const match = v - chroma;\r\n\r\n let rPrime = 0;\r\n let gPrime = 0;\r\n let bPrime = 0;\r\n\r\n if (h < 60) {\r\n rPrime = chroma;\r\n gPrime = x;\r\n } else if (h < 120) {\r\n rPrime = x;\r\n gPrime = chroma;\r\n } else if (h < 180) {\r\n gPrime = chroma;\r\n bPrime = x;\r\n } else if (h < 240) {\r\n gPrime = x;\r\n bPrime = chroma;\r\n } else if (h < 300) {\r\n rPrime = x;\r\n bPrime = chroma;\r\n } else {\r\n rPrime = chroma;\r\n bPrime = x;\r\n }\r\n\r\n return {\r\n red: Math.round((rPrime + match) * 255),\r\n green: Math.round((gPrime + match) * 255),\r\n blue: Math.round((bPrime + match) * 255),\r\n };\r\n};\r\n\r\nconst alphaPercentFromByte = (value) => Math.round(clamp(value, 0, 255) * 100 / 255);\r\nconst alphaByteFromPercent = (value) => Math.round(clamp(Number(value) || 0, 0, 100) * 255 / 100);\r\n\r\nconst currentRgb = computed(() => hsvToRgb({\r\n hue: hue.value,\r\n saturation: saturation.value,\r\n brightness: brightness.value,\r\n}));\r\n\r\nconst currentColor = computed(() => ({\r\n hex6: rgbToHex(currentRgb.value),\r\n alpha: clamp(alpha.value, 0, 255),\r\n}));\r\n\r\nconst normalizedValue = computed(() => normalizeModelValue(props.modelValue, props.allowAlpha));\r\nconst emittedValue = computed(() => formatColor(currentColor.value, props.allowAlpha));\r\nconst opacityPercent = computed(() => alphaPercentFromByte(alpha.value));\r\nconst swatchColor = computed(() => {\r\n const { red, green, blue } = currentRgb.value;\r\n return `rgba(${red}, ${green}, ${blue}, ${clamp(alpha.value / 255, 0, 1)})`;\r\n});\r\nconst hueColor = computed(() => rgbToHex(hsvToRgb({ hue: hue.value, saturation: 100, brightness: 100 })));\r\nconst isRainbowVariant = computed(() => props.variant === 'rainbow');\r\nconst alphaGradient = computed(() => {\r\n const { red, green, blue } = currentRgb.value;\r\n return `linear-gradient(90deg, rgba(${red}, ${green}, ${blue}, 0) 0%, rgba(${red}, ${green}, ${blue}, 1) 100%)`;\r\n});\r\nconst saturationHandleStyle = computed(() => ({\r\n left: `${isRainbowVariant.value ? (hue.value / 360) * 100 : saturation.value}%`,\r\n top: `${isRainbowVariant.value\r\n ? (brightness.value >= 100\r\n ? saturation.value / 2\r\n : 50 + ((100 - brightness.value) / 2))\r\n : (100 - brightness.value)}%`,\r\n}));\r\nconst saturationAreaStyle = computed(() => (\r\n isRainbowVariant.value\r\n ? {\r\n background:\r\n 'linear-gradient(90deg, #ff0000 0%, #ffff00 16.66%, #00ff00 33.33%, #00ffff 50%, #0000ff 66.66%, #ff00ff 83.33%, #ff0000 100%)',\r\n }\r\n : {\r\n backgroundColor: hueColor.value,\r\n }\r\n));\r\nconst saturationAreaLabel = computed(() => (\r\n isRainbowVariant.value\r\n ? t('Rainbow color area for {color}', { color: emittedValue.value })\r\n : t('Saturation and brightness for {color}', { color: emittedValue.value })\r\n));\r\n\r\nconst fieldId = computed(() => {\r\n const id = attrs.id;\r\n return typeof id === 'string' && id !== '' ? id : undefined;\r\n});\r\n\r\nconst fieldName = computed(() => {\r\n const name = attrs.name;\r\n return typeof name === 'string' && name !== '' ? name : undefined;\r\n});\r\n\r\nconst triggerAttrs = computed(() => {\r\n const {\r\n class: _class,\r\n name: _name,\r\n autofocus: _autofocus,\r\n required: _required,\r\n placeholder: _placeholder,\r\n maxlength: _maxlength,\r\n ...rest\r\n } = attrs;\r\n\r\n return {\r\n ...rest,\r\n id: fieldId.value,\r\n };\r\n});\r\n\r\nconst triggerClasses = computed(() => [\r\n 'group flex h-[48px] w-full items-center gap-3 rounded-lg border border-neutral-200 bg-white px-3 py-3 text-left text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n props.disabled ? props.disabledClass : '',\r\n props.ui.trigger,\r\n]);\r\n\r\nconst hiddenInputRequired = computed(() => Boolean(attrs.required) && !props.disabled);\r\nconst hexInputPlaceholder = computed(() => (props.allowAlpha ? '#RRGGBBAA' : '#RRGGBB'));\r\nconst canUseEyeDropper = computed(() => supportsEyeDropper.value && !props.disabled);\r\nconst normalizedVariant = computed(() => (isRainbowVariant.value ? 'rainbow' : 'classic'));\r\n\r\nconst syncFromNormalizedValue = (value) => {\r\n const parsed = parseHexColor(value) ?? { hex6: DEFAULT_HEX, alpha: DEFAULT_ALPHA };\r\n const rgb = hexToRgb(parsed.hex6);\r\n const hsv = rgbToHsv(rgb);\r\n\r\n hue.value = hsv.hue;\r\n saturation.value = hsv.saturation;\r\n brightness.value = hsv.brightness;\r\n alpha.value = props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA;\r\n displayValue.value = formatColor({\r\n hex6: parsed.hex6,\r\n alpha: props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n};\r\n\r\nconst emitCurrentColor = () => {\r\n displayValue.value = emittedValue.value;\r\n lastEmittedValue.value = emittedValue.value;\r\n emit('update:modelValue', emittedValue.value);\r\n};\r\n\r\nwatch([normalizedValue, () => props.allowAlpha, normalizedVariant], ([nextValue, allowAlpha, variant], [, previousAllowAlpha, previousVariant]) => {\r\n if (allowAlpha === previousAllowAlpha && nextValue === lastEmittedValue.value) {\r\n displayValue.value = nextValue;\r\n lastEmittedValue.value = '';\r\n return;\r\n }\r\n\r\n if (variant !== previousVariant) {\r\n lastEmittedValue.value = '';\r\n }\r\n\r\n lastEmittedValue.value = '';\r\n syncFromNormalizedValue(nextValue);\r\n});\r\n\r\nconst updatePanelPosition = () => {\r\n if (!triggerRef.value || !panelRef.value) {\r\n return;\r\n }\r\n\r\n const rect = triggerRef.value.getBoundingClientRect();\r\n const panelWidth = panelRef.value.offsetWidth || PICKER_PANEL_WIDTH;\r\n const panelHeight = panelRef.value.offsetHeight || 0;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n let left = rect.left;\r\n if (left + panelWidth > viewportWidth - PICKER_PANEL_GAP) {\r\n left = viewportWidth - panelWidth - PICKER_PANEL_GAP;\r\n }\r\n left = Math.max(PICKER_PANEL_GAP, left);\r\n\r\n const spaceBelow = viewportHeight - rect.bottom - PICKER_PANEL_GAP;\r\n const spaceAbove = rect.top - PICKER_PANEL_GAP;\r\n const openUpward = spaceBelow < panelHeight && spaceAbove > spaceBelow;\r\n\r\n panelStyle.value = {\r\n position: 'fixed',\r\n left: `${left}px`,\r\n ...(openUpward\r\n ? { bottom: `${viewportHeight - rect.top + PICKER_PANEL_GAP}px` }\r\n : { top: `${rect.bottom + PICKER_PANEL_GAP}px` }),\r\n width: `${panelWidth}px`,\r\n zIndex: '9999',\r\n visibility: panelStyle.value.visibility,\r\n };\r\n};\r\n\r\nconst revealPanel = async () => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n if (revealFrame !== null) {\r\n cancelAnimationFrame(revealFrame);\r\n revealFrame = null;\r\n }\r\n\r\n panelStyle.value = {\r\n ...panelStyle.value,\r\n visibility: 'hidden',\r\n };\r\n\r\n await nextTick();\r\n updatePanelPosition();\r\n\r\n revealFrame = requestAnimationFrame(() => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n panelStyle.value = {\r\n ...panelStyle.value,\r\n visibility: 'visible',\r\n };\r\n });\r\n};\r\n\r\nconst closePanel = () => {\r\n isOpen.value = false;\r\n};\r\n\r\nconst togglePanel = async () => {\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n isOpen.value = !isOpen.value;\r\n\r\n if (isOpen.value) {\r\n displayValue.value = emittedValue.value;\r\n await revealPanel();\r\n await nextTick();\r\n hexInputRef.value?.focus();\r\n hexInputRef.value?.select();\r\n }\r\n};\r\n\r\nconst closeOnOutsidePointer = (event) => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (triggerRef.value?.contains(target) || panelRef.value?.contains(target)) {\r\n return;\r\n }\r\n\r\n closePanel();\r\n};\r\n\r\nconst closeOnEscape = (event) => {\r\n if (event.key === 'Escape' && isOpen.value) {\r\n closePanel();\r\n triggerRef.value?.focus();\r\n }\r\n};\r\n\r\nconst handleViewportChange = () => {\r\n if (isOpen.value) {\r\n updatePanelPosition();\r\n }\r\n};\r\n\r\nconst beginDrag = (event, updateFromPointer) => {\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n updateFromPointer(event);\r\n\r\n const handleMove = (moveEvent) => updateFromPointer(moveEvent);\r\n const handleUp = () => {\r\n window.removeEventListener('pointermove', handleMove);\r\n window.removeEventListener('pointerup', handleUp);\r\n dragCleanup = null;\r\n };\r\n\r\n window.addEventListener('pointermove', handleMove);\r\n window.addEventListener('pointerup', handleUp, { once: true });\r\n dragCleanup = handleUp;\r\n};\r\n\r\nconst updateFromSaturationPointer = (event) => {\r\n if (!saturationRef.value) {\r\n return;\r\n }\r\n\r\n const rect = saturationRef.value.getBoundingClientRect();\r\n const xPercent = clamp(((event.clientX - rect.left) / rect.width) * 100, 0, 100);\r\n const yPercent = clamp(((event.clientY - rect.top) / rect.height) * 100, 0, 100);\r\n\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp((xPercent / 100) * 360, 0, 360);\r\n\r\n if (yPercent <= 50) {\r\n saturation.value = clamp((yPercent / 50) * 100, 0, 100);\r\n brightness.value = 100;\r\n } else {\r\n saturation.value = 100;\r\n brightness.value = clamp(100 - (((yPercent - 50) / 50) * 100), 0, 100);\r\n }\r\n } else {\r\n saturation.value = xPercent;\r\n brightness.value = clamp(100 - yPercent, 0, 100);\r\n }\r\n\r\n emitCurrentColor();\r\n};\r\n\r\nconst updateFromSaturationKey = (event) => {\r\n const step = event.shiftKey ? 10 : 2;\r\n\r\n if (event.key === 'ArrowLeft') {\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp(hue.value - (step * 3.6), 0, 360);\r\n } else {\r\n saturation.value = clamp(saturation.value - step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowRight') {\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp(hue.value + (step * 3.6), 0, 360);\r\n } else {\r\n saturation.value = clamp(saturation.value + step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (isRainbowVariant.value) {\r\n if (brightness.value < 100) {\r\n brightness.value = clamp(brightness.value + step, 0, 100);\r\n } else {\r\n saturation.value = clamp(saturation.value - step, 0, 100);\r\n }\r\n } else {\r\n brightness.value = clamp(brightness.value + step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (isRainbowVariant.value) {\r\n if (saturation.value < 100 || brightness.value === 100) {\r\n saturation.value = clamp(saturation.value + step, 0, 100);\r\n } else {\r\n brightness.value = clamp(brightness.value - step, 0, 100);\r\n }\r\n } else {\r\n brightness.value = clamp(brightness.value - step, 0, 100);\r\n }\r\n } else {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleHueInput = (event) => {\r\n hue.value = clamp(Number(event.target?.value ?? hue.value) || 0, 0, 360);\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleAlphaInput = (event) => {\r\n alpha.value = alphaByteFromPercent(event.target?.value ?? opacityPercent.value);\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleHexInput = (event) => {\r\n const nextValue = String(event.target?.value ?? '');\r\n displayValue.value = nextValue;\r\n\r\n const parsed = parseHexColor(nextValue);\r\n if (!parsed) {\r\n return;\r\n }\r\n\r\n const normalized = formatColor({\r\n hex6: parsed.hex6,\r\n alpha: props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n\r\n syncFromNormalizedValue(normalized);\r\n lastEmittedValue.value = normalized;\r\n emit('update:modelValue', normalized);\r\n};\r\n\r\nconst handleHexBlur = (event) => {\r\n displayValue.value = emittedValue.value;\r\n emit('blur', event);\r\n};\r\n\r\nconst pickFromScreen = async () => {\r\n if (!canUseEyeDropper.value) {\r\n return;\r\n }\r\n\r\n try {\r\n const eyeDropper = new window.EyeDropper();\r\n const result = await eyeDropper.open();\r\n const picked = parseHexColor(result?.sRGBHex);\r\n\r\n if (!picked) {\r\n return;\r\n }\r\n\r\n const normalized = formatColor({\r\n hex6: picked.hex6,\r\n alpha: props.allowAlpha ? alpha.value : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n\r\n syncFromNormalizedValue(normalized);\r\n lastEmittedValue.value = normalized;\r\n emit('update:modelValue', normalized);\r\n } catch (error) {\r\n if (error?.name !== 'AbortError') {\r\n console.error('EyeDropper failed', error);\r\n }\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n supportsEyeDropper.value = typeof window !== 'undefined' && 'EyeDropper' in window;\r\n syncFromNormalizedValue(normalizedValue.value);\r\n\r\n if (attrs.autofocus !== undefined) {\r\n triggerRef.value?.focus();\r\n }\r\n\r\n document.addEventListener('pointerdown', closeOnOutsidePointer, true);\r\n document.addEventListener('keydown', closeOnEscape);\r\n window.addEventListener('resize', handleViewportChange);\r\n window.addEventListener('scroll', handleViewportChange, true);\r\n});\r\n\r\nonUnmounted(() => {\r\n if (revealFrame !== null) {\r\n cancelAnimationFrame(revealFrame);\r\n }\r\n\r\n dragCleanup?.();\r\n document.removeEventListener('pointerdown', closeOnOutsidePointer, true);\r\n document.removeEventListener('keydown', closeOnEscape);\r\n window.removeEventListener('resize', handleViewportChange);\r\n window.removeEventListener('scroll', handleViewportChange, true);\r\n});\r\n\r\nwatch(isOpen, (open) => {\r\n if (open) {\r\n revealPanel();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => triggerRef.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative w-full', props.ui.root]\">\r\n <input\r\n v-if=\"fieldName\"\r\n type=\"hidden\"\r\n :name=\"fieldName\"\r\n :value=\"emittedValue\"\r\n :disabled=\"props.disabled\"\r\n :required=\"hiddenInputRequired\"\r\n >\r\n\r\n <button\r\n ref=\"triggerRef\"\r\n v-bind=\"triggerAttrs\"\r\n type=\"button\"\r\n :class=\"triggerClasses\"\r\n :disabled=\"props.disabled\"\r\n :aria-expanded=\"isOpen\"\r\n aria-haspopup=\"dialog\"\r\n @click=\"togglePanel\"\r\n >\r\n <span :class=\"['color-picker-checker relative inline-flex size-10 shrink-0 overflow-hidden rounded-lg border border-neutral-200 dark:border-neutral-700', props.ui.swatch]\">\r\n <span class=\"absolute inset-0\" :style=\"{ backgroundColor: swatchColor }\" />\r\n </span>\r\n <span class=\"min-w-0 flex-1\">\r\n <span :class=\"['block text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Color') }}</span>\r\n <span :class=\"['block truncate font-mono text-sm text-neutral-900 dark:text-neutral-50', props.ui.value]\">{{ emittedValue }}</span>\r\n </span>\r\n <ChevronDownIcon :class=\"['size-4 shrink-0 text-neutral-400 transition-transform dark:text-neutral-500', isOpen ? 'rotate-180' : '', props.ui.chevron]\" />\r\n </button>\r\n\r\n <Teleport to=\"body\">\r\n <transition\r\n enter-active-class=\"transition duration-150 ease-out\"\r\n enter-from-class=\"opacity-0 translate-y-1\"\r\n enter-to-class=\"opacity-100 translate-y-0\"\r\n leave-active-class=\"transition duration-100 ease-in\"\r\n leave-from-class=\"opacity-100 translate-y-0\"\r\n leave-to-class=\"opacity-0 translate-y-1\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"panelRef\"\r\n :class=\"['z-50', props.ui.panelRoot]\"\r\n :style=\"panelStyle\"\r\n >\r\n <div :class=\"['rounded-2xl border border-neutral-200 bg-white/96 p-4 shadow-2xl shadow-neutral-950/12 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/96 dark:shadow-black/30', props.ui.panel]\">\r\n <div class=\"flex items-start gap-3\">\r\n <div :class=\"['color-picker-checker relative size-14 shrink-0 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700', props.ui.previewSwatch]\">\r\n <span class=\"absolute inset-0\" :style=\"{ backgroundColor: swatchColor }\" />\r\n </div>\r\n <div class=\"min-w-0 flex-1\">\r\n <p :class=\"['text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Selected color') }}</p>\r\n <p :class=\"['truncate font-mono text-base text-neutral-900 dark:text-neutral-50', props.ui.value]\">{{ emittedValue }}</p>\r\n </div>\r\n <button\r\n v-if=\"supportsEyeDropper\"\r\n type=\"button\"\r\n :class=\"['inline-flex size-10 items-center justify-center rounded-xl border border-neutral-200 text-neutral-600 transition-colors hover:bg-neutral-100 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-900 dark:focus:ring-neutral-100/10', props.disabled ? 'cursor-not-allowed opacity-50' : '', props.ui.eyedropperButton]\"\r\n :disabled=\"props.disabled\"\r\n :aria-label=\"t('Pick color from screen')\"\r\n @click=\"pickFromScreen\"\r\n >\r\n <EyeDropperIcon class=\"size-5\" />\r\n </button>\r\n </div>\r\n\r\n <div class=\"mt-4 space-y-4\">\r\n <div\r\n ref=\"saturationRef\"\r\n :class=\"['relative h-48 cursor-crosshair overflow-hidden rounded-2xl border border-neutral-200 dark:border-neutral-800', props.ui.saturationArea]\"\r\n :style=\"saturationAreaStyle\"\r\n tabindex=\"0\"\r\n role=\"slider\"\r\n :aria-label=\"saturationAreaLabel\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"100\"\r\n :aria-valuenow=\"Math.round(saturation)\"\r\n @pointerdown=\"beginDrag($event, updateFromSaturationPointer)\"\r\n @keydown=\"updateFromSaturationKey\"\r\n >\r\n <div v-if=\"!isRainbowVariant\" class=\"absolute inset-0 bg-[linear-gradient(to_right,#fff,transparent)]\" />\r\n <template v-if=\"isRainbowVariant\">\r\n <div class=\"absolute inset-x-0 top-0 h-1/2 bg-[linear-gradient(to_bottom,#fff,transparent)]\" />\r\n <div class=\"absolute inset-x-0 bottom-0 h-1/2 bg-[linear-gradient(to_bottom,transparent,#000)]\" />\r\n </template>\r\n <div v-else class=\"absolute inset-0 bg-[linear-gradient(to_top,#000,transparent)]\" />\r\n <span\r\n :class=\"['pointer-events-none absolute size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3)]', props.ui.saturationHandle]\"\r\n :style=\"saturationHandleStyle\"\r\n />\r\n </div>\r\n\r\n <div class=\"space-y-3\">\r\n <div v-if=\"!isRainbowVariant\" class=\"space-y-2\">\r\n <div :class=\"['flex items-center justify-between text-xs font-medium text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">\r\n <label :for=\"fieldId ? `${fieldId}-hue` : undefined\">{{ t('Hue') }}</label>\r\n <span>{{ Math.round(hue) }}°</span>\r\n </div>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-hue` : undefined\"\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"360\"\r\n step=\"1\"\r\n :class=\"['color-picker-range', props.ui.range]\"\r\n :disabled=\"props.disabled\"\r\n :value=\"hue\"\r\n style=\"background: linear-gradient(90deg, #FF0000 0%, #FFFF00 17%, #00FF00 33%, #00FFFF 50%, #0000FF 67%, #FF00FF 83%, #FF0000 100%);\"\r\n @input=\"handleHueInput\"\r\n >\r\n </div>\r\n\r\n <div v-if=\"props.allowAlpha\" class=\"space-y-2\">\r\n <div :class=\"['flex items-center justify-between text-xs font-medium text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">\r\n <label :for=\"fieldId ? `${fieldId}-alpha` : undefined\">{{ t('Opacity') }}</label>\r\n <span>{{ opacityPercent }}%</span>\r\n </div>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-alpha` : undefined\"\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"100\"\r\n step=\"1\"\r\n :class=\"['color-picker-range', props.ui.range]\"\r\n :disabled=\"props.disabled\"\r\n :value=\"opacityPercent\"\r\n :style=\"{ background: alphaGradient }\"\r\n @input=\"handleAlphaInput\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"space-y-2\">\r\n <label :for=\"fieldId ? `${fieldId}-hex` : undefined\" :class=\"['text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Hex value') }}</label>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-hex` : undefined\"\r\n ref=\"hexInputRef\"\r\n type=\"text\"\r\n inputmode=\"text\"\r\n spellcheck=\"false\"\r\n autocapitalize=\"characters\"\r\n :maxlength=\"props.allowAlpha ? 9 : 7\"\r\n :placeholder=\"hexInputPlaceholder\"\r\n :class=\"['w-full rounded-xl border border-neutral-200 bg-white px-3 py-2.5 font-mono text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10', props.ui.hexInput]\"\r\n :value=\"displayValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"handleHexInput\"\r\n @blur=\"handleHexBlur\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.color-picker-checker {\r\n background-image:\r\n linear-gradient(45deg, rgb(255 255 255 / 0.85) 25%, transparent 25%, transparent 75%, rgb(255 255 255 / 0.85) 75%, rgb(255 255 255 / 0.85)),\r\n linear-gradient(45deg, rgb(255 255 255 / 0.85) 25%, transparent 25%, transparent 75%, rgb(255 255 255 / 0.85) 75%, rgb(255 255 255 / 0.85));\r\n background-position: 0 0, 6px 6px;\r\n background-size: 12px 12px;\r\n}\r\n\r\n.dark .color-picker-checker {\r\n background-image:\r\n linear-gradient(45deg, rgb(38 38 38 / 0.9) 25%, transparent 25%, transparent 75%, rgb(38 38 38 / 0.9) 75%, rgb(38 38 38 / 0.9)),\r\n linear-gradient(45deg, rgb(64 64 64 / 0.9) 25%, transparent 25%, transparent 75%, rgb(64 64 64 / 0.9) 75%, rgb(64 64 64 / 0.9));\r\n}\r\n\r\n.color-picker-range {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 100%;\r\n height: 12px;\r\n border-radius: 9999px;\r\n cursor: pointer;\r\n border: 1px solid rgb(229 229 229);\r\n outline: none;\r\n}\r\n\r\n.color-picker-range::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 9999px;\r\n border: 2px solid rgb(255 255 255);\r\n background: rgb(23 23 23);\r\n box-shadow: 0 1px 4px rgb(0 0 0 / 0.18);\r\n}\r\n\r\n.color-picker-range::-moz-range-thumb {\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 9999px;\r\n border: 2px solid rgb(255 255 255);\r\n background: rgb(23 23 23);\r\n box-shadow: 0 1px 4px rgb(0 0 0 / 0.18);\r\n}\r\n\r\n.dark .color-picker-range {\r\n border-color: rgb(38 38 38);\r\n}\r\n\r\n.dark .color-picker-range::-webkit-slider-thumb {\r\n background: rgb(250 250 250);\r\n border-color: rgb(23 23 23);\r\n}\r\n\r\n.dark .color-picker-range::-moz-range-thumb {\r\n background: rgb(250 250 250);\r\n border-color: rgb(23 23 23);\r\n}\r\n</style>\r\n","<script setup>\nimport { computed, useAttrs, useSlots } from \"vue\";\nimport { ExclamationCircleIcon } from \"@heroicons/vue/24/outline\";\r\nimport TextInput from \"./TextInput.vue\";\r\nimport TextArea from \"./TextArea.vue\";\r\nimport SelectInput from \"./SelectInput.vue\";\r\nimport DateInput from \"./DateInput.vue\";\r\nimport DateRangeInput from \"./DateRangeInput.vue\";\r\nimport ImageInput from \"./ImageInput.vue\";\r\nimport NotationInput from \"./NotationInput.vue\";\r\nimport CheckboxInput from \"./CheckboxInput.vue\";\r\nimport RadioInput from \"./RadioInput.vue\";\r\nimport ToggleInput from \"./ToggleInput.vue\";\r\nimport CheckboxMultipleInput from \"./CheckboxMultipleInput.vue\";\r\nimport RadioMultipleInput from \"./RadioMultipleInput.vue\";\r\nimport TinyEditor from \"./TinyEditor.vue\";\r\nimport ColorPicker from \"./ColorPicker.vue\";\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\n type: {\r\n type: String,\r\n required: true,\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n helperText: {\r\n type: String,\r\n default: \"\",\r\n },\r\n name: {\r\n type: String,\r\n default: undefined,\r\n },\r\n errorMessage: {\r\n type: String,\r\n default: \"\",\r\n },\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: \"\",\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default:\r\n \"!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500\",\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n withTimestamp: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n placeholder: {\r\n type: String,\r\n default: \"\",\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: \"name\",\r\n },\r\n valueKey: {\r\n type: String,\r\n default: \"id\",\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: \"deleted_at\",\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n accept: {\r\n type: String,\r\n default: undefined,\r\n },\r\n currentImageUrl: {\r\n type: String,\r\n default: \"\",\r\n },\r\n currentLabel: {\r\n type: String,\r\n default: \"Current logo\",\r\n },\r\n currentSubtext: {\r\n type: String,\r\n default: \"Upload a new logo to replace this one\",\r\n },\r\n height: {\r\n type: Number,\r\n default: 300,\r\n },\r\n menubar: {\r\n type: [Boolean, String],\r\n default: false,\r\n },\r\n toolbar: {\r\n type: [String, Array],\r\n default: undefined,\r\n },\r\n plugins: {\r\n type: [String, Array],\r\n default: undefined,\r\n },\r\n init: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n licenseKey: {\r\n type: String,\r\n default: \"gpl\",\r\n },\r\n outputFormat: {\r\n type: String,\r\n default: \"html\",\r\n },\r\n min: {\r\n type: String,\r\n default: \"\",\r\n },\r\n max: {\r\n type: String,\r\n default: \"\",\r\n },\r\n minDays: {\r\n type: Number,\r\n default: 0,\r\n },\r\n maxDays: {\r\n type: Number,\r\n default: null,\r\n },\r\n startLabel: {\r\n type: String,\r\n default: \"Start Date\",\r\n },\r\n endLabel: {\r\n type: String,\r\n default: \"End Date\",\r\n },\r\n locale: {\r\n type: String,\r\n default: \"en\",\r\n },\r\n allowAlpha: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n variant: {\r\n type: String,\r\n default: \"classic\",\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: \"Search...\",\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n noOptionsText: {\n type: String,\n default: undefined,\n },\n rootClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n labelClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n helperTextClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorTextClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n leadingIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n trailingIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"blur\"]);\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst defaultFieldClass =\n \"block w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 placeholder:text-neutral-400 shadow-sm transition-all duration-200 focus:border-neutral-900 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10\";\nconst defaultLabelClass =\n \"mb-1 block text-base font-semibold text-gray-900 dark:text-gray-50\";\nconst defaultHelperTextClass = \"mb-1 block text-xs text-gray-500\";\nconst defaultErrorClass = \"mt-2 flex items-center text-sm text-red-600\";\nconst defaultErrorIconClass = \"mr-1 h-4 w-4 flex-shrink-0\";\nconst updateValue = (value) => emit(\"update:modelValue\", value);\nconst onUpdateModelValue = (value) => emit(\"update:modelValue\", value);\nconst onBlur = (event) => emit(\"blur\", event);\nconst fieldListeners = {\n \"update:modelValue\": onUpdateModelValue,\n blur: onBlur,\n};\nconst hasLeadingIconSlot = computed(() => Boolean(slots[\"leading-icon\"]));\nconst hasTrailingIconSlot = computed(() => Boolean(slots[\"trailing-icon\"]));\n\r\nconst hasError = computed(() => Boolean(props.errorMessage));\r\nconst showsInlineChoiceControl = computed(\r\n () =>\r\n isCheckboxSingleType.value ||\r\n isRadioSingleType.value ||\r\n isToggleSingleType.value,\r\n);\r\n\r\nconst fieldId = computed(() => {\r\n const id = attrs.id;\r\n return typeof id === \"string\" && id !== \"\" ? id : undefined;\r\n});\r\n\r\nconst textLikeTypes = [\r\n \"text\",\r\n \"email\",\r\n \"password\",\r\n \"number\",\r\n \"time\",\r\n \"url\",\r\n \"tel\",\r\n \"search\",\r\n \"month\",\r\n \"week\",\r\n];\r\n\r\nconst noComponentTypes = [];\r\nconst isImageType = computed(() => props.type === \"image\");\r\nconst isNotationType = computed(() => props.type === \"notation\");\r\nconst isCheckboxSingleType = computed(() => props.type === \"checkbox-input\");\r\nconst isRadioSingleType = computed(() => props.type === \"radio-input\");\r\nconst isToggleSingleType = computed(() => props.type === \"toggle-input\");\r\nconst isCheckboxType = computed(() => props.type === \"checkbox\");\r\nconst isRadioType = computed(() => props.type === \"radio\");\r\nconst isDateType = computed(\r\n () => props.type === \"date\" || props.type === \"datetime-local\",\r\n);\r\nconst isDateRangeType = computed(() => props.type === \"daterange\");\r\nconst isTextareaType = computed(() => props.type === \"textarea\");\r\nconst isTinyEditorType = computed(() => props.type === \"tiny-editor\");\r\nconst isColorPickerType = computed(() => props.type === \"color\");\nconst isSelectType = computed(() => props.type === \"select\");\nconst isTextLikeType = computed(() => textLikeTypes.includes(props.type));\nconst isNoComponentType = computed(() => noComponentTypes.includes(props.type));\nconst supportsAutoDecoratedField = computed(\n () =>\n (isTextLikeType.value && props.type !== \"password\") || isDateType.value,\n);\nconst showsLeadingIcon = computed(\n () => supportsAutoDecoratedField.value && hasLeadingIconSlot.value,\n);\nconst showsTrailingIcon = computed(\n () => supportsAutoDecoratedField.value && hasTrailingIconSlot.value,\n);\nconst decoratedFieldClass = computed(() => [\n showsLeadingIcon.value ? \"pl-10\" : null,\n showsTrailingIcon.value ? \"pr-10\" : null,\n]);\n\nconst textInputBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class, decoratedFieldClass.value],\n type: props.type,\r\n name: props.name,\r\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst textAreaBindings = computed(() => ({\r\n ...attrs,\r\n class: [defaultFieldClass, attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst dateBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class, decoratedFieldClass.value],\n name: props.name,\r\n modelValue: props.modelValue,\r\n locale: props.locale,\r\n withTimestamp: props.type === \"datetime-local\" || props.withTimestamp,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst selectBindings = computed(() => {\r\n const inputProps = {\r\n ...attrs,\r\n class: [defaultFieldClass, attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n modelModifiers: props.modelModifiers,\r\n options: props.options,\r\n placeholder: props.placeholder,\r\n placeholderDisabled: props.placeholderDisabled,\r\n multiple: props.multiple,\r\n disabled: props.disabled,\r\n softDeleteAware: props.softDeleteAware,\r\n labelKey: props.labelKey,\r\n valueKey: props.valueKey,\r\n deletedKey: props.deletedKey,\n optionLabel: props.optionLabel,\n ui: props.ui,\n };\n\r\n if (props.baseClass !== undefined) inputProps.baseClass = props.baseClass;\r\n if (props.normalTextClass !== undefined)\r\n inputProps.normalTextClass = props.normalTextClass;\r\n if (props.deletedSelectedClass !== undefined)\r\n inputProps.deletedSelectedClass = props.deletedSelectedClass;\r\n if (props.optionClass !== undefined)\r\n inputProps.optionClass = props.optionClass;\r\n if (props.deletedOptionClass !== undefined)\r\n inputProps.deletedOptionClass = props.deletedOptionClass;\r\n if (props.placeholderClass !== undefined)\r\n inputProps.placeholderClass = props.placeholderClass;\r\n if (props.searchable !== undefined) inputProps.searchable = props.searchable;\r\n if (props.searchPlaceholder !== undefined)\r\n inputProps.searchPlaceholder = props.searchPlaceholder;\r\n if (props.searchInputClass !== undefined)\r\n inputProps.searchInputClass = props.searchInputClass;\r\n if (props.dropdownHighlightedClass !== undefined)\r\n inputProps.dropdownHighlightedClass = props.dropdownHighlightedClass;\r\n if (props.noOptionsText !== undefined)\r\n inputProps.noOptionsText = props.noOptionsText;\r\n\r\n return inputProps;\r\n});\r\n\r\nconst notationBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n options: props.options,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst checkboxBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n options: props.options,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst radioBindings = computed(() => ({\r\n ...attrs,\r\n modelValue: props.modelValue,\r\n options: props.options,\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst checkboxSingleBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst radioSingleBindings = computed(() => ({\r\n ...attrs,\r\n modelValue: props.modelValue,\r\n label: props.label || attrs.label || \"\",\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst toggleSingleBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst imageBindings = computed(() => {\r\n return {\r\n ...attrs,\r\n accept: props.accept ?? attrs.accept ?? \"image/*\",\r\n modelValue: props.modelValue,\r\n currentImageUrl: props.currentImageUrl,\n currentLabel: props.currentLabel,\n currentSubtext: props.currentSubtext,\n ui: props.ui,\n };\n});\n\r\nconst tinyEditorBindings = computed(() => {\r\n const inputProps = {\r\n ...attrs,\r\n modelValue: typeof props.modelValue === \"string\" ? props.modelValue : \"\",\r\n readonly: props.disabled,\r\n height: props.height,\r\n menubar: props.menubar,\n licenseKey: props.licenseKey,\n outputFormat: props.outputFormat,\n ui: props.ui,\n };\n\r\n if (props.toolbar !== undefined) inputProps.toolbar = props.toolbar;\r\n if (props.plugins !== undefined) inputProps.plugins = props.plugins;\r\n if (props.init !== undefined) inputProps.init = props.init;\r\n\r\n return inputProps;\r\n});\r\n\r\nconst dateRangeBindings = computed(() => ({\r\n ...attrs,\r\n class: [attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n min: props.min,\r\n max: props.max,\r\n minDays: props.minDays,\r\n maxDays: props.maxDays,\r\n startLabel: props.startLabel,\r\n endLabel: props.endLabel,\r\n locale: props.locale,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst colorPickerBindings = computed(() => ({\n ...attrs,\n class: [attrs.class],\n name: props.name,\n modelValue: typeof props.modelValue === \"string\" ? props.modelValue : \"\",\r\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n allowAlpha: props.allowAlpha,\n variant: props.variant,\n ui: props.ui,\n}));\n\nconst resolvedFieldComponent = computed(() => {\n if (isTextareaType.value) return TextArea;\n if (isTinyEditorType.value) return TinyEditor;\n if (isColorPickerType.value) return ColorPicker;\n if (isSelectType.value) return SelectInput;\n if (isDateType.value) return DateInput;\n if (isDateRangeType.value) return DateRangeInput;\n if (isTextLikeType.value) return TextInput;\n if (isImageType.value) return ImageInput;\n if (isCheckboxSingleType.value) return CheckboxInput;\n if (isRadioSingleType.value) return RadioInput;\n if (isToggleSingleType.value) return ToggleInput;\n if (isNotationType.value) return NotationInput;\n if (isCheckboxType.value) return CheckboxMultipleInput;\n if (isRadioType.value) return RadioMultipleInput;\n return null;\n});\n\nconst resolvedFieldBindings = computed(() => {\n if (isTextareaType.value) return textAreaBindings.value;\n if (isTinyEditorType.value) return tinyEditorBindings.value;\n if (isColorPickerType.value) return colorPickerBindings.value;\n if (isSelectType.value) return selectBindings.value;\n if (isDateType.value) return dateBindings.value;\n if (isDateRangeType.value) return dateRangeBindings.value;\n if (isTextLikeType.value) return textInputBindings.value;\n if (isImageType.value) return imageBindings.value;\n if (isCheckboxSingleType.value) return checkboxSingleBindings.value;\n if (isRadioSingleType.value) return radioSingleBindings.value;\n if (isToggleSingleType.value) return toggleSingleBindings.value;\n if (isNotationType.value) return notationBindings.value;\n if (isCheckboxType.value) return checkboxBindings.value;\n if (isRadioType.value) return radioBindings.value;\n return {};\n});\n</script>\n\n<template>\n <div :class=\"rootClass\">\n <slot\n name=\"wrapper\"\n :field-id=\"fieldId\"\n :label=\"label\"\n :helper-text=\"helperText\"\n :error-message=\"errorMessage\"\n :has-error=\"hasError\"\n :shows-inline-choice-control=\"showsInlineChoiceControl\"\n :field-component=\"resolvedFieldComponent\"\n :field-bindings=\"resolvedFieldBindings\"\n :field-listeners=\"fieldListeners\"\n :on-update-model-value=\"onUpdateModelValue\"\n :on-blur=\"onBlur\"\n :label-class=\"props.labelClass ?? defaultLabelClass\"\n :helper-text-class=\"props.helperTextClass ?? defaultHelperTextClass\"\n :error-class=\"props.errorClass ?? defaultErrorClass\"\n :error-icon-class=\"props.errorIconClass ?? defaultErrorIconClass\"\n :error-text-class=\"props.errorTextClass\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n >\n <slot\n v-if=\"!showsInlineChoiceControl && ($slots.label || label)\"\n name=\"label\"\n :label=\"label\"\n :for=\"fieldId\"\n :label-class=\"props.labelClass ?? defaultLabelClass\"\n >\n <label\n v-if=\"label\"\n :for=\"fieldId\"\n :class=\"props.labelClass ?? defaultLabelClass\"\n >\n {{ label }}\n </label>\n </slot>\n\n <slot\n v-if=\"helperText && !showsInlineChoiceControl\"\n name=\"helper\"\n :helper-text=\"helperText\"\n :helper-text-class=\"props.helperTextClass ?? defaultHelperTextClass\"\n >\n <span :class=\"props.helperTextClass ?? defaultHelperTextClass\">\n {{ helperText }}\n </span>\n </slot>\n\n <component\n :is=\"resolvedFieldComponent\"\n v-if=\"resolvedFieldComponent && !showsLeadingIcon && !showsTrailingIcon\"\n v-bind=\"resolvedFieldBindings\"\n v-on=\"fieldListeners\"\n />\n\n <div v-else-if=\"resolvedFieldComponent\" class=\"relative\">\n <div\n v-if=\"showsLeadingIcon\"\n :class=\"[\n 'pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-neutral-400 dark:text-neutral-200',\n props.leadingIconClass,\n ]\"\n >\n <slot name=\"leading-icon\" :type=\"type\" :field-id=\"fieldId\" />\n </div>\n\n <component\n :is=\"resolvedFieldComponent\"\n v-bind=\"resolvedFieldBindings\"\n v-on=\"fieldListeners\"\n />\n\n <div\n v-if=\"showsTrailingIcon\"\n :class=\"[\n 'pointer-events-none absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-neutral-400 dark:text-neutral-200',\n props.trailingIconClass,\n ]\"\n >\n <slot name=\"trailing-icon\" :type=\"type\" :field-id=\"fieldId\" />\n </div>\n </div>\n\n <slot\n v-else-if=\"isNoComponentType\"\n name=\"unsupported-type\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n />\n\n <slot\n v-else\n name=\"unsupported-type\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n />\n\n <slot\n v-if=\"hasError\"\n name=\"error\"\n :error-message=\"errorMessage\"\n :error-class=\"props.errorClass ?? defaultErrorClass\"\n :error-icon-class=\"props.errorIconClass ?? defaultErrorIconClass\"\n :error-text-class=\"props.errorTextClass\"\n >\n <div :class=\"props.errorClass ?? defaultErrorClass\">\n <ExclamationCircleIcon\n :class=\"props.errorIconClass ?? defaultErrorIconClass\"\n />\n <span :class=\"props.errorTextClass\">{{ errorMessage }}</span>\n </div>\n </slot>\n </slot>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport InputGroup from './InputGroup.vue';\n\nconst emit = defineEmits(['update:modelValue']);\nconst props = defineProps({\n modelValue: {\n type: Array,\n default: () => [],\n },\n options: {\n type: Array,\n default: () => [],\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst normalizedOptions = computed(() => {\n return props.options\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\n .filter((option) => option !== '');\n});\n\nconst isChecked = (option) => {\n return Array.isArray(props.modelValue) && props.modelValue.includes(option);\n};\n\nconst updateSelection = (option, checked) => {\n const nextSelection = Array.isArray(props.modelValue) ? [...props.modelValue] : [];\n const index = nextSelection.indexOf(option);\n\n if (checked && index === -1) {\n nextSelection.push(option);\n } else if (!checked && index !== -1) {\n nextSelection.splice(index, 1);\n }\n\n emit('update:modelValue', nextSelection);\n};\n</script>\n\n<template>\n <div :class=\"['flex flex-wrap gap-3', props.ui.group]\">\n <InputGroup\n v-for=\"option in normalizedOptions\"\n :key=\"`checkbox-${option}`\"\n type=\"checkbox-input\"\n :name=\"name\"\n :model-value=\"isChecked(option)\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :label=\"option\"\n :disabled=\"disabled\"\n :ui=\"props.ui.item ?? props.ui\"\n @update:modelValue=\"(checked) => updateSelection(option, checked)\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nconst props = defineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String,\n default: 'center',\n validator: (value) => ['top', 'center', 'bottom'].includes(value),\n },\n});\n\nconst emit = defineEmits(['close']);\nconst dialog = ref();\nconst showSlot = ref(props.show);\nconst presetMaxWidthClasses = {\n 'sm': 'sm:max-w-sm',\n 'md': 'sm:max-w-md',\n 'lg': 'sm:max-w-lg',\n 'xl': 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n '5xl': 'sm:max-w-5xl',\n '6xl': 'sm:max-w-6xl',\n '7xl': 'sm:max-w-7xl',\n 'full': 'sm:max-w-full',\n};\n\nconst openModal = () => {\n document.body.style.overflow = 'hidden';\n showSlot.value = true;\n dialog.value?.showModal();\n};\n\nconst closeModal = () => {\n document.body.style.overflow = null;\n setTimeout(() => {\n dialog.value?.close();\n showSlot.value = false;\n }, 200);\n};\n\nwatch(() => props.show, () => {\n if (props.show) {\n openModal();\n } else {\n closeModal();\n }\n});\n\nonMounted(() => {\n if (props.show) {\n openModal();\n }\n});\n\nconst close = () => {\n if (props.closeable) {\n emit('close');\n }\n};\n\nconst closeOnEscape = (e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n\n if (props.show) {\n close();\n }\n }\n};\n\nonMounted(() => document.addEventListener('keydown', closeOnEscape));\n\nonUnmounted(() => {\n document.removeEventListener('keydown', closeOnEscape);\n document.body.style.overflow = null;\n});\n\nconst maxWidthClass = computed(() => {\n return presetMaxWidthClasses[props.maxWidth] ?? null;\n});\n\nconst modalWidthStyle = computed(() => {\n if (maxWidthClass.value) {\n return null;\n }\n\n return props.maxWidth ? { maxWidth: props.maxWidth } : null;\n});\n\nconst positionClasses = computed(() => {\n switch (props.position) {\n case 'top':\n return 'flex-col items-center pt-16';\n case 'bottom':\n return 'flex-col items-center justify-end pb-16';\n default:\n return 'items-center justify-center';\n }\n});\n</script>\n\n<template>\n <dialog class=\"z-50 m-0 min-h-full min-w-full overflow-y-auto bg-transparent backdrop:bg-transparent\" ref=\"dialog\">\n <div class=\"fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50 flex\" :class=\"positionClasses\">\n <transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div v-show=\"show\" class=\"fixed inset-0 z-40 transform transition-all\" @click=\"close\">\n <div class=\"absolute inset-0 bg-neutral-950/55 backdrop-blur-[2px]\" />\n </div>\n </transition>\n\n <transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-show=\"show\"\n class=\"relative z-50 mb-6 overflow-hidden rounded-lg border border-neutral-200 bg-white shadow-xl transform transition-all dark:border-neutral-800 dark:bg-neutral-950 sm:mx-auto sm:w-full\"\n :class=\"maxWidthClass\"\n :style=\"modalWidthStyle\"\n >\n <slot v-if=\"showSlot\"/>\n </div>\n </transition>\n </div>\n </dialog>\n</template>\n","<script setup>\nimport Modal from './Modal.vue';\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline';\n\nconst emit = defineEmits(['close']);\n\nconst props = defineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String,\n default: 'center',\n validator: (value) => ['top', 'center', 'bottom'].includes(value),\n },\n});\n\nconst close = () => {\n emit('close');\n};\n</script>\n\n<template>\n <Modal\n :show=\"show\"\n :max-width=\"maxWidth\"\n :closeable=\"closeable\"\n :position=\"position\"\n @close=\"close\"\n >\n <div class=\"bg-white px-4 pb-4 pt-5 dark:bg-neutral-950 sm:p-6 sm:pb-4\">\n <div class=\"sm:flex sm:items-start\">\n <div class=\"mx-auto flex size-12 shrink-0 items-center justify-center rounded-full bg-red-100 dark:bg-red-950/60 sm:mx-0 sm:size-10\">\n <ExclamationTriangleIcon class=\"size-6 text-red-600 dark:text-neutral-100\" />\n </div>\n\n <div class=\"mt-3 text-center sm:mt-0 sm:ms-4 sm:text-start\">\n <h3 class=\"text-lg font-medium text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </h3>\n\n <div class=\"mt-4 text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"content\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col-reverse gap-4 border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60 lg:flex-row lg:justify-end lg:gap-0\">\n <slot name=\"footer\" />\n </div>\n </Modal>\n</template>\n","<script setup>\nimport Modal from './Modal.vue';\n\nconst emit = defineEmits(['close']);\n\ndefineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst close = () => {\n emit('close');\n};\n</script>\n\n<template>\n <Modal\n :show=\"show\"\n :max-width=\"maxWidth\"\n :closeable=\"closeable\"\n @close=\"close\"\n >\n <div class=\"px-6 py-4\">\n <div class=\"text-lg font-medium text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </div>\n\n <div class=\"mt-4 text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"content\" />\n </div>\n </div>\n\n <div class=\"flex flex-row justify-end border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60\">\n <slot name=\"footer\" />\n </div>\n </Modal>\n</template>\n","<script setup>\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\n\nconst props = defineProps({\n align: {\n type: String,\n default: 'right',\n },\n width: {\n type: String,\n default: '48',\n },\n contentClasses: {\n type: Array,\n default: () => ['py-1', 'bg-white', 'dark:bg-neutral-950'],\n },\n});\n\nconst open = ref(false);\nconst triggerRef = ref(null);\nconst menuRef = ref(null);\nconst menuStyle = ref({\n position: 'fixed',\n left: '0px',\n top: '0px',\n visibility: 'hidden',\n});\nconst menuOriginClass = ref('ltr:origin-top-right rtl:origin-top-left');\nlet revealFrame = null;\n\nconst closeOnEscape = (e) => {\n if (open.value && e.key === 'Escape') {\n open.value = false;\n }\n};\n\nconst closeOnOutsideClick = (event) => {\n if (!open.value) {\n return;\n }\n\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (triggerRef.value?.contains(target) || menuRef.value?.contains(target)) {\n return;\n }\n\n open.value = false;\n};\n\nconst setOriginClass = (alignRight, openUpward) => {\n const horizontal = alignRight\n ? 'ltr:origin-top-right rtl:origin-top-left'\n : 'ltr:origin-top-left rtl:origin-top-right';\n\n menuOriginClass.value = `${horizontal} ${openUpward ? 'origin-bottom' : 'origin-top'}`;\n};\n\nconst widthClass = computed(() => {\n return {\n '48': 'w-48',\n }[props.width.toString()];\n});\n\nconst alignmentClasses = computed(() => {\n return menuOriginClass.value;\n});\n\nconst updateDropdownPosition = () => {\n if (!triggerRef.value || !menuRef.value) {\n return;\n }\n\n const rect = triggerRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const menuWidth = menuRef.value.offsetWidth;\n const menuHeight = menuRef.value.offsetHeight;\n const gap = 8;\n\n const spaceLeft = rect.left - gap;\n const spaceRight = viewportWidth - rect.right - gap;\n\n let alignRight = props.align === 'right';\n\n if (alignRight && rect.right + menuWidth > viewportWidth - gap && spaceLeft > spaceRight) {\n alignRight = false;\n } else if (!alignRight && rect.left + menuWidth > viewportWidth - gap && spaceRight > spaceLeft) {\n alignRight = true;\n }\n\n let left = alignRight ? rect.right - menuWidth : rect.left;\n left = Math.max(gap, Math.min(left, viewportWidth - menuWidth - gap));\n\n const spaceBelow = viewportHeight - rect.bottom - gap;\n const spaceAbove = rect.top - gap;\n const openUpward = spaceBelow < menuHeight && spaceAbove > spaceBelow;\n\n menuStyle.value = {\n position: 'fixed',\n left: `${left}px`,\n ...(openUpward\n ? { bottom: `${viewportHeight - rect.top + gap}px` }\n : { top: `${rect.bottom + gap}px` }),\n zIndex: '9999',\n maxHeight: `${Math.max(Math.min(openUpward ? spaceAbove : spaceBelow, 320), 160)}px`,\n };\n\n setOriginClass(alignRight, openUpward);\n};\n\nconst refreshPosition = async () => {\n if (!open.value) {\n return;\n }\n\n if (revealFrame !== null) {\n cancelAnimationFrame(revealFrame);\n revealFrame = null;\n }\n\n menuStyle.value = {\n ...menuStyle.value,\n visibility: 'hidden',\n };\n\n await nextTick();\n updateDropdownPosition();\n\n revealFrame = requestAnimationFrame(() => {\n if (!open.value) {\n return;\n }\n\n menuStyle.value = {\n ...menuStyle.value,\n visibility: 'visible',\n };\n });\n};\n\nconst handleViewportChange = () => {\n if (open.value) {\n updateDropdownPosition();\n }\n};\n\nwatch(open, (value) => {\n if (value) {\n refreshPosition();\n }\n});\n\nonMounted(() => {\n document.addEventListener('keydown', closeOnEscape);\n document.addEventListener('pointerdown', closeOnOutsideClick, true);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n});\n\nonUnmounted(() => {\n if (revealFrame !== null) {\n cancelAnimationFrame(revealFrame);\n }\n\n document.removeEventListener('keydown', closeOnEscape);\n document.removeEventListener('pointerdown', closeOnOutsideClick, true);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n});\n</script>\n\n<template>\n <div class=\"relative inline-block w-fit\">\n <div ref=\"triggerRef\" @click=\"open = ! open\">\n <slot name=\"trigger\" :open=\"open\" />\n </div>\n\n <Teleport to=\"body\">\n <transition\n enter-active-class=\"transition-opacity duration-150 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-100 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"open\"\n ref=\"menuRef\"\n class=\"z-50 rounded-xl shadow-xl shadow-neutral-950/10 dark:shadow-black/30\"\n :class=\"[widthClass, alignmentClasses]\"\n :style=\"menuStyle\"\n @click=\"open = false\"\n >\n <div class=\"rounded-xl border border-neutral-200 bg-white/95 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/95\" :class=\"contentClasses\">\n <slot name=\"content\" />\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup>\nimport { Link } from '@inertiajs/vue3';\n\ndefineProps({\n href: String,\n as: String,\n});\n</script>\n\n<template>\n <div>\n <button v-if=\"as == 'button'\" type=\"submit\" class=\"block w-full px-4 py-2 text-start text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </button>\n\n <a v-else-if=\"as =='a'\" :href=\"href\" class=\"block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </a>\n\n <Link v-else :href=\"href\" class=\"block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </Link>\n </div>\n</template>\n","<script setup>\nimport { computed, useSlots } from 'vue';\nimport SectionTitle from './SectionTitle.vue';\n\ndefineEmits(['submitted']);\n\nconst hasActions = computed(() => !! useSlots().actions);\n</script>\n\n<template>\n <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n <SectionTitle>\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #description>\n <slot name=\"description\" />\n </template>\n </SectionTitle>\n\n <div class=\"mt-5 md:col-span-2 md:mt-0\">\n <form @submit.prevent=\"$emit('submitted')\">\n <div\n class=\"rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6\"\n :class=\"hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md'\"\n >\n <div class=\"grid grid-cols-6 gap-6\">\n <slot name=\"form\" />\n </div>\n </div>\n\n <div v-if=\"hasActions\" class=\"flex items-center justify-start rounded-b-lg border border-t-0 border-neutral-200 bg-neutral-50 px-3 pb-6 text-end dark:border-neutral-800 dark:bg-neutral-900/60 sm:rounded-bl-md sm:rounded-br-md\">\n <slot name=\"actions\" />\n </div>\n </form>\n </div>\n </div>\n</template>\n","<script setup>\ndefineProps({\n message: String,\n});\n</script>\n\n<template>\n <div v-show=\"message\">\n <p class=\"text-sm text-red-600 dark:text-neutral-100\">\n {{ message }}\n </p>\n </div>\n</template>\n","<script setup>\ndefineProps({\n value: String,\n});\n</script>\n\n<template>\n <label class=\"block text-sm font-medium text-neutral-700 dark:text-neutral-100\">\n <span v-if=\"value\">{{ value }}</span>\n <span v-else><slot /></span>\n </label>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n\nimport { Link } from '@inertiajs/vue3';\nimport { computed, useAttrs } from 'vue';\n\nconst attrs = useAttrs();\n\nconst props = defineProps({\n href: {\n type: String,\n required: true,\n },\n title: {\n type: String,\n default: null,\n },\n external: {\n type: Boolean,\n default: false,\n },\n target: {\n type: String,\n default: null,\n },\n rel: {\n type: String,\n default: null,\n },\n variant: {\n type: String,\n default: 'primary',\n },\n});\n\nconst variantClasses = {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n success: 'bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-600 dark:text-white dark:hover:bg-emerald-600/90',\n secondary: 'bg-neutral-300 text-neutral-900 hover:bg-neutral-300/80 dark:bg-gray-500 dark:text-gray-50 dark:hover:bg-gray-500/80',\n tertiary: 'border border-neutral-200 bg-white text-neutral-900 shadow-xs hover:bg-neutral-50 dark:border-neutral-200 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-100',\n warning: 'bg-amber-100 text-amber-700 hover:bg-amber-100/90 focus-visible:ring-amber-500/20 dark:bg-amber-600/20 dark:text-neutral-50 dark:hover:bg-amber-600/30 dark:focus-visible:ring-amber-500/40',\n danger: 'bg-red-100 text-red-700 hover:bg-red-100/90 focus-visible:ring-red-500/20 dark:bg-red-600/20 dark:text-neutral-50 dark:hover:bg-red-600/30 dark:focus-visible:ring-red-500/40',\n 'warning-solid': 'bg-amber-500 text-white hover:bg-amber-500/90 dark:bg-amber-500 dark:text-white dark:hover:bg-amber-500/90',\n 'danger-solid': 'bg-red-600 text-white hover:bg-red-600/90 focus-visible:ring-red-500/20 dark:bg-red-600/60 dark:text-white dark:hover:bg-red-600/50 dark:focus-visible:ring-red-500/40',\n};\n\nconst resolvedVariant = computed(() => {\n return variantClasses[props.variant] ? props.variant : 'primary';\n});\n\nconst linkClasses = computed(() => [\n 'inline-flex h-9 min-w-[40px] shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md px-4 py-2 text-sm font-medium shadow-xs outline-none transition-all aria-invalid:border-red-500 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',\n variantClasses[resolvedVariant.value],\n attrs.class,\n]);\n</script>\n\n<template>\n <Link\n v-if=\"!external\"\n v-bind=\"attrs\"\n :href=\"href\"\n :title=\"title\"\n :class=\"linkClasses\"\n >\n <slot />\n </Link>\n <a\n v-else\n v-bind=\"attrs\"\n :href=\"href\"\n :title=\"title\"\n :target=\"target\"\n :rel=\"rel\"\n :class=\"linkClasses\"\n >\n <slot />\n </a>\n</template>\n","<script setup>\nimport Divider from \"./Divider.vue\";\n</script>\n\n<template>\n <div class=\"hidden sm:block\">\n <div class=\"py-8\">\n <Divider />\n </div>\n </div>\n</template>\n","import { computed, inject, provide, ref, type ComputedRef, type InjectionKey, type Ref } from 'vue';\n\nexport type SidebarState = 'expanded' | 'collapsed';\n\nexport type SidebarContext = {\n state: ComputedRef<SidebarState>;\n open: Ref<boolean>;\n setOpen: (value: boolean) => void;\n toggleSidebar: () => void;\n expand: () => void;\n collapse: () => void;\n};\n\nconst SIDEBAR_CONTEXT_KEY: InjectionKey<SidebarContext> = Symbol('SidebarContext');\n\nconst fallbackOpen = ref(true);\nconst fallbackContext: SidebarContext = {\n state: computed(() => (fallbackOpen.value ? 'expanded' : 'collapsed')),\n open: fallbackOpen,\n setOpen: (value: boolean) => {\n fallbackOpen.value = value;\n },\n toggleSidebar: () => {\n fallbackOpen.value = !fallbackOpen.value;\n },\n expand: () => {\n fallbackOpen.value = true;\n },\n collapse: () => {\n fallbackOpen.value = false;\n },\n};\n\nexport function provideSidebarContext(defaultOpen = true): SidebarContext {\n const open = ref(defaultOpen);\n const state = computed<SidebarState>(() => (open.value ? 'expanded' : 'collapsed'));\n\n const context: SidebarContext = {\n state,\n open,\n setOpen: (value: boolean) => {\n open.value = value;\n },\n toggleSidebar: () => {\n open.value = !open.value;\n },\n expand: () => {\n open.value = true;\n },\n collapse: () => {\n open.value = false;\n },\n };\n\n provide(SIDEBAR_CONTEXT_KEY, context);\n\n return context;\n}\n\nexport function useSidebar(): SidebarContext {\n return inject(SIDEBAR_CONTEXT_KEY, fallbackContext);\n}\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { useSidebar } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n class?: HTMLAttributes['class'];\n }>(),\n {\n side: 'left',\n variant: 'sidebar',\n collapsible: 'offcanvas',\n class: undefined,\n },\n);\n\nconst { state } = useSidebar();\n</script>\n\n<template>\n <div\n v-if=\"collapsible === 'none'\"\n data-slot=\"sidebar\"\n data-sidebar=\"sidebar\"\n :class=\"[\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n\n <div\n v-else\n class=\"group peer text-sidebar-foreground hidden md:block\"\n data-slot=\"sidebar\"\n :data-state=\"state\"\n :data-collapsible=\"state === 'collapsed' ? collapsible : ''\"\n :data-variant=\"variant\"\n :data-side=\"side\"\n >\n <div\n :class=\"[\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ]\"\n />\n <div\n :class=\"[\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n data-sidebar=\"sidebar\"\n class=\"bg-sidebar text-sidebar-foreground flex h-full w-full flex-col group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { useSidebar } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n class?: HTMLAttributes['class'];\n }>(),\n {\n side: 'left',\n variant: 'sidebar',\n collapsible: 'offcanvas',\n class: undefined,\n },\n);\n\nconst { state } = useSidebar();\n</script>\n\n<template>\n <div\n v-if=\"collapsible === 'none'\"\n data-slot=\"sidebar\"\n data-sidebar=\"sidebar\"\n :class=\"[\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n\n <div\n v-else\n class=\"group peer text-sidebar-foreground hidden md:block\"\n data-slot=\"sidebar\"\n :data-state=\"state\"\n :data-collapsible=\"state === 'collapsed' ? collapsible : ''\"\n :data-variant=\"variant\"\n :data-side=\"side\"\n >\n <div\n :class=\"[\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ]\"\n />\n <div\n :class=\"[\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n data-sidebar=\"sidebar\"\n class=\"bg-sidebar text-sidebar-foreground flex h-full w-full flex-col group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n :class=\"['flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n :class=\"['flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n :class=\"['relative flex w-full min-w-0 flex-col p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n :class=\"['relative flex w-full min-w-0 flex-col p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n :class=\"['w-full text-sm', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n :class=\"['w-full text-sm', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, computed, isVNode, useAttrs, useSlots, type HTMLAttributes, type VNode } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n asChild?: boolean;\n class?: HTMLAttributes['class'];\n }>(),\n {\n as: 'div',\n asChild: false,\n class: undefined,\n },\n);\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst baseClass = computed(() => [\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-none transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n props.class,\n]);\n\nconst childVNode = computed(() => {\n if (!props.asChild) {\n return null;\n }\n\n const content = slots.default?.() ?? [];\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\n\n if (!firstVNode) {\n return null;\n }\n\n return cloneVNode(firstVNode, {\n ...attrs,\n class: [baseClass.value, (firstVNode.props as Record<string, unknown> | null)?.class],\n });\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-if=\"!asChild\"\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n :class=\"baseClass\"\n v-bind=\"attrs\"\n >\n <slot />\n </component>\n <component :is=\"childVNode\" v-else-if=\"childVNode\" />\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, computed, isVNode, useAttrs, useSlots, type HTMLAttributes, type VNode } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n asChild?: boolean;\n class?: HTMLAttributes['class'];\n }>(),\n {\n as: 'div',\n asChild: false,\n class: undefined,\n },\n);\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst baseClass = computed(() => [\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-none transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n props.class,\n]);\n\nconst childVNode = computed(() => {\n if (!props.asChild) {\n return null;\n }\n\n const content = slots.default?.() ?? [];\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\n\n if (!firstVNode) {\n return null;\n }\n\n return cloneVNode(firstVNode, {\n ...attrs,\n class: [baseClass.value, (firstVNode.props as Record<string, unknown> | null)?.class],\n });\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-if=\"!asChild\"\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n :class=\"baseClass\"\n v-bind=\"attrs\"\n >\n <slot />\n </component>\n <component :is=\"childVNode\" v-else-if=\"childVNode\" />\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <main\n data-slot=\"sidebar-inset\"\n :class=\"[\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n props.class,\n ]\"\n >\n <slot />\n </main>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <main\n data-slot=\"sidebar-inset\"\n :class=\"[\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n props.class,\n ]\"\n >\n <slot />\n </main>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n :class=\"['flex w-full min-w-0 flex-col gap-1', props.class]\"\n >\n <slot />\n </ul>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n :class=\"['flex w-full min-w-0 flex-col gap-1', props.class]\"\n >\n <slot />\n </ul>\n</template>\n","<script setup lang=\"ts\">\r\nimport { Link } from '@inertiajs/vue3';\r\nimport { cloneVNode, computed, isVNode, mergeProps, useAttrs, useSlots, type Component, type HTMLAttributes, type VNode } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n href?: string;\r\n title?: string;\r\n active?: boolean;\r\n isActive?: boolean;\r\n icon?: Component;\r\n external?: boolean;\r\n target?: string;\r\n rel?: string;\r\n variant?: 'default' | 'outline';\r\n size?: 'default' | 'sm' | 'lg';\r\n as?: 'button' | 'a' | 'link';\r\n asChild?: boolean;\r\n tooltip?: string;\r\n class?: HTMLAttributes['class'];\r\n }>(),\r\n {\r\n title: '',\r\n href: undefined,\r\n active: undefined,\r\n isActive: undefined,\r\n icon: undefined,\r\n external: false,\r\n target: undefined,\r\n rel: undefined,\r\n variant: 'default',\r\n size: 'default',\r\n as: undefined,\r\n asChild: false,\r\n tooltip: undefined,\r\n class: undefined,\r\n },\r\n);\r\n\r\nconst attrs = useAttrs();\r\nconst slots = useSlots();\r\n\r\nconst resolvedActive = computed(() => props.active ?? props.isActive ?? false);\r\n\r\nconst baseClass = computed(() => [\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:p-2! group-data-[collapsible=icon]:[&>*:first-child]:mx-auto group-data-[collapsible=icon]:[&>*:first-child]:flex group-data-[collapsible=icon]:[&>*:first-child]:items-center group-data-[collapsible=icon]:[&>*:first-child]:justify-center [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n props.variant === 'outline'\r\n ? 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]'\r\n : 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n props.size === 'sm'\r\n ? 'h-7 text-xs'\r\n : props.size === 'lg'\r\n ? 'h-12 text-sm group-data-[collapsible=icon]:p-0!'\r\n : 'h-8 text-sm',\r\n props.class,\r\n]);\r\n\r\nconst sharedAttrs = computed(() => ({\r\n ...attrs,\r\n title: props.tooltip ?? (props.title || undefined),\r\n 'data-slot': 'sidebar-menu-button',\r\n 'data-sidebar': 'menu-button',\r\n 'data-size': props.size,\r\n 'data-active': resolvedActive.value ? 'true' : undefined,\r\n 'aria-current': resolvedActive.value ? ('page' as const) : undefined,\r\n class: baseClass.value,\r\n}));\r\n\r\nconst childVNode = computed(() => {\r\n if (!props.asChild) {\r\n return null;\r\n }\r\n\r\n const content = slots.default?.() ?? [];\r\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\r\n\r\n if (!firstVNode) {\r\n return null;\r\n }\r\n\r\n return cloneVNode(firstVNode, mergeProps(sharedAttrs.value, firstVNode.props ?? {}));\r\n});\r\n</script>\r\n\r\n<template>\r\n <component :is=\"childVNode\" v-if=\"asChild && childVNode\" />\r\n <Link\r\n v-else-if=\"(as === 'link' || !as) && href && !external\"\r\n :href=\"href\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </Link>\r\n <a\r\n v-else-if=\"href && (external || as === 'a')\"\r\n :href=\"href\"\r\n :target=\"target\"\r\n :rel=\"rel\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Link } from '@inertiajs/vue3';\r\nimport { cloneVNode, computed, isVNode, mergeProps, useAttrs, useSlots, type Component, type HTMLAttributes, type VNode } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n href?: string;\r\n title?: string;\r\n active?: boolean;\r\n isActive?: boolean;\r\n icon?: Component;\r\n external?: boolean;\r\n target?: string;\r\n rel?: string;\r\n variant?: 'default' | 'outline';\r\n size?: 'default' | 'sm' | 'lg';\r\n as?: 'button' | 'a' | 'link';\r\n asChild?: boolean;\r\n tooltip?: string;\r\n class?: HTMLAttributes['class'];\r\n }>(),\r\n {\r\n title: '',\r\n href: undefined,\r\n active: undefined,\r\n isActive: undefined,\r\n icon: undefined,\r\n external: false,\r\n target: undefined,\r\n rel: undefined,\r\n variant: 'default',\r\n size: 'default',\r\n as: undefined,\r\n asChild: false,\r\n tooltip: undefined,\r\n class: undefined,\r\n },\r\n);\r\n\r\nconst attrs = useAttrs();\r\nconst slots = useSlots();\r\n\r\nconst resolvedActive = computed(() => props.active ?? props.isActive ?? false);\r\n\r\nconst baseClass = computed(() => [\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:p-2! group-data-[collapsible=icon]:[&>*:first-child]:mx-auto group-data-[collapsible=icon]:[&>*:first-child]:flex group-data-[collapsible=icon]:[&>*:first-child]:items-center group-data-[collapsible=icon]:[&>*:first-child]:justify-center [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n props.variant === 'outline'\r\n ? 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]'\r\n : 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n props.size === 'sm'\r\n ? 'h-7 text-xs'\r\n : props.size === 'lg'\r\n ? 'h-12 text-sm group-data-[collapsible=icon]:p-0!'\r\n : 'h-8 text-sm',\r\n props.class,\r\n]);\r\n\r\nconst sharedAttrs = computed(() => ({\r\n ...attrs,\r\n title: props.tooltip ?? (props.title || undefined),\r\n 'data-slot': 'sidebar-menu-button',\r\n 'data-sidebar': 'menu-button',\r\n 'data-size': props.size,\r\n 'data-active': resolvedActive.value ? 'true' : undefined,\r\n 'aria-current': resolvedActive.value ? ('page' as const) : undefined,\r\n class: baseClass.value,\r\n}));\r\n\r\nconst childVNode = computed(() => {\r\n if (!props.asChild) {\r\n return null;\r\n }\r\n\r\n const content = slots.default?.() ?? [];\r\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\r\n\r\n if (!firstVNode) {\r\n return null;\r\n }\r\n\r\n return cloneVNode(firstVNode, mergeProps(sharedAttrs.value, firstVNode.props ?? {}));\r\n});\r\n</script>\r\n\r\n<template>\r\n <component :is=\"childVNode\" v-if=\"asChild && childVNode\" />\r\n <Link\r\n v-else-if=\"(as === 'link' || !as) && href && !external\"\r\n :href=\"href\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </Link>\r\n <a\r\n v-else-if=\"href && (external || as === 'a')\"\r\n :href=\"href\"\r\n :target=\"target\"\r\n :rel=\"rel\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n :class=\"['group/menu-item relative', props.class]\"\n >\n <slot />\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n :class=\"['group/menu-item relative', props.class]\"\n >\n <slot />\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { provideSidebarContext } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n defaultOpen?: boolean;\n width?: string;\n iconWidth?: string;\n class?: HTMLAttributes['class'];\n }>(),\n {\n defaultOpen: true,\n width: '16rem',\n iconWidth: '3rem',\n class: undefined,\n },\n);\n\nprovideSidebarContext(props.defaultOpen);\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-wrapper\"\n :style=\"{\n '--sidebar-width': props.width,\n '--sidebar-width-icon': props.iconWidth,\n }\"\n :class=\"[\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { provideSidebarContext } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n defaultOpen?: boolean;\n width?: string;\n iconWidth?: string;\n class?: HTMLAttributes['class'];\n }>(),\n {\n defaultOpen: true,\n width: '16rem',\n iconWidth: '3rem',\n class: undefined,\n },\n);\n\nprovideSidebarContext(props.defaultOpen);\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-wrapper\"\n :style=\"{\n '--sidebar-width': props.width,\n '--sidebar-width-icon': props.iconWidth,\n }\"\n :class=\"[\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n</template>\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst isEmptyString = (value) => value === \"\";\n\nexport { isEmptyString };\n//# sourceMappingURL=isEmptyString.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { provide, inject } from 'vue';\n\nconst LUCIDE_CONTEXT = Symbol(\"lucide-icons\");\nfunction setLucideProps(props) {\n return provide(LUCIDE_CONTEXT, props);\n}\nfunction useLucideProps() {\n return inject(LUCIDE_CONTEXT, {});\n}\n\nexport { LUCIDE_CONTEXT, setLucideProps, useLucideProps };\n//# sourceMappingURL=context.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { computed, h } from 'vue';\nimport { isEmptyString } from './shared/src/utils/isEmptyString.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport defaultAttributes from './defaultAttributes.js';\nimport { useLucideProps } from './context.js';\n\nconst Icon = ({\n name,\n iconNode,\n absoluteStrokeWidth,\n \"absolute-stroke-width\": absoluteStrokeWidthKebabCase,\n strokeWidth,\n \"stroke-width\": strokeWidthKebabCase,\n size,\n color,\n ...props\n}, { slots }) => {\n const {\n size: contextSize,\n color: contextColor,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n class: contextClass = \"\"\n } = useLucideProps();\n const calculatedStrokeWidth = computed(() => {\n const isAbsoluteStrokeWidth = isEmptyString(absoluteStrokeWidth) || isEmptyString(absoluteStrokeWidthKebabCase) || absoluteStrokeWidth === true || absoluteStrokeWidthKebabCase === true || contextAbsoluteStrokeWidth === true;\n const strokeWidthValue = strokeWidth || strokeWidthKebabCase || contextStrokeWidth || defaultAttributes[\"stroke-width\"];\n if (isAbsoluteStrokeWidth) {\n return Number(strokeWidthValue) * 24 / Number(size ?? contextSize ?? defaultAttributes.width);\n }\n return strokeWidthValue;\n });\n return h(\n \"svg\",\n {\n ...defaultAttributes,\n ...props,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor ?? defaultAttributes.stroke,\n \"stroke-width\": calculatedStrokeWidth.value,\n class: mergeClasses(\n \"lucide\",\n contextClass,\n ...name ? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`] : [\"lucide-icon\"]\n )\n },\n [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []]\n );\n};\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => (props, { slots, attrs }) => h(\n Icon,\n {\n ...attrs,\n ...props,\n iconNode,\n name: iconName\n },\n slots\n);\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n];\nconst GripVertical = createLucideIcon(\"grip-vertical\", __iconNode);\n\nexport { __iconNode, GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m16 15-3-3 3-3\", key: \"14y99z\" }]\n];\nconst PanelLeftClose = createLucideIcon(\"panel-left-close\", __iconNode);\n\nexport { __iconNode, PanelLeftClose as default };\n//# sourceMappingURL=panel-left-close.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m14 9 3 3-3 3\", key: \"8010ee\" }]\n];\nconst PanelLeftOpen = createLucideIcon(\"panel-left-open\", __iconNode);\n\nexport { __iconNode, PanelLeftOpen as default };\n//# sourceMappingURL=panel-left-open.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","<script setup lang=\"ts\">\r\nimport type { HTMLAttributes } from 'vue';\r\nimport { PanelLeftClose, PanelLeftOpen } from '@lucide/vue';\r\nimport Button from './Button.vue';\r\nimport { useSidebar } from './sidebar-context';\r\n\r\nconst props = defineProps<{\r\n class?: HTMLAttributes['class'];\r\n}>();\r\n\r\nconst { state, toggleSidebar } = useSidebar();\r\n</script>\r\n\r\n<template>\r\n <Button\r\n data-sidebar=\"trigger\"\r\n data-slot=\"sidebar-trigger\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n :class=\"['h-7 w-7', props.class]\"\r\n @click=\"toggleSidebar\"\r\n >\r\n <PanelLeftOpen v-if=\"state === 'collapsed'\" />\r\n <PanelLeftClose v-else />\r\n <span class=\"sr-only\">Basculer la barre latérale</span>\r\n </Button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { HTMLAttributes } from 'vue';\r\nimport { PanelLeftClose, PanelLeftOpen } from '@lucide/vue';\r\nimport Button from './Button.vue';\r\nimport { useSidebar } from './sidebar-context';\r\n\r\nconst props = defineProps<{\r\n class?: HTMLAttributes['class'];\r\n}>();\r\n\r\nconst { state, toggleSidebar } = useSidebar();\r\n</script>\r\n\r\n<template>\r\n <Button\r\n data-sidebar=\"trigger\"\r\n data-slot=\"sidebar-trigger\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n :class=\"['h-7 w-7', props.class]\"\r\n @click=\"toggleSidebar\"\r\n >\r\n <PanelLeftOpen v-if=\"state === 'collapsed'\" />\r\n <PanelLeftClose v-else />\r\n <span class=\"sr-only\">Basculer la barre latérale</span>\r\n </Button>\r\n</template>\r\n","const stack: symbol[] = []\nlet bodyLockCount = 0\nlet previousBodyOverflow = ''\n\nexport type SlidePanelPushSide = 'top' | 'right' | 'bottom' | 'left'\n\ntype PushTargetState = {\n contributions: Map<symbol, { side: SlidePanelPushSide; size: number }>\n originalMargins: Record<SlidePanelPushSide, { value: string; priority: string; base: number }>\n originalTransition: { value: string; priority: string }\n}\n\nconst pushTargets = new Map<HTMLElement, PushTargetState>()\n\nconst marginProperty: Record<SlidePanelPushSide, 'marginTop' | 'marginRight' | 'marginBottom' | 'marginLeft'> = {\n top: 'marginTop',\n right: 'marginRight',\n bottom: 'marginBottom',\n left: 'marginLeft',\n}\n\nconst ensurePushTarget = (target: HTMLElement): PushTargetState => {\n const existing = pushTargets.get(target)\n if (existing) return existing\n\n const computed = window.getComputedStyle(target)\n const originalMargins = (['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]).reduce((margins, side) => {\n const property = marginProperty[side]\n margins[side] = {\n value: target.style[property],\n priority: target.style.getPropertyPriority(`margin-${side}`),\n base: Number.parseFloat(computed[property]) || 0,\n }\n return margins\n }, {} as PushTargetState['originalMargins'])\n\n const state: PushTargetState = {\n contributions: new Map(),\n originalMargins,\n originalTransition: {\n value: target.style.transition,\n priority: target.style.getPropertyPriority('transition'),\n },\n }\n\n pushTargets.set(target, state)\n return state\n}\n\nconst applyPushTarget = (target: HTMLElement, state: PushTargetState): void => {\n const totals = (['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]).reduce((result, side) => {\n result[side] = 0\n return result\n }, {} as Record<SlidePanelPushSide, number>)\n\n for (const contribution of state.contributions.values()) {\n totals[contribution.side] += contribution.size\n }\n\n target.style.setProperty(\n 'transition',\n state.originalTransition.value\n ? `${state.originalTransition.value}, margin 200ms ease`\n : 'margin 200ms ease',\n )\n\n for (const side of ['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]) {\n target.style[marginProperty[side]] = `${state.originalMargins[side].base + totals[side]}px`\n }\n}\n\nexport const setSlidePanelPush = (\n id: symbol,\n target: HTMLElement,\n side: SlidePanelPushSide,\n size: number,\n): void => {\n const state = ensurePushTarget(target)\n state.contributions.set(id, { side, size: Math.max(0, size) })\n applyPushTarget(target, state)\n}\n\nexport const removeSlidePanelPush = (id: symbol): void => {\n for (const [target, state] of pushTargets) {\n if (!state.contributions.delete(id)) continue\n\n if (state.contributions.size > 0) {\n applyPushTarget(target, state)\n continue\n }\n\n for (const side of ['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]) {\n const original = state.originalMargins[side]\n target.style.setProperty(`margin-${side}`, original.value, original.priority)\n if (!original.value) target.style.removeProperty(`margin-${side}`)\n }\n\n target.style.setProperty('transition', state.originalTransition.value, state.originalTransition.priority)\n if (!state.originalTransition.value) target.style.removeProperty('transition')\n pushTargets.delete(target)\n }\n}\n\nexport const registerSlidePanel = (id: symbol, lockBody: boolean): number => {\n if (!stack.includes(id)) {\n stack.push(id)\n\n if (lockBody && typeof document !== 'undefined') {\n if (bodyLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n\n bodyLockCount += 1\n }\n }\n\n return 1000 + (stack.indexOf(id) + 1) * 2\n}\n\nexport const unregisterSlidePanel = (id: symbol, lockBody: boolean): void => {\n const index = stack.indexOf(id)\n if (index === -1) {\n return\n }\n\n stack.splice(index, 1)\n\n if (lockBody && typeof document !== 'undefined' && bodyLockCount > 0) {\n bodyLockCount -= 1\n\n if (bodyLockCount === 0) {\n document.body.style.overflow = previousBodyOverflow\n previousBodyOverflow = ''\n }\n }\n}\n\nexport const isTopSlidePanel = (id: symbol): boolean => stack[stack.length - 1] === id\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport {\n isTopSlidePanel,\n removeSlidePanelPush,\n registerSlidePanel,\n setSlidePanelPush,\n unregisterSlidePanel,\n} from './slide-panel-context'\n\nexport type SlidePanelPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type SlidePanelMode = 'overlay' | 'push'\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n position?: SlidePanelPosition\n width?: string | number\n height?: string | number\n top?: string | number\n right?: string | number\n bottom?: string | number\n left?: string | number\n mode?: SlidePanelMode\n pushTarget?: string | HTMLElement | null\n backdrop?: boolean\n closeable?: boolean\n}>(), {\n show: false,\n position: 'right',\n mode: 'overlay',\n backdrop: false,\n closeable: true,\n})\n\nconst emit = defineEmits<{ close: [] }>()\nconst panel = ref<HTMLElement | null>(null)\nconst rendered = ref(false)\nconst visible = ref(false)\nconst layer = ref(0)\nconst panelId = Symbol('slide-panel')\nlet previouslyFocused: Element | null = null\nlet resizeObserver: ResizeObserver | undefined\nlet warnedAboutPushTarget = false\n\nconst isTopmost = computed(() => isTopSlidePanel(panelId))\n\nconst toCssValue = (value: string | number | undefined) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nconst panelStyle = computed<Record<string, string>>(() => {\n const style: Record<string, string> = { zIndex: String(layer.value) }\n\n if (props.position === 'left' || props.position === 'right') {\n style.width = toCssValue(props.width) ?? '400px'\n style.height = toCssValue(props.height) ?? '100vh'\n } else {\n style.width = toCssValue(props.width) ?? '100vw'\n style.height = toCssValue(props.height) ?? 'auto'\n }\n\n const defaultEdges: Record<SlidePanelPosition, Record<string, string>> = {\n right: { top: '0px', right: '0px', bottom: '0px' },\n left: { top: '0px', bottom: '0px', left: '0px' },\n top: { top: '0px', right: '0px', left: '0px' },\n bottom: { right: '0px', bottom: '0px', left: '0px' },\n }\n\n Object.assign(style, defaultEdges[props.position])\n\n for (const edge of ['top', 'right', 'bottom', 'left'] as const) {\n const value = toCssValue(props[edge])\n if (value !== undefined) style[edge] = value\n }\n\n return style\n})\n\nconst transitionClasses = computed(() => {\n switch (props.position) {\n case 'left': return { enterFrom: '-translate-x-full', leaveTo: '-translate-x-full' }\n case 'top': return { enterFrom: '-translate-y-full', leaveTo: '-translate-y-full' }\n case 'bottom': return { enterFrom: 'translate-y-full', leaveTo: 'translate-y-full' }\n default: return { enterFrom: 'translate-x-full', leaveTo: 'translate-x-full' }\n }\n})\n\nconst resolvePushTarget = (): HTMLElement | null => {\n if (typeof document === 'undefined' || !props.pushTarget) return null\n if (typeof props.pushTarget === 'string') return document.querySelector<HTMLElement>(props.pushTarget)\n return props.pushTarget\n}\n\nconst updatePush = () => {\n if (!visible.value || props.mode !== 'push') {\n removeSlidePanelPush(panelId)\n return\n }\n\n const target = resolvePushTarget()\n if (!target || !panel.value) {\n removeSlidePanelPush(panelId)\n if (!warnedAboutPushTarget) {\n console.warn('[SlidePanel] mode=\"push\" requires pushTarget to resolve to an HTMLElement.')\n warnedAboutPushTarget = true\n }\n return\n }\n\n warnedAboutPushTarget = false\n const size = props.position === 'left' || props.position === 'right'\n ? panel.value.getBoundingClientRect().width\n : panel.value.getBoundingClientRect().height\n setSlidePanelPush(panelId, target, props.position, size)\n}\n\nconst focusPanel = async () => {\n await nextTick()\n panel.value?.focus()\n updatePush()\n}\n\nconst open = () => {\n previouslyFocused = typeof document !== 'undefined' ? document.activeElement : null\n rendered.value = true\n layer.value = registerSlidePanel(panelId, props.backdrop)\n void nextTick(() => {\n visible.value = true\n void focusPanel()\n })\n}\n\nconst close = () => {\n if (!rendered.value) return\n\n visible.value = false\n removeSlidePanelPush(panelId)\n}\n\nconst finishClose = () => {\n if (props.show) return\n\n rendered.value = false\n unregisterSlidePanel(panelId, props.backdrop)\n if (previouslyFocused instanceof HTMLElement) previouslyFocused.focus()\n}\n\nconst requestClose = () => {\n if (props.closeable && isTopmost.value) emit('close')\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.show && isTopmost.value) {\n event.preventDefault()\n requestClose()\n }\n}\n\nwatch(() => props.show, (show) => show ? open() : close(), { immediate: true })\n\nwatch(\n () => [props.mode, props.pushTarget, props.position, props.width, props.height, props.top, props.right, props.bottom, props.left],\n () => void nextTick(updatePush),\n)\n\nwatch(panel, (element) => {\n resizeObserver?.disconnect()\n if (element) {\n resizeObserver?.observe(element)\n updatePush()\n }\n})\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(updatePush)\n if (panel.value) resizeObserver.observe(panel.value)\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n resizeObserver?.disconnect()\n unregisterSlidePanel(panelId, props.backdrop)\n removeSlidePanelPush(panelId)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"rendered && backdrop\"\n v-show=\"visible\"\n class=\"fixed inset-0 bg-neutral-950/40 backdrop-blur-[1px]\"\n :style=\"{ zIndex: String(layer - 1) }\"\n aria-hidden=\"true\"\n @click=\"requestClose\"\n />\n </Transition>\n\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n :enter-from-class=\"`${transitionClasses.enterFrom} opacity-0`\"\n enter-to-class=\"translate-x-0 translate-y-0 opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0 opacity-100\"\n :leave-to-class=\"`${transitionClasses.leaveTo} opacity-0`\"\n >\n <section\n v-if=\"rendered\"\n v-show=\"visible\"\n ref=\"panel\"\n class=\"fixed max-w-full overflow-y-auto border border-neutral-200 bg-white shadow-2xl outline-none dark:border-neutral-800 dark:bg-neutral-950\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-modal=\"backdrop ? 'true' : undefined\"\n tabindex=\"-1\"\n @after-leave=\"finishClose\"\n >\n <slot />\n </section>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport {\n isTopSlidePanel,\n removeSlidePanelPush,\n registerSlidePanel,\n setSlidePanelPush,\n unregisterSlidePanel,\n} from './slide-panel-context'\n\nexport type SlidePanelPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type SlidePanelMode = 'overlay' | 'push'\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n position?: SlidePanelPosition\n width?: string | number\n height?: string | number\n top?: string | number\n right?: string | number\n bottom?: string | number\n left?: string | number\n mode?: SlidePanelMode\n pushTarget?: string | HTMLElement | null\n backdrop?: boolean\n closeable?: boolean\n}>(), {\n show: false,\n position: 'right',\n mode: 'overlay',\n backdrop: false,\n closeable: true,\n})\n\nconst emit = defineEmits<{ close: [] }>()\nconst panel = ref<HTMLElement | null>(null)\nconst rendered = ref(false)\nconst visible = ref(false)\nconst layer = ref(0)\nconst panelId = Symbol('slide-panel')\nlet previouslyFocused: Element | null = null\nlet resizeObserver: ResizeObserver | undefined\nlet warnedAboutPushTarget = false\n\nconst isTopmost = computed(() => isTopSlidePanel(panelId))\n\nconst toCssValue = (value: string | number | undefined) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nconst panelStyle = computed<Record<string, string>>(() => {\n const style: Record<string, string> = { zIndex: String(layer.value) }\n\n if (props.position === 'left' || props.position === 'right') {\n style.width = toCssValue(props.width) ?? '400px'\n style.height = toCssValue(props.height) ?? '100vh'\n } else {\n style.width = toCssValue(props.width) ?? '100vw'\n style.height = toCssValue(props.height) ?? 'auto'\n }\n\n const defaultEdges: Record<SlidePanelPosition, Record<string, string>> = {\n right: { top: '0px', right: '0px', bottom: '0px' },\n left: { top: '0px', bottom: '0px', left: '0px' },\n top: { top: '0px', right: '0px', left: '0px' },\n bottom: { right: '0px', bottom: '0px', left: '0px' },\n }\n\n Object.assign(style, defaultEdges[props.position])\n\n for (const edge of ['top', 'right', 'bottom', 'left'] as const) {\n const value = toCssValue(props[edge])\n if (value !== undefined) style[edge] = value\n }\n\n return style\n})\n\nconst transitionClasses = computed(() => {\n switch (props.position) {\n case 'left': return { enterFrom: '-translate-x-full', leaveTo: '-translate-x-full' }\n case 'top': return { enterFrom: '-translate-y-full', leaveTo: '-translate-y-full' }\n case 'bottom': return { enterFrom: 'translate-y-full', leaveTo: 'translate-y-full' }\n default: return { enterFrom: 'translate-x-full', leaveTo: 'translate-x-full' }\n }\n})\n\nconst resolvePushTarget = (): HTMLElement | null => {\n if (typeof document === 'undefined' || !props.pushTarget) return null\n if (typeof props.pushTarget === 'string') return document.querySelector<HTMLElement>(props.pushTarget)\n return props.pushTarget\n}\n\nconst updatePush = () => {\n if (!visible.value || props.mode !== 'push') {\n removeSlidePanelPush(panelId)\n return\n }\n\n const target = resolvePushTarget()\n if (!target || !panel.value) {\n removeSlidePanelPush(panelId)\n if (!warnedAboutPushTarget) {\n console.warn('[SlidePanel] mode=\"push\" requires pushTarget to resolve to an HTMLElement.')\n warnedAboutPushTarget = true\n }\n return\n }\n\n warnedAboutPushTarget = false\n const size = props.position === 'left' || props.position === 'right'\n ? panel.value.getBoundingClientRect().width\n : panel.value.getBoundingClientRect().height\n setSlidePanelPush(panelId, target, props.position, size)\n}\n\nconst focusPanel = async () => {\n await nextTick()\n panel.value?.focus()\n updatePush()\n}\n\nconst open = () => {\n previouslyFocused = typeof document !== 'undefined' ? document.activeElement : null\n rendered.value = true\n layer.value = registerSlidePanel(panelId, props.backdrop)\n void nextTick(() => {\n visible.value = true\n void focusPanel()\n })\n}\n\nconst close = () => {\n if (!rendered.value) return\n\n visible.value = false\n removeSlidePanelPush(panelId)\n}\n\nconst finishClose = () => {\n if (props.show) return\n\n rendered.value = false\n unregisterSlidePanel(panelId, props.backdrop)\n if (previouslyFocused instanceof HTMLElement) previouslyFocused.focus()\n}\n\nconst requestClose = () => {\n if (props.closeable && isTopmost.value) emit('close')\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.show && isTopmost.value) {\n event.preventDefault()\n requestClose()\n }\n}\n\nwatch(() => props.show, (show) => show ? open() : close(), { immediate: true })\n\nwatch(\n () => [props.mode, props.pushTarget, props.position, props.width, props.height, props.top, props.right, props.bottom, props.left],\n () => void nextTick(updatePush),\n)\n\nwatch(panel, (element) => {\n resizeObserver?.disconnect()\n if (element) {\n resizeObserver?.observe(element)\n updatePush()\n }\n})\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(updatePush)\n if (panel.value) resizeObserver.observe(panel.value)\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n resizeObserver?.disconnect()\n unregisterSlidePanel(panelId, props.backdrop)\n removeSlidePanelPush(panelId)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"rendered && backdrop\"\n v-show=\"visible\"\n class=\"fixed inset-0 bg-neutral-950/40 backdrop-blur-[1px]\"\n :style=\"{ zIndex: String(layer - 1) }\"\n aria-hidden=\"true\"\n @click=\"requestClose\"\n />\n </Transition>\n\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n :enter-from-class=\"`${transitionClasses.enterFrom} opacity-0`\"\n enter-to-class=\"translate-x-0 translate-y-0 opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0 opacity-100\"\n :leave-to-class=\"`${transitionClasses.leaveTo} opacity-0`\"\n >\n <section\n v-if=\"rendered\"\n v-show=\"visible\"\n ref=\"panel\"\n class=\"fixed max-w-full overflow-y-auto border border-neutral-200 bg-white shadow-2xl outline-none dark:border-neutral-800 dark:bg-neutral-950\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-modal=\"backdrop ? 'true' : undefined\"\n tabindex=\"-1\"\n @after-leave=\"finishClose\"\n >\n <slot />\n </section>\n </Transition>\n </Teleport>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/vue/24/outline';\n\nconst props = defineProps({\n fields: {\n type: Array,\n required: true,\n validator: (value) => {\n return value.every(field =>\n typeof field === 'object' &&\n field.key &&\n field.label\n );\n }\n },\n currentSortField: {\n type: String,\n default: ''\n },\n currentDirection: {\n type: String,\n default: 'asc',\n validator: (value) => ['asc', 'desc'].includes(value)\n },\n count: {\n type: Number,\n default: 0\n },\n countLabel: {\n type: String,\n default: 'items'\n },\n sortByLabel: {\n type: String,\n default: 'Sort by'\n }\n});\n\nconst emit = defineEmits(['sort']);\n\nconst handleSort = (fieldKey) => {\n emit('sort', fieldKey);\n};\n</script>\n\n<template>\n <div class=\"rounded-xl border border-neutral-200 bg-white/80 px-6 py-4 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/80\">\n <div class=\"flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center\">\n <div class=\"flex items-center gap-3\">\n <label class=\"text-sm font-medium text-neutral-700 dark:text-neutral-100\">{{ sortByLabel }}:</label>\n <div class=\"flex flex-wrap items-center gap-2\">\n <button\n v-for=\"field in fields\"\n :key=\"field.key\"\n @click=\"handleSort(field.key)\"\n :class=\"[\n 'px-3 py-1.5 text-sm font-medium rounded-lg transition-all duration-200',\n currentSortField === field.key\n ? 'bg-neutral-900 text-neutral-50 shadow-sm dark:bg-neutral-800 dark:text-neutral-50'\n : 'bg-neutral-100 text-neutral-700 hover:bg-neutral-200 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:bg-neutral-800'\n ]\"\n >\n {{ field.label }}\n <ChevronUpIcon\n v-if=\"currentSortField === field.key && currentDirection === 'asc'\"\n class=\"w-3 h-3 ml-1 inline\"\n />\n <ChevronDownIcon\n v-if=\"currentSortField === field.key && currentDirection === 'desc'\"\n class=\"w-3 h-3 ml-1 inline\"\n />\n </button>\n </div>\n </div>\n <div class=\"text-xs text-neutral-500 dark:text-neutral-200\">\n {{ count }} {{ countLabel }}\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/vue/24/outline';\n\nconst props = defineProps({\n field: {\n type: String,\n required: true\n },\n currentSortField: {\n type: String,\n default: ''\n },\n currentDirection: {\n type: String,\n default: 'asc'\n },\n headerClass: {\n type: [String, Array, Object],\n default: ''\n },\n headerStyle: {\n type: Object,\n default: () => ({})\n },\n contentClass: {\n type: String,\n default: ''\n }\n});\n\nconst isCurrentSort = computed(() => {\n return props.field === props.currentSortField;\n});\n\nconst sortIconClass = computed(() => {\n if (!isCurrentSort.value) {\n return 'text-neutral-400 dark:text-neutral-200';\n }\n\n return 'text-neutral-900 dark:text-neutral-100';\n});\n</script>\n\n<template>\n <th\n :class=\"headerClass\"\n :style=\"headerStyle\"\n @click=\"$emit('sort', field)\"\n >\n <div :class=\"contentClass\">\n <span><slot></slot></span>\n <div class=\"flex flex-col\">\n <ChevronUpIcon\n v-if=\"isCurrentSort && currentDirection === 'asc'\"\n :class=\"sortIconClass\"\n class=\"w-3 h-3\"\n />\n <ChevronDownIcon\n v-if=\"isCurrentSort && currentDirection === 'desc'\"\n :class=\"sortIconClass\"\n class=\"w-3 h-3\"\n />\n </div>\n </div>\n </th>\n</template>\n","<script setup>\nimport { Search } from \"@lucide/vue\";\nimport { computed } from \"vue\";\nimport InputGroup from \"./InputGroup.vue\";\nimport ToggleInput from \"./ToggleInput.vue\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"Search...\",\n },\n count: {\n type: Number,\n default: null,\n },\n countLabel: {\n type: String,\n default: \"results\",\n },\n queryLabel: {\n type: String,\n default: \"for\",\n },\n showDeleted: {\n type: Boolean,\n default: false,\n },\n showDeletedToggle: {\n type: Boolean,\n default: false,\n },\n showDeletedLabel: {\n type: String,\n default: \"Show deleted\",\n },\n cardClass: {\n type: String,\n default:\n \"rounded-xl border border-neutral-200 bg-white/90 px-6 py-4 shadow-sm dark:border-neutral-800 dark:bg-neutral-950/90\",\n },\n searchbar: {\n type: Boolean,\n default: true,\n },\n searchMode: {\n type: String,\n default: \"server\",\n validator: (value) => [\"client\", \"server\"].includes(value),\n },\n searchFieldsLayout: {\n type: String,\n default: \"inline\",\n validator: (value) => [\"inline\", \"stacked\"].includes(value),\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"update:showDeleted\"]);\n\nconst model = computed({\n get: () => props.modelValue,\n set: (value) => emit(\"update:modelValue\", value),\n});\n\nconst showDeletedModel = computed({\n get: () => props.showDeleted,\n set: (value) => emit(\"update:showDeleted\", value),\n});\n\nconst searchContentClasses = computed(() =>\n props.searchFieldsLayout === \"stacked\"\n ? \"flex w-full min-w-0 flex-1 flex-col gap-3\"\n : \"flex w-full min-w-0 flex-1 flex-col gap-3 lg:flex-row lg:items-center\"\n);\n\nconst searchFieldsClasses = computed(() =>\n props.searchFieldsLayout === \"stacked\"\n ? \"w-full min-w-0\"\n : \"min-w-0 flex-1\"\n);\n</script>\n\n<template>\n <div :class=\"cardClass\">\n <div\n class=\"flex flex-col items-start gap-4 lg:flex-row lg:flex-wrap lg:items-center lg:justify-between\"\n >\n <div :class=\"searchContentClasses\">\n <InputGroup\n v-if=\"searchbar\"\n v-model=\"model\"\n type=\"text\"\n root-class=\"w-full lg:max-w-md\"\n :placeholder=\"placeholder\"\n >\n <template #leading-icon>\n <Search class=\"h-5 w-5\" />\n </template>\n </InputGroup>\n <!-- Slot for additional search fields -->\n <div :class=\"searchFieldsClasses\">\n <slot name=\"search-fields\" />\n </div>\n </div>\n\n <div\n v-if=\"showDeletedToggle || count !== null || $slots.controls\"\n class=\"flex shrink-0 flex-col items-start gap-3 sm:flex-row sm:items-center lg:w-auto\"\n >\n <div v-if=\"showDeletedToggle\" class=\"flex items-center\">\n <ToggleInput v-model=\"showDeletedModel\" :label=\"showDeletedLabel\" />\n </div>\n\n <!-- Slot for additional control fields -->\n <slot name=\"controls\" />\n\n <div\n v-if=\"count !== null\"\n class=\"flex items-center text-xs text-neutral-500 dark:text-neutral-400 sm:w-auto sm:text-sm lg:w-auto\"\n >\n <span>{{ count }} {{ countLabel }}</span>\n <span v-if=\"model\" class=\"ml-2\">\n {{ queryLabel }}\n <span class=\"font-medium text-neutral-700 dark:text-neutral-200\">\n \"{{ model }}\"\n </span>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n","export const getNestedValue = (object, path) => {\n if (!path || typeof path !== 'string') {\n return object;\n }\n\n return path.split('.').reduce((current, key) => current?.[key], object);\n};\n\nexport const setNestedValue = (object, path, value) => {\n if (!path || typeof path !== 'string' || object == null) {\n return;\n }\n\n const keys = path.split('.');\n const lastKey = keys.pop();\n let current = object;\n\n for (const key of keys) {\n if (current[key] === undefined || current[key] === null || typeof current[key] !== 'object') {\n current[key] = {};\n }\n\n current = current[key];\n }\n\n if (lastKey !== undefined) {\n current[lastKey] = value;\n }\n};\n\nexport const getRowKey = (item, index, rowKey) => {\n if (typeof rowKey === 'function') {\n return rowKey(item, index) ?? `row-${index}`;\n }\n\n return getNestedValue(item, rowKey) ?? `row-${index}`;\n};\n\nconst cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneValue(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, cloneValue(entry)]),\n );\n }\n\n return value;\n};\n\nexport const reorderRows = ({ data, fromIndex, toIndex, orderField, mutateRows }) => {\n const reorderedData = mutateRows ? [...data] : data.map((item) => cloneValue(item));\n const [movedItem] = reorderedData.splice(fromIndex, 1);\n reorderedData.splice(toIndex, 0, movedItem);\n\n if (mutateRows) {\n reorderedData.forEach((item, index) => setNestedValue(item, orderField, index + 1));\n }\n\n return {\n data: reorderedData,\n item: movedItem,\n fromIndex,\n toIndex,\n };\n};\n","<script setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { GripVertical } from '@lucide/vue';\nimport ThSortable from \"./ThSortable.vue\";\nimport LinkButton from \"./LinkButton.vue\";\nimport TableSearch from \"./TableSearch.vue\";\nimport { getRowKey, reorderRows } from './tableListOrdering.js';\n\nconst slots = useSlots();\n\nconst props = defineProps({\n data: {\n type: Array,\n required: true\n },\n columns: {\n type: Array,\n required: true\n },\n rowKey: {\n type: [String, Function],\n default: 'id'\n },\n orderable: {\n type: Boolean,\n default: false\n },\n orderField: {\n type: String,\n default: 'order'\n },\n mutateRows: {\n type: Boolean,\n default: true\n },\n sortField: {\n type: String,\n default: ''\n },\n sortDirection: {\n type: String,\n default: 'asc'\n },\n emptyState: {\n type: Object,\n default: () => ({\n icon: 'UsersIcon',\n title: 'No data found',\n description: 'No items to display.',\n actionText: null,\n actionUrl: null\n })\n },\n rowClasses: {\n type: Function,\n default: (item, index) => [\n 'transition-colors duration-150',\n item.deleted_at\n ? 'bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50'\n : 'odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900'\n ]\n },\n maxTextLength: {\n type: Number,\n default: 40\n },\n isCard: {\n type: Boolean,\n default: true\n },\n tableClass: {\n type: String,\n default: ''\n },\n theadClass: {\n type: String,\n default: ''\n },\n tbodyClass: {\n type: String,\n default: ''\n },\n headerRowClass: {\n type: String,\n default: ''\n },\n dense: {\n type: Boolean,\n default: false\n },\n actionsLabel: {\n type: String,\n default: 'Actions'\n },\n deletedLabel: {\n type: String,\n default: 'Deleted'\n },\n search: {\n type: Boolean,\n default: false\n },\n searchPlaceholder: {\n type: String,\n default: 'Search...'\n },\n searchValue: {\n type: String,\n default: undefined\n },\n searchCountLabel: {\n type: String,\n default: 'results'\n },\n searchCount: {\n type: Number,\n default: null\n },\n searchQueryLabel: {\n type: String,\n default: 'for'\n },\n searchShowDeleted: {\n type: Boolean,\n default: false\n },\n searchShowDeletedToggle: {\n type: Boolean,\n default: false\n },\n searchShowDeletedLabel: {\n type: String,\n default: 'Show deleted'\n },\n searchMode: {\n type: String,\n default: 'server',\n validator: (value) => ['client', 'server'].includes(value)\n },\n searchFieldsLayout: {\n type: String,\n default: 'inline',\n validator: (value) => ['inline', 'stacked'].includes(value)\n }\n});\n\nconst emit = defineEmits(['sort', 'reorder', 'update:searchShowDeleted', 'update:searchValue']);\n\nconst localData = ref(props.data);\n\nwatch(() => props.data, (value) => {\n localData.value = value;\n});\n\nconst hasActionsSlot = computed(() => !!slots.actions);\nconst internalSearchQuery = ref('');\nconst searchQuery = computed({\n get: () => props.searchValue ?? internalSearchQuery.value,\n set: (value) => {\n internalSearchQuery.value = value;\n emit('update:searchValue', value);\n }\n});\n\nconst filteredData = computed(() => {\n if (props.searchMode !== 'client' || !props.search || !searchQuery.value.trim()) {\n return localData.value;\n }\n\n const query = searchQuery.value.toLowerCase().trim();\n\n return localData.value.filter((item) => {\n return props.columns.some((column) => {\n if (column.searchable === false || column.slot) {\n return false;\n }\n\n const value = column.key.split('.').reduce((obj, key) => obj?.[key], item);\n\n if (value === null || value === undefined || value === '') {\n return false;\n }\n\n return String(value).toLowerCase().includes(query);\n });\n });\n});\n\nconst hasData = computed(() => filteredData.value && filteredData.value.length > 0);\nconst resolvedSearchCount = computed(() => {\n return props.searchCount ?? filteredData.value.length;\n});\n\nconst draggedIndex = ref(null);\nconst dragOverIndex = ref(null);\nconst dragPreview = ref(null);\nconst dragRowHeight = ref(0);\nconst canReorder = computed(() => {\n return props.orderable && !searchQuery.value.trim();\n});\n\nconst startDrag = (index, event) => {\n if (!canReorder.value) {\n event.preventDefault();\n return;\n }\n\n draggedIndex.value = index;\n dragOverIndex.value = index;\n const row = event.currentTarget?.closest('tr');\n\n if (row) {\n dragRowHeight.value = row.offsetHeight;\n const preview = document.createElement('div');\n const previewTable = document.createElement('table');\n const previewBody = document.createElement('tbody');\n const previewRow = row.cloneNode(true);\n\n previewTable.className = row.closest('table')?.className ?? '';\n previewTable.style.width = `${row.getBoundingClientRect().width}px`;\n previewTable.style.borderCollapse = 'collapse';\n previewTable.style.background = 'white';\n previewRow.classList.remove('opacity-0');\n previewRow.style.background = 'white';\n previewRow.querySelectorAll('td').forEach((cell) => {\n cell.style.background = 'white';\n });\n previewBody.appendChild(previewRow);\n previewTable.appendChild(previewBody);\n preview.appendChild(previewTable);\n dragPreview.value = preview;\n dragPreview.value.style.position = 'fixed';\n dragPreview.value.style.top = '0';\n dragPreview.value.style.left = '0';\n dragPreview.value.style.background = 'white';\n dragPreview.value.style.borderRadius = '0.5rem';\n dragPreview.value.style.boxShadow = '0 10px 25px rgb(15 23 42 / 0.18)';\n dragPreview.value.style.opacity = '0.96';\n dragPreview.value.style.pointerEvents = 'none';\n dragPreview.value.style.zIndex = '1000';\n document.body.appendChild(dragPreview.value);\n updateDragPreviewPosition(event);\n document.addEventListener('dragover', handleDocumentDragOver, true);\n\n const transparentDragImage = document.createElement('canvas');\n transparentDragImage.width = 1;\n transparentDragImage.height = 1;\n event.dataTransfer.setDragImage(transparentDragImage, 0, 0);\n }\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(index));\n};\n\nconst endDrag = () => {\n document.removeEventListener('dragover', handleDocumentDragOver, true);\n dragPreview.value?.remove();\n dragPreview.value = null;\n draggedIndex.value = null;\n dragOverIndex.value = null;\n dragRowHeight.value = 0;\n};\n\nconst handleDocumentDragOver = (event) => {\n if (!canReorder.value || draggedIndex.value === null) {\n return;\n }\n\n event.preventDefault();\n updateDragPreviewPosition(event);\n};\n\nconst updateDragPreviewPosition = (event) => {\n if (!dragPreview.value) {\n return;\n }\n\n const offsetX = 24;\n const offsetY = dragRowHeight.value / 2;\n\n dragPreview.value.style.transform = `translate3d(${event.clientX - offsetX}px, ${event.clientY - offsetY}px, 0)`;\n};\n\nconst updateDragOver = (index, event) => {\n if (canReorder.value) {\n dragOverIndex.value = index;\n updateDragPreviewPosition(event);\n }\n};\n\nconst getDropTargetIndex = (event, fallbackIndex) => {\n const row = event.currentTarget;\n const tbody = row?.parentElement;\n\n if (!tbody) {\n return fallbackIndex;\n }\n\n const targetRow = Array.from(tbody.children).find((candidate) => {\n const rect = candidate.getBoundingClientRect();\n\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n const targetIndex = Number(targetRow?.dataset.rowIndex);\n\n return Number.isInteger(targetIndex) ? targetIndex : fallbackIndex;\n};\n\nconst rowDragStyle = (index) => {\n if (\n draggedIndex.value === null ||\n dragOverIndex.value === null ||\n draggedIndex.value === dragOverIndex.value ||\n index === draggedIndex.value\n ) {\n return {};\n }\n\n if (draggedIndex.value < dragOverIndex.value) {\n if (index > draggedIndex.value && index <= dragOverIndex.value) {\n return { transform: `translateY(-${dragRowHeight.value}px)` };\n }\n } else if (index >= dragOverIndex.value && index < draggedIndex.value) {\n return { transform: `translateY(${dragRowHeight.value}px)` };\n }\n\n return {};\n};\n\nconst dropRow = (toIndex, event) => {\n event.preventDefault();\n\n if (!canReorder.value || draggedIndex.value === null) {\n endDrag();\n return;\n }\n\n const targetIndex = getDropTargetIndex(\n event,\n dragOverIndex.value ?? toIndex,\n );\n\n if (draggedIndex.value === targetIndex) {\n endDrag();\n return;\n }\n\n const result = reorderRows({\n data: localData.value,\n fromIndex: draggedIndex.value,\n toIndex: targetIndex,\n orderField: props.orderField,\n mutateRows: props.mutateRows,\n });\n\n if (props.mutateRows) {\n props.data.splice(0, props.data.length, ...result.data);\n localData.value = props.data;\n } else {\n localData.value = result.data;\n }\n\n emit('reorder', {\n ...result,\n rowKey: getRowKey(result.item, targetIndex, props.rowKey),\n });\n endDrag();\n};\n\nconst sortBy = (field) => {\n emit('sort', field);\n};\n\nconst joinClasses = (...classes) => {\n return classes.flatMap((value) => {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return [];\n }).filter(Boolean).join(' ');\n};\n\nconst updateSearchShowDeleted = (value) => {\n emit('update:searchShowDeleted', value);\n};\n\nconst truncateText = (value) => {\n const stringValue = String(value ?? '');\n const maxLength = Number(props.maxTextLength);\n\n if (!Number.isFinite(maxLength) || maxLength <= 0 || stringValue.length <= maxLength) {\n return stringValue;\n }\n\n return `${stringValue.slice(0, maxLength)}...`;\n};\n\nconst getCellContent = (item, column) => {\n if (column.slot) {\n return null; // Will be handled by slot\n }\n \n if (column.render) {\n return column.render(item);\n }\n \n // Handle nested properties\n const value = column.key.split('.').reduce((obj, key) => obj?.[key], item);\n \n // Return \"-\" for empty values (null, undefined, empty string)\n if (value === null || value === undefined || value === '') {\n return '-';\n }\n \n return truncateText(value);\n};\n\nconst isDeleted = (item) => {\n return item.deleted_at || item.deleted;\n};\n\nconst getColumnClass = (column) => {\n return joinClasses(\n props.dense ? 'px-3 py-2 text-sm truncate' : 'px-6 py-4 text-sm truncate',\n !column.isSecondary ? 'font-medium' : '',\n column.isSecondary ? 'text-neutral-600 dark:text-neutral-200' : '',\n column.align === 'right' ? 'text-right' : '',\n column.class,\n column.cellClass,\n );\n};\n\nconst getHeaderClass = (column) => {\n return joinClasses(\n column.sortable ? 'cursor-pointer transition-colors duration-150' : '',\n props.dense\n ? 'px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-[0.12em]'\n : 'px-6 py-3 text-left text-[11px] font-semibold uppercase tracking-[0.12em]',\n 'text-neutral-600 dark:text-neutral-200',\n column.sortable ? 'hover:bg-neutral-100 dark:hover:bg-neutral-900' : '',\n column.align === 'right' ? 'text-right' : '',\n column.headerClass,\n );\n};\n\nconst getContentClass = (column) => {\n return joinClasses(\n column.sortable ? 'flex items-center space-x-1' : '',\n column.align === 'right' ? 'w-full text-right justify-end' : '',\n column.contentClass,\n );\n};\n\nconst getColumnWidthStyle = (column) => {\n return column.width ? { width: column.width } : {};\n};\n\nconst actionHeaderClass = computed(() => {\n return joinClasses(\n props.dense\n ? 'px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-[0.12em]'\n : 'px-6 py-3 text-right text-[11px] font-semibold uppercase tracking-[0.12em]',\n 'text-neutral-600 dark:text-neutral-200',\n );\n});\n\nconst actionCellClass = computed(() => {\n return joinClasses(\n props.dense ? 'px-3 py-2 whitespace-nowrap text-right text-sm font-medium' : 'px-6 py-4 whitespace-nowrap text-right text-sm font-medium',\n );\n});\n</script>\n\n<template>\n <div class=\"space-y-6\">\n <TableSearch\n v-if=\"search\"\n :model-value=\"searchQuery\"\n :placeholder=\"searchPlaceholder\"\n :count=\"resolvedSearchCount\"\n :count-label=\"searchCountLabel\"\n :query-label=\"searchQueryLabel\"\n :show-deleted=\"searchShowDeleted\"\n :show-deleted-toggle=\"searchShowDeletedToggle\"\n :show-deleted-label=\"searchShowDeletedLabel\"\n :search-mode=\"searchMode\"\n :search-fields-layout=\"searchFieldsLayout\"\n @update:model-value=\"searchQuery = $event\"\n @update:show-deleted=\"updateSearchShowDeleted\"\n >\n <template\n v-if=\"$slots['search-fields']\"\n #search-fields\n >\n <slot name=\"search-fields\" />\n </template>\n\n <template\n v-if=\"$slots.controls\"\n #controls\n >\n <slot name=\"controls\" />\n </template>\n </TableSearch>\n\n <div\n :class=\"[\n 'bg-white/90 backdrop-blur-sm dark:bg-neutral-950/90',\n isCard\n ? 'animate-fadeIn rounded-2xl border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden'\n : '',\n ]\"\n >\n <div :class=\"['overflow-x-auto', isCard ? 'rounded-t-xl' : '']\">\n <table :class=\"joinClasses('min-w-full divide-y divide-neutral-200 dark:divide-neutral-800', tableClass)\">\n <thead :class=\"joinClasses('bg-neutral-50/80 dark:bg-neutral-900/80', theadClass)\">\n <tr :class=\"headerRowClass\">\n <th v-if=\"orderable\" class=\"w-10 px-2 py-3 text-center text-[11px] font-semibold uppercase tracking-[0.12em] text-neutral-600 dark:text-neutral-200\">#</th>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <ThSortable\n v-if=\"column.sortable\"\n :field=\"column.key\"\n :current-sort-field=\"sortField\"\n :current-direction=\"sortDirection\"\n :header-class=\"getHeaderClass(column)\"\n :header-style=\"getColumnWidthStyle(column)\"\n :content-class=\"getContentClass(column)\"\n @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"getHeaderClass(column)\"\n :style=\"getColumnWidthStyle(column)\"\n >\n <div :class=\"getContentClass(column)\">\n {{ column.label }}\n </div>\n </th>\n </template>\n\n <th\n v-if=\"$slots.actions\"\n :class=\"actionHeaderClass\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n <tbody :class=\"joinClasses('divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950', tbodyClass)\">\n <tr\n v-for=\"(item, index) in filteredData\"\n :key=\"getRowKey(item, index, rowKey)\"\n :data-row-index=\"index\"\n :class=\"joinClasses(\n rowClasses(item, index),\n 'transition-[transform,opacity,box-shadow] duration-100 ease-out',\n draggedIndex === index ? 'opacity-0' : '',\n dragOverIndex === index ? 'ring-2 ring-inset ring-neutral-400 dark:ring-neutral-500' : '',\n )\"\n :style=\"rowDragStyle(index)\"\n @dragenter=\"updateDragOver(index, $event)\"\n @dragover.prevent=\"updateDragOver(index, $event)\"\n @drop=\"dropRow(index, $event)\"\n >\n <td v-if=\"orderable\" class=\"w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400\">\n <span class=\"inline-flex items-center gap-1\">\n <span\n :draggable=\"canReorder\"\n class=\"cursor-grab touch-none active:cursor-grabbing\"\n :aria-label=\"`Drag row ${index + 1}`\"\n @dragstart=\"startDrag(index, $event)\"\n @dragend=\"endDrag\"\n >\n <GripVertical class=\"size-4\" />\n </span>\n <span>{{ index + 1 }}</span>\n </span>\n </td>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"getColumnClass(column)\" :style=\"getColumnWidthStyle(column)\">\n <template v-if=\"column.key === 'name' && !column.slot\">\n <div :class=\"joinClasses('flex items-center', getContentClass(column))\">\n <div class=\"truncate text-sm font-medium text-neutral-950 dark:text-neutral-50\" :title=\"getCellContent(item, column)\">\n {{ getCellContent(item, column) }}\n </div>\n <span v-if=\"isDeleted(item)\" class=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-700 dark:bg-red-950/60 dark:text-neutral-100\">\n {{ deletedLabel }}\n </span>\n </div>\n </template>\n <div v-else-if=\"column.slot\" :class=\"getContentClass(column)\">\n <slot\n :name=\"column.slot\"\n :item=\"item\"\n :column=\"column\"\n :index=\"index\"\n />\n </div>\n <div v-else-if=\"column.render\" :class=\"getContentClass(column)\" v-html=\"column.render(item)\"></div>\n <div v-else :class=\"getContentClass(column)\">\n {{ getCellContent(item, column) }}\n </div>\n </td>\n </template>\n\n <td v-if=\"$slots.actions\" :class=\"actionCellClass\">\n <slot name=\"actions\" :item=\"item\" :index=\"index\" />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div v-if=\"!hasData\" class=\"py-12 text-center\">\n <div class=\"mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900\">\n <component :is=\"emptyState.icon\" class=\"h-8 w-8 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <h3 class=\"mb-2 text-lg font-semibold text-neutral-950 dark:text-neutral-50\">{{ emptyState.title }}</h3>\n <p class=\"mb-4 text-neutral-600 dark:text-neutral-200\">{{ emptyState.description }}</p>\n <LinkButton v-if=\"emptyState.actionText && emptyState.actionUrl\" :href=\"emptyState.actionUrl\" variant=\"primary\">\n {{ emptyState.actionText }}\n </LinkButton>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { CheckIcon, PencilSquareIcon } from '@heroicons/vue/24/outline';\nimport { GripVertical, Search } from \"@lucide/vue\";\nimport Button from './Button.vue';\nimport InputGroup from './InputGroup.vue';\nimport LinkButton from './LinkButton.vue';\nimport ThSortable from './ThSortable.vue';\nimport { getNestedValue as getSharedNestedValue, getRowKey as resolveRowKey, reorderRows, setNestedValue as setSharedNestedValue } from './tableListOrdering.js';\n\nconst slots = useSlots();\n\nconst props = defineProps({\n data: {\n type: Array,\n required: true,\n },\n columns: {\n type: Array,\n required: true,\n },\n sortField: {\n type: String,\n default: '',\n },\n sortDirection: {\n type: String,\n default: 'asc',\n },\n emptyState: {\n type: Object,\n default: () => ({\n icon: 'UsersIcon',\n title: 'No data found',\n description: 'No items to display.',\n actionText: null,\n actionUrl: null,\n }),\n },\n rowClasses: {\n type: Function,\n default: (item) => [\n 'transition-colors duration-150',\n item.deleted_at\n ? 'bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50'\n : 'odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900',\n ],\n },\n getErrorMessage: {\n type: Function,\n default: () => null,\n },\n search: {\n type: Boolean,\n default: true,\n },\n searchPlaceholder: {\n type: String,\n default: 'Search...',\n },\n searchValue: {\n type: String,\n default: undefined,\n },\n searchMode: {\n type: String,\n default: 'server',\n validator: (value) => ['client', 'server'].includes(value),\n },\n rowKey: {\n type: [String, Function],\n default: 'id',\n },\n isDeletedFn: {\n type: Function,\n default: (item) => Boolean(item?.deleted_at || item?.deleted),\n },\n mutateRows: {\n type: Boolean,\n default: true,\n },\n isCard: {\n type: Boolean,\n default: true,\n },\n tableClass: {\n type: String,\n default: '',\n },\n theadClass: {\n type: String,\n default: '',\n },\n tbodyClass: {\n type: String,\n default: '',\n },\n headerRowClass: {\n type: String,\n default: '',\n },\n dense: {\n type: Boolean,\n default: false,\n },\n actionsLabel: {\n type: String,\n default: 'Actions',\n },\n deletedLabel: {\n type: String,\n default: 'Deleted',\n },\n maxTextLength: {\n type: Number,\n default: 40,\n },\n rowEditing: {\n type: Boolean,\n default: true,\n },\n editingRowKey: {\n type: [String, Number, null],\n default: undefined,\n },\n canEditRow: {\n type: Function,\n default: () => true,\n },\n editLabel: {\n type: String,\n default: 'Edit row',\n },\n cancelLabel: {\n type: String,\n default: 'Done editing',\n },\n expandedRowKey: {\n type: [String, Number, null],\n default: null,\n },\n expandedRowClass: {\n type: String,\n default: '',\n },\n expandedCellClass: {\n type: String,\n default: 'p-0',\n },\n orderable: {\n type: Boolean,\n default: false,\n },\n orderField: {\n type: String,\n default: 'order',\n },\n});\n\nconst emit = defineEmits(['sort', 'update', 'reorder', 'update:editingRowKey', 'edit-start', 'edit-cancel', 'update:searchValue']);\n\nconst localSortField = ref(props.sortField);\nconst localSortDirection = ref(props.sortDirection);\nconst localData = ref(props.data);\nconst internalSearchQuery = ref('');\nconst searchQuery = computed({\n get: () => props.searchValue ?? internalSearchQuery.value,\n set: (value) => {\n internalSearchQuery.value = value;\n emit('update:searchValue', value);\n },\n});\nconst internalEditingRowKey = ref(null);\nconst editingDraft = ref({});\nconst resolvedEditingRowKey = computed(() => {\n return props.editingRowKey !== undefined ? props.editingRowKey : internalEditingRowKey.value;\n});\n\nwatch(() => props.data, (value) => {\n localData.value = value;\n});\n\nconst draggedIndex = ref(null);\nconst dragOverIndex = ref(null);\nconst canReorder = computed(() => {\n return props.orderable && !searchQuery.value.trim() && !localSortField.value;\n});\n\nconst startDrag = (index, event) => {\n if (!canReorder.value) {\n event.preventDefault();\n return;\n }\n\n draggedIndex.value = index;\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(index));\n};\n\nconst endDrag = () => {\n draggedIndex.value = null;\n dragOverIndex.value = null;\n};\n\nconst dropRow = (toIndex, event) => {\n event.preventDefault();\n\n if (!canReorder.value || draggedIndex.value === null || draggedIndex.value === toIndex) {\n endDrag();\n return;\n }\n\n const result = reorderRows({\n data: localData.value,\n fromIndex: draggedIndex.value,\n toIndex,\n orderField: props.orderField,\n mutateRows: props.mutateRows,\n });\n\n if (props.mutateRows) {\n props.data.splice(0, props.data.length, ...result.data);\n localData.value = props.data;\n } else {\n localData.value = result.data;\n }\n\n emit('reorder', {\n ...result,\n rowKey: resolveRowKey(result.item, toIndex, props.rowKey),\n });\n endDrag();\n};\n\nwatch(() => props.sortField, (value) => {\n localSortField.value = value;\n});\n\nwatch(() => props.sortDirection, (value) => {\n localSortDirection.value = value;\n});\n\nwatch(() => props.rowEditing, (value) => {\n if (!value) {\n resetEditState();\n }\n});\n\nwatch(resolvedEditingRowKey, (nextKey, previousKey) => {\n if (nextKey === previousKey) {\n return;\n }\n\n if (nextKey === null || nextKey === undefined || nextKey === '') {\n editingDraft.value = {};\n return;\n }\n\n const activeItem = props.data.find((item, index) => getRowKey(item, index) === nextKey);\n editingDraft.value = activeItem ? cloneValue(activeItem) : {};\n});\n\nwatch(\n () => props.data,\n () => {\n if (resolvedEditingRowKey.value === null || resolvedEditingRowKey.value === undefined) {\n return;\n }\n\n const activeItem = props.data.find((item, index) => getRowKey(item, index) === resolvedEditingRowKey.value);\n if (!activeItem) {\n resetEditState();\n }\n },\n { deep: true },\n);\n\nconst sortedData = computed(() => {\n let filteredData = localData.value;\n\n if (props.searchMode === 'client' && props.search && searchQuery.value.trim()) {\n const query = searchQuery.value.toLowerCase().trim();\n filteredData = localData.value.filter((item) => {\n return props.columns.some((column) => {\n if (!column.searchable) {\n return false;\n }\n\n const value = getNestedValue(item, column.key);\n if (value === null || value === undefined || value === '') {\n return false;\n }\n\n return String(value).toLowerCase().includes(query);\n });\n });\n }\n\n if (!localSortField.value) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n const aValue = getNestedValue(a, localSortField.value);\n const bValue = getNestedValue(b, localSortField.value);\n\n if (aValue === null || aValue === undefined || aValue === '') return 1;\n if (bValue === null || bValue === undefined || bValue === '') return -1;\n\n let comparison = 0;\n if (aValue < bValue) comparison = -1;\n if (aValue > bValue) comparison = 1;\n\n return localSortDirection.value === 'desc' ? -comparison : comparison;\n });\n});\n\nconst hasActionsSlot = computed(() => Boolean(slots.actions));\nconst hasActionsColumn = computed(() => hasActionsSlot.value || props.rowEditing);\nconst hasData = computed(() => sortedData.value && sortedData.value.length > 0);\nconst hasExpandedRow = computed(() => Boolean(slots['expanded-row']));\n\nconst sortBy = (field) => {\n if (localSortField.value === field) {\n localSortDirection.value = localSortDirection.value === 'asc' ? 'desc' : 'asc';\n } else {\n localSortField.value = field;\n localSortDirection.value = 'asc';\n }\n\n emit('sort', { field, direction: localSortDirection.value });\n};\n\nconst joinClasses = (...classes) => {\n return classes.flatMap((value) => {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return [];\n }).filter(Boolean).join(' ');\n};\n\nconst cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneValue(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, cloneValue(entry)]),\n );\n }\n\n return value;\n};\n\nconst truncateText = (value) => {\n const stringValue = String(value ?? '');\n const maxLength = Number(props.maxTextLength);\n\n if (!Number.isFinite(maxLength) || maxLength <= 0 || stringValue.length <= maxLength) {\n return stringValue;\n }\n\n return `${stringValue.slice(0, maxLength)}...`;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!path || typeof path !== 'string') {\n return obj;\n }\n\n return getSharedNestedValue(obj, path);\n};\n\nconst setNestedValue = (obj, path, value) => {\n if (!path || typeof path !== 'string' || obj == null) {\n return;\n }\n\n setSharedNestedValue(obj, path, value);\n};\n\nconst getDataIndex = (item) => {\n if (item?.id) {\n return localData.value.findIndex((row) => row?.id === item.id);\n }\n\n return localData.value.findIndex((row) => row === item);\n};\n\nconst getRowKey = (item, index) => {\n return resolveRowKey(item, index, props.rowKey);\n};\n\nconst getEditSlotName = (column) => `${column.slot}-edit`;\n\nconst isDeleted = (item) => props.isDeletedFn(item);\n\nconst setEditingRowKey = (value) => {\n if (props.editingRowKey === undefined) {\n internalEditingRowKey.value = value;\n }\n\n emit('update:editingRowKey', value);\n};\n\nconst isEditingRow = (item, index) => {\n return props.rowEditing && resolvedEditingRowKey.value !== null && resolvedEditingRowKey.value === getRowKey(item, index);\n};\n\nconst isRowEditDisabled = (item, index) => {\n if (!props.rowEditing) {\n return true;\n }\n\n if (!props.canEditRow(item, index) || isDeleted(item)) {\n return true;\n }\n\n return resolvedEditingRowKey.value !== null && !isEditingRow(item, index);\n};\n\nconst resetEditState = () => {\n setEditingRowKey(null);\n};\n\nconst startEdit = (item, index) => {\n if (isRowEditDisabled(item, index)) {\n return;\n }\n\n const rowKey = getRowKey(item, index);\n setEditingRowKey(rowKey);\n emit('edit-start', {\n item,\n index: getDataIndex(item),\n rowKey,\n });\n};\n\nconst cancelEdit = (item, index) => {\n emit('edit-cancel', {\n item,\n index: getDataIndex(item),\n rowKey: getRowKey(item, index),\n });\n resetEditState();\n};\n\nconst updateDraft = (field, value, item, eventName = undefined) => {\n setNestedValue(editingDraft.value, field, value);\n\n if (props.mutateRows) {\n setNestedValue(item, field, cloneValue(value));\n }\n\n emit('update', {\n item,\n draft: editingDraft.value,\n field,\n value,\n index: getDataIndex(item),\n rowKey: resolvedEditingRowKey.value,\n event: eventName,\n });\n};\n\nconst getCellContent = (item, column) => {\n if (column.slot) {\n return null;\n }\n\n if (column.render) {\n return column.render(item);\n }\n\n const value = getNestedValue(item, column.key);\n if (value === null || value === undefined || value === '') {\n return '-';\n }\n\n return truncateText(value);\n};\n\nconst getColumnClass = (column, item, index) => {\n const isEditing = isEditingRow(item, index) && (column.input || slots[getEditSlotName(column)]);\n return joinClasses(\n isEditing\n ? (props.dense ? 'px-3 py-2 text-sm align-top' : 'px-6 py-3 text-sm align-top')\n : (props.dense ? 'px-3 py-2 text-sm truncate' : 'px-6 py-4 text-sm truncate'),\n !column.isSecondary ? 'font-medium' : '',\n column.isSecondary ? 'text-neutral-600 dark:text-neutral-200' : '',\n column.align === 'right' ? 'text-right' : '',\n column.class,\n column.cellClass,\n );\n};\n\nconst getHeaderClass = (column) => {\n return joinClasses(\n column.sortable ? 'cursor-pointer transition-colors duration-150' : '',\n props.dense\n ? 'px-3 py-2 text-left text-xs font-medium uppercase tracking-wider'\n : 'px-6 py-3 text-left text-xs font-medium uppercase tracking-wider',\n 'text-neutral-500 dark:text-neutral-200',\n column.sortable ? 'hover:bg-neutral-100 dark:hover:bg-neutral-900' : '',\n column.align === 'right' ? 'text-right' : '',\n column.headerClass,\n );\n};\n\nconst getContentClass = (column) => {\n return joinClasses(\n column.sortable ? 'flex items-center space-x-1' : '',\n column.align === 'right' ? 'w-full text-right justify-end' : '',\n column.contentClass,\n );\n};\n\nconst getColumnWidthStyle = (column) => {\n return column.width ? { width: column.width } : {};\n};\n\nconst getInputType = (column) => column.inputType || 'text';\n\nconst getInputClass = (column) => {\n let classes = 'block w-full max-w-xs min-w-[12rem] rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-2 text-sm text-neutral-900 shadow-none placeholder:text-neutral-400 transition-colors duration-200 focus:border-neutral-900 focus:bg-white focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:bg-neutral-950 dark:focus:ring-neutral-100/10 sm:min-w-[10rem]';\n\n if (column.inputClass) {\n classes += ` ${column.inputClass}`;\n }\n\n if (column.isSecondary) {\n classes += ' text-neutral-600 dark:text-neutral-200';\n }\n\n return classes;\n};\n\nconst getInputPlaceholder = (column) => column.placeholder || column.label || '';\n\nconst getInputValue = (item, column, index) => {\n if (isEditingRow(item, index)) {\n return getNestedValue(editingDraft.value, column.key) ?? '';\n }\n\n return getNestedValue(item, column.key) ?? '';\n};\n\nconst getColumnError = (item, column) => {\n const arrayIndex = getDataIndex(item);\n\n if (arrayIndex === -1) {\n return null;\n }\n\n return props.getErrorMessage(arrayIndex, column.key);\n};\n\nconst getSlotBindings = (item, column, index) => ({\n item,\n column,\n index,\n isEditing: isEditingRow(item, index),\n draft: editingDraft.value,\n rowKey: getRowKey(item, index),\n updateDraft: (field, value) => updateDraft(field, value, item),\n startEdit: () => startEdit(item, index),\n cancelEdit: () => cancelEdit(item, index),\n});\n\nconst resolveColumnDisabled = (column, item, index) => {\n const disabled = typeof column.disabled === 'function'\n ? column.disabled(item, index)\n : column.disabled;\n\n return Boolean(disabled || isDeleted(item));\n};\n\nconst actionHeaderClass = computed(() => {\n return joinClasses(\n props.dense\n ? 'px-3 py-2 text-right text-xs font-medium uppercase tracking-wider'\n : 'px-6 py-3 text-right text-xs font-medium uppercase tracking-wider',\n 'text-neutral-500 dark:text-neutral-200',\n );\n});\n\nconst actionCellClass = computed(() => {\n return joinClasses(\n props.dense ? 'px-3 py-2 whitespace-nowrap text-right text-sm font-medium' : 'px-6 py-4 whitespace-nowrap text-right text-sm font-medium',\n );\n});\n</script>\n\n<template>\n <div :class=\"['bg-white dark:bg-neutral-950', isCard ? 'mx-4 rounded-xl animate-fadeIn border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden': '']\">\n <div\n v-if=\"search\"\n :class=\"[\n 'px-6 py-4',\n isCard ? 'rounded-t-xl border-b border-neutral-200 bg-neutral-50/80 dark:border-neutral-800 dark:bg-neutral-900/80' : 'mb-4 bg-white/80 backdrop-blur-sm dark:bg-neutral-950/80'\n ]\"\n >\n <InputGroup\n :model-value=\"searchQuery\"\n type=\"text\"\n root-class=\"max-w-sm\"\n :placeholder=\"searchPlaceholder\"\n @update:model-value=\"searchQuery = $event\"\n >\n <template #leading-icon>\n <Search class=\"h-5 w-5\" />\n </template>\n </InputGroup>\n </div>\n\n <div v-if=\"hasData\" :class=\"['overflow-x-auto', isCard ? (search ? '' : 'rounded-t-xl') : '']\">\n <table :class=\"joinClasses('min-w-full divide-y divide-neutral-200 dark:divide-neutral-800', tableClass)\">\n <thead :class=\"joinClasses('bg-neutral-50 dark:bg-neutral-900', theadClass)\">\n <tr :class=\"headerRowClass\">\n <th v-if=\"orderable\" class=\"w-10 px-2 py-3 text-center text-xs font-medium uppercase tracking-wider text-neutral-500 dark:text-neutral-200\">#</th>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <ThSortable\n v-if=\"column.sortable\"\n :field=\"column.key\"\n :current-sort-field=\"localSortField\"\n :current-direction=\"localSortDirection\"\n :header-class=\"getHeaderClass(column)\"\n :header-style=\"getColumnWidthStyle(column)\"\n :content-class=\"getContentClass(column)\"\n @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"getHeaderClass(column)\"\n :style=\"getColumnWidthStyle(column)\"\n >\n <div :class=\"getContentClass(column)\">\n {{ column.label }}\n </div>\n </th>\n </template>\n\n <th\n v-if=\"hasActionsColumn\"\n :class=\"actionHeaderClass\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n\n <tbody :class=\"joinClasses('divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950', tbodyClass)\">\n <template\n v-for=\"(item, index) in sortedData\"\n :key=\"getRowKey(item, index)\"\n >\n <tr\n :class=\"joinClasses(rowClasses(item, index), dragOverIndex === index ? 'ring-2 ring-inset ring-neutral-400 dark:ring-neutral-500' : '')\"\n @dragover.prevent=\"canReorder && (dragOverIndex = index)\"\n @drop=\"dropRow(index, $event)\"\n >\n <td v-if=\"orderable\" class=\"w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400\">\n <span class=\"inline-flex items-center gap-1\">\n <span\n :draggable=\"canReorder\"\n class=\"cursor-grab touch-none active:cursor-grabbing\"\n :aria-label=\"`Drag row ${index + 1}`\"\n @dragstart=\"startDrag(index, $event)\"\n @dragend=\"endDrag\"\n >\n <GripVertical class=\"size-4\" />\n </span>\n <span>{{ index + 1 }}</span>\n </span>\n </td>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"getColumnClass(column, item, index)\" :style=\"getColumnWidthStyle(column)\">\n <div :class=\"getContentClass(column)\">\n <template v-if=\"isEditingRow(item, index) && column.slot && slots[getEditSlotName(column)]\">\n <slot\n :name=\"getEditSlotName(column)\"\n v-bind=\"getSlotBindings(item, column, index)\"\n />\n </template>\n\n <InputGroup\n v-else-if=\"isEditingRow(item, index) && column.input\"\n :type=\"getInputType(column)\"\n :class=\"getInputClass(column)\"\n :placeholder=\"getInputPlaceholder(column)\"\n :model-value=\"getInputValue(item, column, index)\"\n :disabled=\"resolveColumnDisabled(column, item, index)\"\n :maxlength=\"column.maxlength\"\n :error-message=\"getColumnError(item, column)\"\n :helper-text=\"''\"\n @update:model-value=\"value => updateDraft(column.key, value, item)\"\n @blur=\"event => updateDraft(column.key, event?.target?.value ?? getInputValue(item, column, index), item, 'blur')\"\n />\n\n <template v-else-if=\"column.key === 'name' && !column.slot\">\n <div class=\"flex items-center\">\n <div class=\"text-sm font-medium truncate\" :title=\"getCellContent(item, column)\">\n {{ getCellContent(item, column) }}\n </div>\n <span\n v-if=\"isDeleted(item)\"\n class=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-800 dark:bg-red-950/60 dark:text-neutral-100\"\n >\n {{ deletedLabel }}\n </span>\n </div>\n </template>\n\n <slot\n v-else-if=\"column.slot\"\n :name=\"column.slot\"\n v-bind=\"getSlotBindings(item, column, index)\"\n />\n\n <div v-else-if=\"column.render\" v-html=\"column.render(item)\"></div>\n\n <div v-else>\n {{ getCellContent(item, column) }}\n </div>\n </div>\n </td>\n </template>\n\n <td\n v-if=\"hasActionsColumn\"\n :class=\"actionCellClass\"\n >\n <div class=\"flex items-center justify-end gap-2\">\n <slot\n v-if=\"hasActionsSlot\"\n name=\"actions\"\n v-bind=\"getSlotBindings(item, null, index)\"\n />\n\n <template v-if=\"rowEditing && isEditingRow(item, index)\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n :title=\"cancelLabel\"\n :aria-label=\"cancelLabel\"\n @click=\"cancelEdit(item, index)\"\n >\n <CheckIcon class=\"size-4\" />\n </Button>\n </template>\n\n <Button\n v-else-if=\"rowEditing\"\n type=\"button\"\n variant=\"secondary\"\n size=\"icon\"\n :disabled=\"isRowEditDisabled(item, index)\"\n :title=\"editLabel\"\n :aria-label=\"editLabel\"\n @click=\"startEdit(item, index)\"\n >\n <PencilSquareIcon class=\"size-4\" />\n </Button>\n </div>\n </td>\n </tr>\n <tr\n v-if=\"hasExpandedRow && expandedRowKey === getRowKey(item, index)\"\n :class=\"expandedRowClass\"\n >\n <td\n :colspan=\"columns.length + (hasActionsColumn ? 1 : 0) + (orderable ? 1 : 0)\"\n :class=\"expandedCellClass\"\n >\n <slot\n name=\"expanded-row\"\n :item=\"item\"\n :index=\"index\"\n :row-key=\"getRowKey(item, index)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n\n <div v-else class=\"py-12 text-center\">\n <div class=\"mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900\">\n <component :is=\"emptyState.icon\" class=\"h-8 w-8 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <h3 class=\"mb-2 text-lg font-medium text-neutral-950 dark:text-neutral-50\">{{ emptyState.title }}</h3>\n <p class=\"mb-4 text-neutral-500 dark:text-neutral-200\">{{ emptyState.description }}</p>\n <LinkButton v-if=\"emptyState.actionText && emptyState.actionUrl\" :href=\"emptyState.actionUrl\" variant=\"primary\">\n {{ emptyState.actionText }}\n </LinkButton>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from \"vue\";\n\ndefineEmits([\"close\"]);\n\nconst props = defineProps<{\n class?: HTMLAttributes[\"class\"];\n variant?: \"default\" | \"destructive\" | \"success\" | \"error\";\n}>();\n\nconst variants = {\n default: \"bg-background border-border text-foreground\",\n destructive: \"bg-destructive text-destructive-foreground border-destructive\",\n success: \"bg-green-500 text-white border-green-600 dark:bg-green-700 dark:border-green-800\",\n error: \"bg-red-500 text-white border-red-600 dark:bg-red-900 dark:border-red-950\",\n};\n</script>\n\n<template>\n <div\n :class=\"[\n 'relative flex w-full max-w-sm items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all',\n variants[variant || 'default'],\n props.class,\n ]\"\n role=\"alert\"\n >\n <div class=\"grid gap-1\">\n <slot />\n </div>\n <button\n class=\"absolute top-2 right-2 rounded-md opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n @click=\"$emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span class=\"sr-only\">Close</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from \"vue\";\n\ndefineEmits([\"close\"]);\n\nconst props = defineProps<{\n class?: HTMLAttributes[\"class\"];\n variant?: \"default\" | \"destructive\" | \"success\" | \"error\";\n}>();\n\nconst variants = {\n default: \"bg-background border-border text-foreground\",\n destructive: \"bg-destructive text-destructive-foreground border-destructive\",\n success: \"bg-green-500 text-white border-green-600 dark:bg-green-700 dark:border-green-800\",\n error: \"bg-red-500 text-white border-red-600 dark:bg-red-900 dark:border-red-950\",\n};\n</script>\n\n<template>\n <div\n :class=\"[\n 'relative flex w-full max-w-sm items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all',\n variants[variant || 'default'],\n props.class,\n ]\"\n role=\"alert\"\n >\n <div class=\"grid gap-1\">\n <slot />\n </div>\n <button\n class=\"absolute top-2 right-2 rounded-md opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n @click=\"$emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span class=\"sr-only\">Close</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport Toast from \"./Toast.vue\";\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n message: string;\n variant: \"success\" | \"error\";\n duration?: number;\n}\n\nconst props = defineProps<{\n maxToasts?: number;\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n variant?: \"success\" | \"error\";\n defaultTitle?: string;\n}>();\n\nconst toasts = ref<ToastMessage[]>([]);\n\nconst addToast = (\n message: string,\n options: {\n variant?: \"success\" | \"error\";\n duration?: number;\n title?: string;\n } = {},\n): void => {\n const {\n variant = \"success\",\n duration = 5000,\n title,\n } = options;\n \n const id = Date.now().toString();\n const toast: ToastMessage = {\n id,\n title: title ?? (props.defaultTitle || undefined),\n message,\n variant,\n duration,\n };\n\n toasts.value.push(toast);\n\n if (duration > 0) {\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n};\n\nconst removeToast = (id: string): void => {\n const index = toasts.value.findIndex((toast) => toast.id === id);\n\n if (index > -1) {\n toasts.value.splice(index, 1);\n }\n};\n\ndefineExpose({\n addToast,\n});\n</script>\n\n<template>\n <div class=\"fixed top-4 right-4 z-50 space-y-2\">\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :variant=\"toast.variant || props.variant\"\n @close=\"removeToast(toast.id)\"\n >\n <div v-if=\"toast.title\" class=\"font-semibold\">{{ toast.title }}</div>\n <div class=\"text-sm opacity-90\">{{ toast.message }}</div>\n </Toast>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport Toast from \"./Toast.vue\";\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n message: string;\n variant: \"success\" | \"error\";\n duration?: number;\n}\n\nconst props = defineProps<{\n maxToasts?: number;\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n variant?: \"success\" | \"error\";\n defaultTitle?: string;\n}>();\n\nconst toasts = ref<ToastMessage[]>([]);\n\nconst addToast = (\n message: string,\n options: {\n variant?: \"success\" | \"error\";\n duration?: number;\n title?: string;\n } = {},\n): void => {\n const {\n variant = \"success\",\n duration = 5000,\n title,\n } = options;\n \n const id = Date.now().toString();\n const toast: ToastMessage = {\n id,\n title: title ?? (props.defaultTitle || undefined),\n message,\n variant,\n duration,\n };\n\n toasts.value.push(toast);\n\n if (duration > 0) {\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n};\n\nconst removeToast = (id: string): void => {\n const index = toasts.value.findIndex((toast) => toast.id === id);\n\n if (index > -1) {\n toasts.value.splice(index, 1);\n }\n};\n\ndefineExpose({\n addToast,\n});\n</script>\n\n<template>\n <div class=\"fixed top-4 right-4 z-50 space-y-2\">\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :variant=\"toast.variant || props.variant\"\n @close=\"removeToast(toast.id)\"\n >\n <div v-if=\"toast.title\" class=\"font-semibold\">{{ toast.title }}</div>\n <div class=\"text-sm opacity-90\">{{ toast.message }}</div>\n </Toast>\n </div>\n</template>\n","export { default as ActionCard } from './components/ActionCard.vue'\nexport { default as ActionMessage } from './components/ActionMessage.vue'\nexport { default as ActionSection } from './components/ActionSection.vue'\nexport { default as Badge } from './components/Badge.vue'\nexport { default as Button } from './components/Button.vue'\nexport { default as Card } from './components/Card.vue'\nexport { default as CardTabs } from './components/CardTabs.vue'\nexport { default as Checkbox } from './components/Checkbox.vue'\nexport { default as CheckboxInput } from './components/CheckboxInput.vue'\nexport { default as CheckboxMultipleInput } from './components/CheckboxMultipleInput.vue'\nexport { default as ColorPicker } from './components/ColorPicker.vue'\nexport { default as ConfirmationModal } from './components/ConfirmationModal.vue'\nexport { default as CustomSelect } from './components/CustomSelect.vue'\nexport { default as DateInput } from './components/DateInput.vue'\nexport { default as DateRangeInput } from './components/DateRangeInput.vue'\nexport { default as DialogModal } from './components/DialogModal.vue'\nexport { default as Divider } from './components/Divider.vue'\nexport { default as Dropdown } from './components/Dropdown.vue'\nexport { default as DropdownLink } from './components/DropdownLink.vue'\nexport { default as FormSection } from './components/FormSection.vue'\nexport { default as ImageInput } from './components/ImageInput.vue'\nexport { default as InputError } from './components/InputError.vue'\nexport { default as InputGroup } from './components/InputGroup.vue'\nexport { default as InputLabel } from './components/InputLabel.vue'\nexport { default as LinkButton } from './components/LinkButton.vue'\nexport { default as Modal } from './components/Modal.vue'\nexport { default as NotationInput } from './components/NotationInput.vue'\nexport { default as RadioInput } from './components/RadioInput.vue'\nexport { default as RadioMultipleInput } from './components/RadioMultipleInput.vue'\nexport { default as SectionBorder } from './components/SectionBorder.vue'\nexport { default as SectionTitle } from './components/SectionTitle.vue'\nexport { default as Sidebar } from './components/Sidebar.vue'\nexport { default as SidebarContent } from './components/SidebarContent.vue'\nexport { default as SidebarFooter } from './components/SidebarFooter.vue'\nexport { default as SidebarGroup } from './components/SidebarGroup.vue'\nexport { default as SidebarGroupContent } from './components/SidebarGroupContent.vue'\nexport { default as SidebarGroupLabel } from './components/SidebarGroupLabel.vue'\nexport { default as SidebarHeader } from './components/SidebarHeader.vue'\nexport { default as SidebarInset } from './components/SidebarInset.vue'\nexport { default as SidebarMenu } from './components/SidebarMenu.vue'\nexport { default as SidebarMenuButton } from './components/SidebarMenuButton.vue'\nexport { default as SidebarMenuItem } from './components/SidebarMenuItem.vue'\nexport { default as SidebarProvider } from './components/SidebarProvider.vue'\nexport { default as SidebarTrigger } from './components/SidebarTrigger.vue'\nexport { useSidebar } from './components/sidebar-context'\nexport { default as SelectInput } from './components/SelectInput.vue'\nexport { default as SlidePanel } from './components/SlidePanel.vue'\nexport { default as SortControls } from './components/SortControls.vue'\nexport { default as TableList } from './components/TableList.vue'\nexport { default as TableListForm } from './components/TableListForm.vue'\nexport { default as TableSearch } from './components/TableSearch.vue'\nexport { default as Toast } from './components/Toast.vue'\nexport { default as ToastContainer } from './components/ToastContainer.vue'\nexport { default as ToggleInput } from './components/ToggleInput.vue'\nexport { default as TextArea } from './components/TextArea.vue'\nexport { default as TextInput } from './components/TextInput.vue'\nexport { default as ThSortable } from './components/ThSortable.vue'\nexport { default as TinyEditor } from './components/TinyEditor.vue'\n","import type { App } from 'vue'\nimport * as components from './exports'\n\nexport default {\n install(app: App) {\n for (const [name, component] of Object.entries(components)) {\n app.component(name, component)\n }\n },\n}\n"],"x_google_ignoreList":[61,62,63,64,65,66,67,68,69,70,71,72,73],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-DEYPewKV.js","names":["$emit","$slots","$attrs","$attrs","$slots","$emit","$attrs","$attrs","__iconNode","__iconNode","__iconNode","$emit","$slots","$slots","$emit"],"sources":["../src/components/CardTabs.vue","../src/components/Card.vue","../src/components/Divider.vue","../src/components/ActionCard.vue","../src/components/ActionMessage.vue","../src/components/SectionTitle.vue","../src/components/ActionSection.vue","../src/components/Badge.vue","../src/components/Button.vue","../src/components/Checkbox.vue","../src/components/CheckboxInput.vue","../src/components/TextInput.vue","../src/components/TextArea.vue","../src/components/CustomSelect.vue","../src/components/SelectInput.vue","../src/components/DateInput.vue","../src/components/DateRangeInput.vue","../src/components/ImageInput.vue","../src/components/NotationInput.vue","../src/components/RadioInput.vue","../src/components/ToggleInput.vue","../src/components/RadioMultipleInput.vue","../src/components/TinyEditor.vue","../src/components/ColorPicker.vue","../src/components/InputGroup.vue","../src/components/CheckboxMultipleInput.vue","../src/components/Modal.vue","../src/components/ConfirmationModal.vue","../src/components/DialogModal.vue","../src/components/Dropdown.vue","../src/components/DropdownLink.vue","../src/components/FormSection.vue","../src/components/InputError.vue","../src/components/InputLabel.vue","../src/components/LinkButton.vue","../src/components/SectionBorder.vue","../src/components/sidebar-context.ts","../src/components/Sidebar.vue","../src/components/Sidebar.vue","../src/components/SidebarContent.vue","../src/components/SidebarContent.vue","../src/components/SidebarFooter.vue","../src/components/SidebarFooter.vue","../src/components/SidebarGroup.vue","../src/components/SidebarGroup.vue","../src/components/SidebarGroupContent.vue","../src/components/SidebarGroupContent.vue","../src/components/SidebarGroupLabel.vue","../src/components/SidebarGroupLabel.vue","../src/components/SidebarHeader.vue","../src/components/SidebarHeader.vue","../src/components/SidebarInset.vue","../src/components/SidebarInset.vue","../src/components/SidebarMenu.vue","../src/components/SidebarMenu.vue","../src/components/SidebarMenuButton.vue","../src/components/SidebarMenuButton.vue","../src/components/SidebarMenuItem.vue","../src/components/SidebarMenuItem.vue","../src/components/SidebarProvider.vue","../src/components/SidebarProvider.vue","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/isEmptyString.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/mergeClasses.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toKebabCase.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toCamelCase.js","../../../node_modules/@lucide/vue/dist/esm/shared/src/utils/toPascalCase.js","../../../node_modules/@lucide/vue/dist/esm/defaultAttributes.js","../../../node_modules/@lucide/vue/dist/esm/context.js","../../../node_modules/@lucide/vue/dist/esm/Icon.js","../../../node_modules/@lucide/vue/dist/esm/createLucideIcon.js","../../../node_modules/@lucide/vue/dist/esm/icons/grip-vertical.js","../../../node_modules/@lucide/vue/dist/esm/icons/panel-left-close.js","../../../node_modules/@lucide/vue/dist/esm/icons/panel-left-open.js","../../../node_modules/@lucide/vue/dist/esm/icons/search.js","../src/components/SidebarTrigger.vue","../src/components/SidebarTrigger.vue","../src/components/slide-panel-context.ts","../src/components/SlidePanel.vue","../src/components/SlidePanel.vue","../src/components/SortControls.vue","../src/components/ThSortable.vue","../src/components/TableSearch.vue","../src/components/tableListOrdering.js","../src/components/TableList.vue","../src/components/TableListForm.vue","../src/components/Toast.vue","../src/components/Toast.vue","../src/components/ToastContainer.vue","../src/components/ToastContainer.vue","../src/exports.ts","../src/plugin.ts"],"sourcesContent":["<script setup>\nimport { computed, ref, watch } from \"vue\";\n\nconst props = defineProps({\n tabs: {\n type: Array,\n default: () => [],\n validator: (tabs) => tabs.every((tab) => (\n typeof tab === 'object'\n && tab !== null\n && typeof tab.value === 'string'\n && tab.value.length > 0\n && typeof tab.label === 'string'\n )),\n },\n activeTab: {\n type: String,\n default: \"\",\n },\n});\n\nconst emit = defineEmits([\n 'update:activeTab',\n 'tab-click',\n]);\n\nconst tabButtons = ref([]);\n\nconst availableTabValues = computed(() => props.tabs.map((tab) => tab.value));\nconst currentActiveTab = computed(() => (\n availableTabValues.value.includes(props.activeTab)\n ? props.activeTab\n : (availableTabValues.value[0] ?? '')\n));\n\nwatch(currentActiveTab, (value) => {\n if (value !== props.activeTab) {\n emit('update:activeTab', value);\n }\n}, { immediate: true });\n\nconst setTabButtonRef = (element, index) => {\n tabButtons.value[index] = element;\n};\n\nconst activateTab = (value) => {\n if (!value || value === props.activeTab) {\n return;\n }\n\n emit('update:activeTab', value);\n emit('tab-click', value);\n};\n\nconst focusTabAtIndex = (index) => {\n tabButtons.value[index]?.focus();\n};\n\nconst onTabKeydown = (event, index) => {\n if (props.tabs.length === 0) {\n return;\n }\n\n let targetIndex = index;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n targetIndex = (index + 1) % props.tabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n targetIndex = (index - 1 + props.tabs.length) % props.tabs.length;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = props.tabs.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n activateTab(props.tabs[targetIndex].value);\n focusTabAtIndex(targetIndex);\n};\n</script>\n\n<template>\n <div class=\"border-b border-neutral-200 bg-neutral-50/80 p-2 dark:border-neutral-800 dark:bg-neutral-900/80\">\n <div role=\"tablist\" class=\"flex overflow-hidden rounded-lg bg-white shadow-sm ring-1 ring-neutral-200 dark:bg-neutral-950 dark:ring-neutral-800\">\n <button\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.value\"\n :ref=\"(element) => setTabButtonRef(element, index)\"\n type=\"button\"\n :style=\"{ width: `${100 / tabs.length}%` }\"\n role=\"tab\"\n :aria-selected=\"currentActiveTab === tab.value\"\n :tabindex=\"currentActiveTab === tab.value ? 0 : -1\"\n :class=\"[\n 'px-4 py-3 text-center text-sm font-semibold tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-neutral-900/20 focus-visible:ring-inset dark:focus-visible:ring-neutral-100/20',\n currentActiveTab === tab.value\n ? 'bg-neutral-100 text-neutral-950 shadow-[inset_0_-2px_0_0_rgb(23_23_23)] dark:bg-neutral-800 dark:text-neutral-50 dark:shadow-[inset_0_-2px_0_0_rgb(245_245_245)]'\n : 'text-neutral-700 hover:bg-neutral-50 dark:text-neutral-100 dark:hover:bg-neutral-900',\n {\n 'border-r border-neutral-200 dark:border-neutral-800': index !== tabs.length - 1,\n }\n ]\"\n @click=\"activateTab(tab.value)\"\n @keydown=\"onTabKeydown($event, index)\"\n >\n {{ tab.label }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, watch, computed } from 'vue';\nimport CardTabs from \"./CardTabs.vue\";\n\nconst props = defineProps({\n title: {\n type: String,\n default: \"\"\n },\n sticky: {\n type: Boolean,\n default: false,\n },\n paddingClass: {\n type: String,\n default: \"p-6 lg:p-8\"\n },\n cardClass: {\n type: String,\n default: \"\"\n },\n overflowClass: {\n type: String,\n default: \"overflow-visible\",\n },\n contentClass: {\n type: String,\n default: \"\"\n },\n tabs: {\n type: Array,\n default: () => [],\n validator: (tabs) => tabs.every((tab) => (\n typeof tab === 'object'\n && tab !== null\n && typeof tab.value === 'string'\n && tab.value.length > 0\n && typeof tab.label === 'string'\n )),\n },\n activeTab: {\n type: String,\n default: \"\",\n }\n});\n\ndefineEmits([\n 'update:activeTab',\n 'tab-click',\n]);\n\nconst previousActiveTab = ref('');\nconst slideDirection = ref('right');\n\nconst currentTabIndex = computed(() => {\n return props.tabs.findIndex(tab => tab.value === props.activeTab);\n});\n\nconst previousTabIndex = computed(() => {\n return props.tabs.findIndex(tab => tab.value === previousActiveTab.value);\n});\n\nwatch(currentTabIndex, (newIndex, oldIndex) => {\n if (oldIndex !== undefined && oldIndex !== -1 && newIndex !== -1 && newIndex !== oldIndex) {\n slideDirection.value = newIndex > oldIndex ? 'right' : 'left';\n previousActiveTab.value = props.activeTab;\n }\n});\n</script>\n\n<template>\n <div :class=\"['rounded-2xl border border-neutral-200 bg-white text-neutral-950 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50', overflowClass, { 'sticky top-6 self-start': sticky }, cardClass]\">\n <CardTabs\n v-if=\"tabs.length > 0\"\n :tabs=\"tabs\"\n :active-tab=\"activeTab\"\n @update:active-tab=\"$emit('update:activeTab', $event)\"\n @tab-click=\"$emit('tab-click', $event)\"\n />\n <div :class=\"paddingClass\">\n <div v-if=\"$slots.customTitle\" class=\"mb-4\">\n <slot name=\"customTitle\" />\n </div>\n <h3 v-else-if=\"title\" class=\"mb-4 text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50\">{{ title }}</h3>\n\n <!-- Animated Content Container -->\n <div :class=\"['relative', tabs.length > 0 ? 'overflow-hidden' : 'overflow-visible']\">\n <transition\n enter-active-class=\"transition-all duration-200 ease-in-out\"\n :enter-from-class=\"slideDirection === 'right' ? 'translate-x-full opacity-0' : '-translate-x-full opacity-0'\"\n enter-to-class=\"translate-x-0 opacity-100\"\n leave-active-class=\"transition-all duration-200 ease-in-out\"\n leave-from-class=\"translate-x-0 opacity-100\"\n :leave-to-class=\"slideDirection === 'right' ? '-translate-x-full opacity-0' : 'translate-x-full opacity-0'\"\n mode=\"out-in\"\n >\n <div\n :key=\"activeTab\"\n :class=\"[\n tabs.length > 0 ? 'p-2' : '',\n 'dark:text-neutral-50 dark:[&_h1]:text-neutral-50 dark:[&_h2]:text-neutral-50 dark:[&_h3]:text-neutral-50 dark:[&_h4]:text-neutral-50 dark:[&_h5]:text-neutral-50 dark:[&_h6]:text-neutral-50 dark:[&_p]:text-neutral-100 dark:[&_li]:text-neutral-100 dark:[&_a]:text-neutral-100',\n contentClass,\n ]\"\n >\n <slot />\n </div>\n </transition>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n</script>\n\n<template>\n <div class=\"border-t border-neutral-200 dark:border-neutral-800\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<script setup>\nimport { useSlots } from \"vue\";\nimport Card from \"./Card.vue\";\nimport Divider from \"./Divider.vue\";\n\ndefineProps({\n title: {\n type: String,\n default: \"\"\n },\n actionsClass: {\n type: String,\n default: \"space-y-3\"\n }\n});\n\nconst slots = useSlots();\n</script>\n\n<template>\n <Card :title=\"title\" :content-class=\"actionsClass\">\n <slot />\n <Divider v-if=\"slots.danger\" class=\"mt-6 pt-4\">\n <slot name=\"danger\" />\n </Divider>\n </Card>\n</template>\n","<script setup>\ndefineProps({\n on: Boolean,\n});\n</script>\n\n<template>\n <div>\n <transition leave-active-class=\"transition ease-in duration-1000\" leave-from-class=\"opacity-100\" leave-to-class=\"opacity-0\">\n <div v-show=\"on\" class=\"text-sm text-gray-600\">\n <slot />\n </div>\n </transition>\n </div>\n</template>\n","<template>\n <div class=\"md:col-span-1 flex justify-between\">\n <div class=\"px-4 sm:px-0\">\n <h3 class=\"text-xl font-semibold tracking-tight text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </h3>\n\n <p class=\"mt-1 max-w-2xl text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"description\" />\n </p>\n </div>\n\n <div class=\"px-4 sm:px-0\">\n <slot name=\"aside\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport SectionTitle from './SectionTitle.vue';\n</script>\n\n<template>\n <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n <SectionTitle>\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #description>\n <slot name=\"description\" />\n </template>\n </SectionTitle>\n\n <div class=\"mt-5 md:mt-0 md:col-span-2\">\n <div class=\"rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6\">\n <slot name=\"content\" />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\ndefineProps({\n type: {\n type: String,\n default: 'default',\n validator: (value) => ['default', 'dot'].includes(value)\n },\n color: {\n type: String,\n default: 'default',\n validator: (value) => [\n 'default', 'primary', 'secondary', 'success', 'warning', 'danger', 'info', 'gray'\n ].includes(value)\n },\n size: {\n type: String,\n default: 'md',\n validator: (value) => ['xs', 'sm', 'md', 'lg'].includes(value)\n },\n rounded: {\n type: String,\n default: 'full',\n validator: (value) => ['none', 'sm', 'md', 'lg', 'full'].includes(value)\n }\n});\n\nconst colorClasses = {\n default: { bg: 'bg-slate-100', text: 'text-slate-700', dot: 'bg-slate-600' },\n primary: { bg: 'bg-blue-100 dark:bg-blue-400/20', text: 'text-blue-700 dark:text-blue-200', dot: 'bg-blue-600 dark:bg-blue-300' },\n secondary: { bg: 'bg-slate-100', text: 'text-slate-700', dot: 'bg-slate-600' },\n success: { bg: 'bg-emerald-100', text: 'text-emerald-700', dot: 'bg-emerald-600' },\n warning: { bg: 'bg-amber-100', text: 'text-amber-700', dot: 'bg-amber-600' },\n danger: { bg: 'bg-rose-100', text: 'text-rose-700', dot: 'bg-rose-600' },\n info: { bg: 'bg-cyan-100', text: 'text-cyan-700', dot: 'bg-cyan-600' },\n gray: { bg: 'bg-slate-100', text: 'text-slate-600', dot: 'bg-slate-600' }\n};\n\nconst sizeClasses = {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-xs',\n lg: 'px-3 py-1 text-sm'\n};\n\nconst roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full'\n};\n</script>\n\n<template>\n <!-- Dot type with circular indicator -->\n <span v-if=\"type === 'dot'\" class=\"inline-flex items-center justify-center w-6 h-6 rounded-full\" :class=\"colorClasses[color].bg\">\n <span class=\"w-2 h-2 rounded-full\" :class=\"colorClasses[color].dot\"></span>\n <span class=\"sr-only\">\n <slot />\n </span>\n </span>\n \n <!-- Default type with colored background -->\n <span v-else\n class=\"inline-flex items-center font-medium\"\n :class=\"[\n colorClasses[color].bg,\n colorClasses[color].text,\n sizeClasses[size],\n roundedClasses[rounded]\n ]\"\n >\n <slot />\n </span>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n\nimport { computed, useAttrs } from 'vue';\n\nconst attrs = useAttrs();\n\nconst props = defineProps({\n type: {\n type: String,\n default: 'submit',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n variant: {\n type: String,\n default: 'default',\n },\n size: {\n type: String,\n default: 'default',\n },\n});\n\nconst variantClasses = {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-neutral-300 text-neutral-900 hover:bg-neutral-300/80 dark:bg-secondary dark:text-secondary-foreground dark:hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n success:\n 'bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-600 dark:text-white dark:hover:bg-emerald-600/90',\n tertiary:\n 'border border-neutral-200 bg-white text-neutral-900 shadow-xs hover:bg-neutral-50 dark:border-neutral-200 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-100',\n warning:\n 'bg-amber-100 text-amber-700 hover:bg-amber-100/90 focus-visible:ring-amber-500/20 dark:bg-amber-600/20 dark:text-neutral-50 dark:hover:bg-amber-600/30 dark:focus-visible:ring-amber-500/40',\n danger:\n 'bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:text-destructive-foreground dark:hover:bg-destructive/25',\n 'warning-solid':\n 'bg-amber-500 text-white hover:bg-amber-500/90 dark:bg-amber-500 dark:text-white dark:hover:bg-amber-500/90',\n 'danger-solid':\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n};\n\nconst sizeClasses = {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n};\n\nconst resolvedVariant = computed(() => {\n return variantClasses[props.variant] ? props.variant : 'default';\n});\n\nconst resolvedSize = computed(() => {\n return sizeClasses[props.size] ? props.size : 'default';\n});\n\nconst buttonClasses = computed(() => [\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*=size-])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n variantClasses[resolvedVariant.value],\n sizeClasses[resolvedSize.value],\n attrs.class,\n]);\n</script>\n\n<template>\n <button\n v-bind=\"attrs\"\n :type=\"type\"\n :disabled=\"disabled\"\n :class=\"buttonClasses\"\n >\n <slot />\n </button>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nconst emit = defineEmits(['update:checked']);\n\nconst props = defineProps({\n checked: {\n type: [Array, Boolean],\n default: false,\n },\n value: {\n type: String,\n default: null,\n },\n});\n\nconst proxyChecked = computed({\n get() {\n return props.checked;\n },\n\n set(val) {\n emit('update:checked', val);\n },\n});\n</script>\n\n\n<template>\n <input\n v-model=\"proxyChecked\"\n type=\"checkbox\"\n :value=\"value\"\n class=\"rounded border-neutral-300 text-neutral-900 shadow-sm focus:ring-neutral-900 dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-100 dark:focus:ring-neutral-100\"\n >\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps({\n modelValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n value: {\n type: [Boolean, String, Number],\n default: true,\n },\n uncheckedValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n label: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => props.modelValue === props.value);\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = () => {\n hasFocus.value = false;\n};\n\nconst onChange = (event) => {\n emit('update:modelValue', event.target.checked ? props.value : props.uncheckedValue);\n};\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center gap-2 rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors',\n props.ui.root,\n isChecked ? 'border-neutral-900 bg-neutral-900 text-neutral-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-50' : 'border-neutral-200 text-neutral-600 dark:border-neutral-700 dark:text-neutral-300',\n disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer',\n hasFocus && !disabled ? 'ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950' : '',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n :name=\"name\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n >\n <span\n :class=\"[\n 'inline-flex h-4 w-4 items-center justify-center border text-[10px] font-bold leading-none',\n props.ui.control,\n isChecked ? 'border-current bg-white/15 text-current dark:bg-neutral-900/15' : 'border-neutral-400 text-transparent dark:border-neutral-500',\n 'rounded',\n ]\"\n >\n <span :class=\"props.ui.indicator\">✓</span>\n </span>\n <span :class=\"props.ui.label\">{{ label }}</span>\n </label>\n</template>\n","<script setup>\r\nimport { computed, onMounted, ref, useAttrs } from 'vue';\r\nimport { LockClosedIcon } from '@heroicons/vue/24/outline';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'blur']);\r\nconst attrs = useAttrs();\r\nconst input = ref(null);\r\nconst revealed = ref(false);\r\nconst DEFAULT_MAX_LENGTH = 254;\r\n\r\nconst baseType = computed(() => String(attrs.type ?? 'text'));\r\nconst isPasswordField = computed(() => baseType.value === 'password');\r\nconst inputType = computed(() => (isPasswordField.value && revealed.value) ? 'text' : baseType.value);\r\nconst normalizedValue = computed(() => props.modelValue ?? '');\r\n\r\nconst inputAttrs = computed(() => {\r\n const { class: _class, type: _type, ...rest } = attrs;\r\n if (rest.maxlength === undefined) {\r\n rest.maxlength = DEFAULT_MAX_LENGTH;\r\n }\r\n return rest;\r\n});\r\n\r\nconst inputClasses = computed(() => [\r\n 'w-full min-w-0 max-w-full h-[48px] rounded-lg border border-neutral-200 bg-white text-neutral-950 shadow-sm outline-none transition-colors placeholder:text-neutral-400 focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n isPasswordField.value ? 'pr-10 pl-10' : '',\r\n props.ui.input,\r\n]);\r\n\r\nconst toggleVisibility = () => {\r\n revealed.value = !revealed.value;\r\n};\r\n\r\nconst handleWheel = (event) => {\r\n if (inputType.value !== 'number') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const scrollTarget = document.scrollingElement ?? document.documentElement ?? document.body;\r\n if (scrollTarget) {\r\n scrollTarget.scrollTop += event.deltaY;\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n if (input.value?.hasAttribute('autofocus')) {\r\n input.value.focus();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => input.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative flex items-center', props.ui.root]\">\r\n <div\r\n v-if=\"isPasswordField\"\r\n :class=\"['absolute inset-y-0 left-0 flex items-center pointer-events-none pl-3', props.ui.leadingIcon]\"\r\n >\r\n <LockClosedIcon class=\"h-5 w-5 text-neutral-400 dark:text-neutral-200\" />\r\n </div>\r\n <input\r\n ref=\"input\"\r\n v-bind=\"inputAttrs\"\r\n :type=\"inputType\"\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"normalizedValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"emit('update:modelValue', $event.target.value)\"\r\n @blur=\"emit('blur', $event)\"\r\n @wheel=\"handleWheel\"\r\n >\r\n\r\n <button\r\n v-if=\"isPasswordField\"\r\n type=\"button\"\r\n :class=\"['absolute inset-y-0 right-0 flex items-center pr-3 text-neutral-400 transition-colors hover:text-neutral-700 focus:outline-none dark:text-neutral-200 dark:hover:text-neutral-50', props.ui.trailingAction]\"\r\n :aria-label=\"revealed ? 'Hide password' : 'Show password'\"\r\n @click=\"toggleVisibility\"\r\n >\r\n <svg v-if=\"revealed\" class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9.27-3.11-11-7 1.01-2.27 2.78-4.1 5-5.32m3.08-1.3A9.96 9.96 0 0112 5c5 0 9.27 3.11 11 7a11.03 11.03 0 01-4.16 4.91M15 12a3 3 0 00-3-3m0 0a3 3 0 00-2.94 3.59M3 3l18 18\" />\r\n </svg>\r\n <svg v-else class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5s8.268 2.943 9.542 7c-1.274 4.057-5.065 7-9.542 7S3.732 16.057 2.458 12z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed, nextTick, onMounted, ref, useAttrs, watch } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: String,\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\r\n },\r\n autoResize: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\nconst textarea = ref(null);\nconst DEFAULT_MAX_LENGTH = 1000;\n\r\nconst textareaAttrs = computed(() => {\r\n const { class: _class, ...rest } = attrs;\r\n if (rest.maxlength === undefined) {\r\n rest.maxlength = DEFAULT_MAX_LENGTH;\r\n }\r\n if (rest.rows === undefined) {\r\n rest.rows = 1;\r\n }\r\n return rest;\r\n});\r\n\r\nconst textareaClasses = computed(() => [\n 'w-full min-w-0 max-w-full min-h-[48px] rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors placeholder:text-neutral-400 focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\n props.autoResize ? 'resize-none overflow-y-hidden' : 'resize-y',\n attrs.class,\n props.ui.textarea ?? props.ui.input,\n]);\n\nconst resizeTextarea = () => {\n if (!props.autoResize || !textarea.value) {\n return;\n }\n\n const computedStyles = window.getComputedStyle(textarea.value);\n const minHeight = Number.parseFloat(computedStyles.minHeight) || 0;\n\n textarea.value.style.height = 'auto';\n textarea.value.style.height = `${Math.max(textarea.value.scrollHeight, minHeight)}px`;\n};\n\r\nconst updateValue = (event) => {\r\n emit('update:modelValue', event.target.value);\r\n resizeTextarea();\r\n};\r\n\r\nonMounted(() => {\r\n if (textarea.value?.hasAttribute('autofocus')) {\r\n textarea.value.focus();\r\n }\r\n\r\n nextTick(() => {\r\n resizeTextarea();\r\n });\r\n});\r\n\r\nwatch(() => props.modelValue, () => {\r\n nextTick(() => {\r\n resizeTextarea();\r\n });\r\n});\r\n\r\ndefineExpose({ focus: () => textarea.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"props.ui.root\">\r\n <textarea\r\n ref=\"textarea\"\r\n v-bind=\"textareaAttrs\"\r\n :class=\"[textareaClasses, (props.disabled ? props.disabledClass : '')]\"\r\n :value=\"props.modelValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"updateValue\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, watch } from 'vue';\r\nimport { ChevronDownIcon, XMarkIcon } from '@heroicons/vue/24/outline';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: '',\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n options: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: 'name',\r\n },\r\n valueKey: {\r\n type: String,\r\n default: 'id',\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: 'deleted_at',\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: 'block w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-950 dark:text-neutral-50',\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-950 dark:text-neutral-50',\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: 'text-neutral-500 dark:text-neutral-200',\r\n },\r\n dropdownClass: {\r\n type: [String, Array, Object],\r\n default: 'z-50 max-h-60 overflow-auto rounded-lg border border-neutral-200 bg-white shadow-xl dark:border-neutral-800 dark:bg-neutral-950',\r\n },\r\n dropdownOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'cursor-pointer px-4 py-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-900',\r\n },\r\n dropdownSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-neutral-100 font-medium text-neutral-950 dark:bg-neutral-900 dark:text-neutral-50',\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-slate-50 text-slate-900 dark:bg-neutral-800 dark:text-neutral-50',\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: 'Search...',\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: 'w-full border-b border-neutral-200 px-4 py-3 text-sm outline-none focus:border-neutral-900 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100',\r\n },\r\n noOptionsText: {\r\n type: String,\r\n default: 'No options available',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\n\r\nconst isOpen = ref(false);\nconst rootRef = ref(null);\nconst triggerRef = ref(null);\nconst triggerValueRef = ref(null);\nconst dropdownMenuRef = ref(null);\nconst dropdownStyle = ref({\n position: 'absolute',\n left: '0px',\n top: '0px',\n visibility: 'hidden',\n});\nconst teleportTarget = ref('body');\nconst isDarkMode = ref(false);\nconst isMounted = ref(false);\nconst isDropdownReady = ref(false);\nconst searchQuery = ref('');\nconst searchInputRef = ref(null);\nconst highlightedOptionValue = ref(null);\nconst typeaheadQuery = ref('');\nconst isSelectingTriggerValue = ref(false);\nconst triggerValuePointerActive = ref(false);\nconst triggerValuePointerStartX = ref(0);\nconst shouldSuppressTriggerClick = ref(false);\nlet typeaheadResetTimeout = null;\nlet positionFrame = null;\nlet revealFrame = null;\nlet resizeObserver = null;\n\r\nconst isObjectOption = (option) => typeof option === 'object' && option !== null;\r\n\r\nconst optionValue = (option) => {\r\n if (isObjectOption(option)) {\r\n return option[props.valueKey];\r\n }\r\n\r\n return option;\r\n};\r\n\r\nconst optionText = (option) => {\r\n if (props.optionLabel) {\r\n return props.optionLabel(option);\r\n }\r\n\r\n if (isObjectOption(option)) {\r\n return option[props.labelKey] ?? option[props.valueKey] ?? '';\r\n }\r\n\r\n return option;\r\n};\r\n\r\nconst optionDeleted = (option) => {\r\n if (!props.softDeleteAware || !isObjectOption(option)) {\r\n return false;\r\n }\r\n\r\n return Boolean(option[props.deletedKey]);\r\n};\r\n\r\nconst modelValueArray = computed(() => (\r\n Array.isArray(props.modelValue) ? props.modelValue : []\r\n));\r\n\r\nconst modelValueAsString = computed(() => String(props.modelValue ?? ''));\r\nconst modelValueSet = computed(() => new Set(modelValueArray.value.map((value) => String(value))));\r\n\r\nconst selectedDeletedOption = computed(() => {\r\n if (props.multiple || !props.softDeleteAware || modelValueAsString.value === '') {\r\n return null;\r\n }\r\n\r\n return props.options.find((option) => (\r\n optionDeleted(option) && String(optionValue(option) ?? '') === modelValueAsString.value\r\n )) ?? null;\r\n});\r\n\r\nconst availableOptions = computed(() => {\r\n if (!props.softDeleteAware) {\r\n return props.options;\r\n }\r\n\r\n return props.options.filter((option) => !optionDeleted(option));\r\n});\r\n\r\nconst selectedDeletedOptions = computed(() => {\r\n if (!props.softDeleteAware || !props.multiple || modelValueSet.value.size === 0) {\r\n return [];\r\n }\r\n\r\n return props.options.filter((option) => (\r\n optionDeleted(option) && modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n ));\r\n});\r\n\r\nconst multipleOptions = computed(() => {\r\n if (!props.multiple) {\r\n return availableOptions.value;\r\n }\r\n\r\n const seen = new Set();\r\n\r\n return [...selectedDeletedOptions.value, ...availableOptions.value].filter((option) => {\r\n const key = String(optionValue(option) ?? '');\r\n\r\n if (seen.has(key)) {\r\n return false;\r\n }\r\n\r\n seen.add(key);\r\n return true;\r\n });\r\n});\r\n\r\nconst filteredOptions = computed(() => {\r\n if (!props.searchable || !searchQuery.value) {\r\n return props.multiple ? multipleOptions.value : availableOptions.value;\r\n }\r\n\r\n const query = searchQuery.value.toLowerCase();\r\n const options = props.multiple ? multipleOptions.value : availableOptions.value;\r\n\r\n return options.filter((option) => {\r\n const text = String(optionText(option)).toLowerCase();\r\n return text.includes(query);\r\n });\r\n});\r\n\r\nconst selectedMultipleOptions = computed(() => {\r\n if (!props.multiple || modelValueSet.value.size === 0) {\r\n return [];\r\n }\r\n\r\n return multipleOptions.value.filter((option) => (\r\n modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n ));\r\n});\r\n\r\nconst hasVisibleOptions = computed(() => filteredOptions.value.length > 0);\r\nconst visibleOptions = computed(() => filteredOptions.value);\r\n\r\nconst canClearSelection = computed(() => (\r\n !props.multiple\r\n && !props.placeholderDisabled\r\n && !props.disabled\r\n && props.modelValue !== null\r\n && props.modelValue !== undefined\r\n && props.modelValue !== ''\r\n));\r\n\r\nconst triggerClasses = computed(() => [\n props.baseClass,\n (selectedDeletedOption.value || (props.multiple && selectedMultipleOptions.value.some(optionDeleted))) ? props.deletedSelectedClass : props.normalTextClass,\n { 'text-neutral-50': isDarkMode.value && !(selectedDeletedOption.value || (props.multiple && selectedMultipleOptions.value.some(optionDeleted))) },\n 'flex h-[48px] min-w-0 items-center justify-between gap-2 cursor-pointer',\n attrs.class,\n props.ui.trigger,\n]);\n\nconst triggerValueClasses = computed(() => [\n isSelectingTriggerValue.value\n ? 'block min-w-0 flex-1 cursor-text select-text overflow-x-auto whitespace-nowrap [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden'\n : 'block min-w-0 flex-1 truncate',\n ((props.multiple && selectedMultipleOptions.value.length === 0) || (!props.multiple && !props.modelValue)) && props.placeholder ? props.placeholderClass : null,\n ((props.multiple && selectedMultipleOptions.value.length === 0) || (!props.multiple && !props.modelValue)) ? props.ui.placeholder : props.ui.value,\n]);\n\r\nconst clearButtonClasses = computed(() => [\r\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full text-neutral-400 transition hover:bg-neutral-100 hover:text-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950/20 dark:hover:bg-neutral-900 dark:hover:text-neutral-200 dark:focus-visible:ring-neutral-100/20',\r\n props.ui.clearButton,\r\n]);\r\n\r\nconst chevronClasses = computed(() => [\r\n 'size-5 text-neutral-400 transition-transform dark:text-neutral-200',\r\n { 'rotate-180': isOpen.value },\r\n props.ui.chevron,\r\n]);\r\n\r\nconst dropdownClasses = computed(() => [\n 'enos-default-custom-select-dropdown',\n props.dropdownClass,\n { 'bg-neutral-950 border-neutral-800': isDarkMode.value },\n props.ui.dropdown,\n]);\r\n\r\nconst searchInputClasses = computed(() => [\r\n props.searchInputClass,\r\n props.ui.searchInput,\r\n]);\r\n\r\nconst emptyStateClasses = computed(() => [\r\n props.dropdownOptionClass,\r\n props.placeholderClass,\r\n 'cursor-default',\r\n props.ui.option,\r\n props.ui.placeholder,\r\n]);\r\n\r\nconst optionClasses = (option) => [\r\n props.dropdownOptionClass,\r\n optionDeleted(option) ? props.deletedOptionClass : props.optionClass,\r\n props.ui.option,\r\n { 'text-neutral-50': isDarkMode.value && !optionDeleted(option) },\r\n {\r\n [props.dropdownHighlightedClass]: optionIsHighlighted(option),\r\n [props.dropdownSelectedClass]: props.multiple\r\n ? optionIsSelected(option)\r\n : optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue),\r\n 'rounded-b-lg': option === availableOptions.value[availableOptions.value.length - 1],\r\n 'rounded-lg': availableOptions.value.length === 1,\r\n },\r\n optionIsHighlighted(option) ? props.ui.optionHighlighted : null,\r\n (props.multiple\r\n ? optionIsSelected(option)\r\n : optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue))\r\n ? props.ui.optionSelected\r\n : null,\r\n];\r\n\r\nconst displayText = computed(() => {\r\n if (props.multiple) {\r\n if (selectedMultipleOptions.value.length === 0) {\r\n return props.placeholder;\r\n }\r\n\r\n return selectedMultipleOptions.value.map((option) => optionText(option)).join(', ');\r\n }\r\n\r\n if ((props.modelValue === null || props.modelValue === undefined) ||\r\n (props.modelValue === '' && !props.options.some((option) => optionValue(option) === ''))) {\r\n return props.placeholder;\r\n }\r\n\r\n const selectedOption = props.options.find((option) => {\r\n const optionVal = optionValue(option);\r\n return optionVal === props.modelValue || String(optionVal) === String(props.modelValue);\r\n });\r\n\r\n return selectedOption ? optionText(selectedOption) : props.modelValue;\r\n});\r\n\r\nconst normalizeEmittedValue = (value) => {\r\n if (props.modelModifiers.number) {\r\n if (value === '') {\r\n return '';\r\n }\r\n\r\n return Number(value);\r\n }\r\n\r\n return value;\r\n};\r\n\r\nconst normalizeEmittedValues = (values) => values.map((value) => normalizeEmittedValue(value));\r\n\r\nconst optionIsSelected = (option) => (\r\n modelValueSet.value.has(String(optionValue(option) ?? ''))\r\n);\r\n\r\nconst optionIsHighlighted = (option) => (\r\n highlightedOptionValue.value === String(optionValue(option) ?? '')\r\n);\r\n\r\nconst hasTriggerValueSelection = () => {\n const selection = window.getSelection();\n\n if (!selection || selection.isCollapsed || !triggerValueRef.value) {\n return false;\n }\n\n const { anchorNode, focusNode } = selection;\n\n return (\n (anchorNode && triggerValueRef.value.contains(anchorNode))\n || (focusNode && triggerValueRef.value.contains(focusNode))\n );\n};\n\nconst syncTriggerValueSelection = () => {\n if (triggerValuePointerActive.value) {\n isSelectingTriggerValue.value = true;\n return;\n }\n\n isSelectingTriggerValue.value = hasTriggerValueSelection();\n\n if (!isSelectingTriggerValue.value && triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n};\n\nconst autoScrollTriggerValue = (clientX) => {\n if (!triggerValueRef.value) {\n return;\n }\n\n const rect = triggerValueRef.value.getBoundingClientRect();\n const threshold = 24;\n const maxStep = 18;\n\n if (clientX > rect.right - threshold) {\n const ratio = Math.min((clientX - (rect.right - threshold)) / threshold, 1);\n triggerValueRef.value.scrollLeft += Math.ceil(ratio * maxStep);\n return;\n }\n\n if (clientX < rect.left + threshold) {\n const ratio = Math.min(((rect.left + threshold) - clientX) / threshold, 1);\n triggerValueRef.value.scrollLeft -= Math.ceil(ratio * maxStep);\n }\n};\n\nconst handleTriggerValuePointerDown = (event) => {\n if (event.button !== 0) {\n return;\n }\n\n triggerValuePointerActive.value = true;\n triggerValuePointerStartX.value = event.clientX;\n shouldSuppressTriggerClick.value = false;\n isSelectingTriggerValue.value = true;\n};\n\nconst handleTriggerValuePointerMove = (event) => {\n if (!triggerValuePointerActive.value) {\n return;\n }\n\n if (Math.abs(event.clientX - triggerValuePointerStartX.value) > 4) {\n shouldSuppressTriggerClick.value = true;\n }\n\n autoScrollTriggerValue(event.clientX);\n};\n\nconst handleTriggerValuePointerUp = () => {\n if (!triggerValuePointerActive.value) {\n return;\n }\n\n triggerValuePointerActive.value = false;\n\n window.setTimeout(() => {\n syncTriggerValueSelection();\n }, 0);\n};\n\nconst resetTriggerValueSelectionState = () => {\n isSelectingTriggerValue.value = false;\n triggerValuePointerActive.value = false;\n shouldSuppressTriggerClick.value = false;\n\n if (triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n};\n\nconst toggleDropdown = () => {\n if (shouldSuppressTriggerClick.value || hasTriggerValueSelection()) {\n shouldSuppressTriggerClick.value = false;\n return;\n }\n\n if (!props.disabled) {\n isOpen.value = !isOpen.value;\n }\n};\n\nconst findModalScrollContainer = (modal) => {\n let element = rootRef.value?.parentElement ?? null;\n\n while (element && element !== modal) {\n const styles = window.getComputedStyle(element);\n const canScrollVertically = /(auto|scroll|overlay)/.test(styles.overflowY)\n && element.scrollHeight > element.clientHeight;\n const canScrollHorizontally = /(auto|scroll|overlay)/.test(styles.overflowX)\n && element.scrollWidth > element.clientWidth;\n\n if (canScrollVertically || canScrollHorizontally) {\n return element;\n }\n\n element = element.parentElement;\n }\n\n return modal;\n};\n\nconst syncTeleportTarget = () => {\n const modal = rootRef.value?.closest(\n 'dialog, [role=\"dialog\"], [data-dismissable-layer]',\n );\n\n teleportTarget.value = modal\n ? findModalScrollContainer(modal)\n : document.body;\n};\n\r\nconst selectOption = (option) => {\r\n const value = optionValue(option);\r\n emit('update:modelValue', normalizeEmittedValue(value));\r\n isOpen.value = false;\r\n};\r\n\r\nconst clearSelection = () => {\r\n if (canClearSelection.value) {\r\n emit('update:modelValue', normalizeEmittedValue(''));\r\n isOpen.value = false;\r\n }\r\n};\r\n\r\nconst toggleMultipleOption = (option) => {\n const normalizedValue = normalizeEmittedValue(optionValue(option));\r\n const currentValues = [...modelValueArray.value];\r\n const selectedIndex = currentValues.findIndex((value) => (\r\n String(value) === String(normalizedValue)\r\n ));\r\n\r\n if (selectedIndex >= 0) {\r\n currentValues.splice(selectedIndex, 1);\r\n } else {\r\n currentValues.push(normalizedValue);\r\n }\r\n\r\n emit('update:modelValue', normalizeEmittedValues(currentValues));\n};\n\nconst measureNaturalDropdownWidth = () => {\n if (!dropdownMenuRef.value) {\n return 0;\n }\n\n const currentWidth = dropdownMenuRef.value.style.width;\n dropdownMenuRef.value.style.width = 'max-content';\n const naturalWidth = Math.ceil(dropdownMenuRef.value.getBoundingClientRect().width);\n dropdownMenuRef.value.style.width = currentWidth;\n\n return naturalWidth;\n};\n\nconst updateDropdownPosition = () => {\n if (!isOpen.value || !triggerRef.value || !dropdownMenuRef.value) {\n return;\n }\n\n const rect = triggerRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 8;\n const portalElement = teleportTarget.value instanceof HTMLElement ? teleportTarget.value : null;\n const isBodyPortal = !portalElement || portalElement === document.body;\n const portalRect = isBodyPortal ? null : portalElement.getBoundingClientRect();\n const portalScrollLeft = isBodyPortal ? window.scrollX : portalElement.scrollLeft;\n const portalScrollTop = isBodyPortal ? window.scrollY : portalElement.scrollTop;\n const triggerIsVisible = rect.bottom > 0\n && rect.top < viewportHeight\n && rect.right > 0\n && rect.left < viewportWidth;\n\n if (!triggerIsVisible) {\n dropdownStyle.value = {\n ...dropdownStyle.value,\n visibility: 'hidden',\n };\n return;\n }\n\n const spaceBelow = Math.max(viewportHeight - rect.bottom - gap, 0);\n const spaceAbove = Math.max(rect.top - gap, 0);\n const measuredHeight = dropdownMenuRef.value.offsetHeight;\n const shouldOpenUpward = measuredHeight > spaceBelow && spaceAbove > spaceBelow;\n const availableSpace = shouldOpenUpward ? spaceAbove : spaceBelow;\n const maxHeight = Math.min(240, availableSpace);\n const menuHeight = Math.min(measuredHeight || maxHeight, maxHeight);\n const maxWidth = Math.max(viewportWidth - (gap * 2), 0);\n const naturalWidth = measureNaturalDropdownWidth();\n const width = Math.min(Math.max(rect.width, 160, naturalWidth), maxWidth);\n const leftInViewport = Math.max(gap, Math.min(rect.left, viewportWidth - width - gap));\n const left = isBodyPortal\n ? leftInViewport + window.scrollX\n : leftInViewport - portalRect.left + portalScrollLeft;\n const triggerTop = isBodyPortal\n ? rect.top + window.scrollY\n : rect.top - portalRect.top + portalScrollTop;\n const triggerBottom = isBodyPortal\n ? rect.bottom + window.scrollY\n : rect.bottom - portalRect.top + portalScrollTop;\n const top = shouldOpenUpward\n ? triggerTop - menuHeight - 1\n : triggerBottom - 1;\n\n dropdownStyle.value = {\n position: 'absolute',\n left: `${left}px`,\n top: `${Math.max(portalScrollTop + gap, top)}px`,\n width: `${width}px`,\n maxHeight: `${maxHeight}px`,\n pointerEvents: 'auto',\n zIndex: '2147483647',\n visibility: isDropdownReady.value ? 'visible' : 'hidden',\n };\n};\n\nconst scheduleDropdownPositionUpdate = () => {\n if (!isOpen.value || positionFrame !== null) {\n return;\n }\n\n positionFrame = window.requestAnimationFrame(() => {\n positionFrame = null;\n updateDropdownPosition();\n });\n};\n\nconst cancelDropdownFrames = () => {\n if (positionFrame !== null) {\n window.cancelAnimationFrame(positionFrame);\n positionFrame = null;\n }\n\n if (revealFrame !== null) {\n window.cancelAnimationFrame(revealFrame);\n revealFrame = null;\n }\n};\n\nconst disconnectResizeObserver = () => {\n resizeObserver?.disconnect();\n resizeObserver = null;\n};\n\nconst refreshDropdownPosition = async () => {\n if (!isOpen.value) {\n return;\n }\n\n cancelDropdownFrames();\n isDropdownReady.value = false;\n dropdownStyle.value = {\n ...dropdownStyle.value,\n visibility: 'hidden',\n };\n\n await nextTick();\n updateDropdownPosition();\n\n if (typeof ResizeObserver !== 'undefined') {\n disconnectResizeObserver();\n resizeObserver = new ResizeObserver(scheduleDropdownPositionUpdate);\n resizeObserver.observe(triggerRef.value);\n resizeObserver.observe(dropdownMenuRef.value);\n }\n\n revealFrame = window.requestAnimationFrame(() => {\n revealFrame = null;\n\n if (!isOpen.value) {\n return;\n }\n\n isDropdownReady.value = true;\n updateDropdownPosition();\n });\n};\n\r\nconst closeDropdown = (event) => {\n const clickedInsideTrigger = rootRef.value?.contains(event.target);\n const clickedInsideMenu = dropdownMenuRef.value?.contains(event.target);\n\n if (!clickedInsideTrigger && !clickedInsideMenu) {\n isOpen.value = false;\n resetTriggerValueSelectionState();\n searchQuery.value = '';\n highlightedOptionValue.value = null;\n typeaheadQuery.value = '';\n }\n};\n\nconst updateDropdownOnModalScroll = () => {\n if (!isOpen.value) {\n return;\n }\n\n if (!rootRef.value?.closest('dialog, [role=\"dialog\"], [data-dismissable-layer]')) {\n return;\n }\n\n scheduleDropdownPositionUpdate();\n};\n\r\nconst syncDarkMode = () => {\r\n if (rootRef.value?.closest('.dark')) {\r\n isDarkMode.value = true;\r\n return;\r\n }\r\n\r\n isDarkMode.value = document.documentElement.classList.contains('dark') || document.body.classList.contains('dark');\r\n};\r\n\r\nconst darkTextStyle = computed(() => (isDarkMode.value ? { color: '#ffffff' } : null));\r\n\r\nconst clearTypeaheadQuery = () => {\r\n typeaheadQuery.value = '';\r\n\r\n if (typeaheadResetTimeout) {\r\n window.clearTimeout(typeaheadResetTimeout);\r\n typeaheadResetTimeout = null;\r\n }\r\n};\r\n\r\nconst scheduleTypeaheadReset = () => {\r\n if (typeaheadResetTimeout) {\r\n window.clearTimeout(typeaheadResetTimeout);\r\n }\r\n\r\n typeaheadResetTimeout = window.setTimeout(() => {\r\n typeaheadQuery.value = '';\r\n typeaheadResetTimeout = null;\r\n }, 700);\r\n};\r\n\r\nconst escapeSelectorValue = (value) => {\r\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\r\n return CSS.escape(value);\r\n }\r\n\r\n return value.replace(/[\"\\\\]/g, '\\\\$&');\r\n};\r\n\r\nconst scrollOptionByValue = async (value) => {\r\n await nextTick();\r\n\r\n if (!dropdownMenuRef.value) {\r\n return null;\r\n }\r\n\r\n const optionElement = dropdownMenuRef.value.querySelector(\r\n `[data-option-value=\"${escapeSelectorValue(value)}\"]`,\r\n );\r\n\r\n if (!optionElement) {\r\n return null;\r\n }\r\n\r\n optionElement.scrollIntoView({ block: 'nearest' });\r\n return optionElement;\r\n};\r\n\r\nconst focusOptionByValue = async (value) => {\r\n const optionElement = await scrollOptionByValue(value);\r\n\r\n if (!optionElement) {\r\n return;\r\n }\r\n\r\n optionElement.focus({ preventScroll: true });\r\n};\r\n\r\nconst setHighlightedOption = async (option, { focus = !props.searchable } = {}) => {\r\n const value = String(optionValue(option) ?? '');\r\n highlightedOptionValue.value = value;\r\n\r\n if (focus) {\r\n await focusOptionByValue(value);\r\n return;\r\n }\r\n\r\n await scrollOptionByValue(value);\r\n};\r\n\r\nconst findMatchingOption = (query) => {\r\n const normalizedQuery = query.trimStart().toLowerCase();\r\n\r\n if (!normalizedQuery) {\r\n return null;\r\n }\r\n\r\n const options = props.multiple ? multipleOptions.value : availableOptions.value;\r\n\r\n return options.find((option) => (\r\n String(optionText(option)).toLowerCase().startsWith(normalizedQuery)\r\n )) ?? null;\r\n};\r\n\r\nconst findHighlightedOptionIndex = () => {\r\n return visibleOptions.value.findIndex((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n};\r\n\r\nconst moveHighlightedOption = async (direction) => {\r\n if (!visibleOptions.value.length) {\r\n return;\r\n }\r\n\r\n const currentIndex = findHighlightedOptionIndex();\r\n const fallbackIndex = direction > 0 ? 0 : visibleOptions.value.length - 1;\r\n const nextIndex = currentIndex === -1\r\n ? fallbackIndex\r\n : (currentIndex + direction + visibleOptions.value.length) % visibleOptions.value.length;\r\n\r\n await setHighlightedOption(visibleOptions.value[nextIndex]);\r\n};\r\n\r\nconst selectHighlightedOption = () => {\r\n const highlightedOption = visibleOptions.value.find((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n\r\n if (!highlightedOption) {\r\n return;\r\n }\r\n\r\n if (props.multiple) {\r\n toggleMultipleOption(highlightedOption);\r\n return;\r\n }\r\n\r\n selectOption(highlightedOption);\r\n};\r\n\r\nconst syncHighlightedOption = async () => {\r\n if (!visibleOptions.value.length) {\r\n highlightedOptionValue.value = null;\r\n return;\r\n }\r\n\r\n const hasCurrentHighlight = visibleOptions.value.some((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n ));\r\n\r\n if (hasCurrentHighlight) {\r\n await setHighlightedOption(\r\n visibleOptions.value.find((option) => (\r\n String(optionValue(option) ?? '') === highlightedOptionValue.value\r\n )),\r\n { focus: false },\r\n );\r\n return;\r\n }\r\n\r\n await setHighlightedOption(visibleOptions.value[0], { focus: false });\r\n};\r\n\r\nconst handleTypeaheadKeydown = (event) => {\r\n if (!isOpen.value || props.searchable) {\r\n return;\r\n }\r\n\r\n if (event.ctrlKey || event.altKey || event.metaKey || event.key.length !== 1) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n const targetInsideSelect = rootRef.value?.contains(target) || dropdownMenuRef.value?.contains(target);\r\n\r\n if (!targetInsideSelect) {\r\n return;\r\n }\r\n\r\n typeaheadQuery.value += event.key;\r\n scheduleTypeaheadReset();\r\n\r\n const matchingOption = findMatchingOption(typeaheadQuery.value);\r\n\r\n if (!matchingOption) {\r\n return;\r\n }\r\n\r\n setHighlightedOption(matchingOption);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n};\r\n\r\nconst handleDropdownKeydown = (event) => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n const targetInsideSelect = rootRef.value?.contains(target) || dropdownMenuRef.value?.contains(target);\r\n\r\n if (!targetInsideSelect) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n isOpen.value = false;\r\n triggerRef.value?.focus();\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n moveHighlightedOption(1);\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n moveHighlightedOption(-1);\r\n return;\r\n }\r\n\r\n if (event.key === 'Enter' && highlightedOptionValue.value !== null) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n selectHighlightedOption();\r\n }\r\n};\r\n\r\nconst handleOptionKeydown = (event, option) => {\r\n if (event.key !== 'Enter' && event.key !== ' ') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (props.multiple) {\r\n toggleMultipleOption(option);\r\n return;\r\n }\r\n\r\n selectOption(option);\r\n};\r\n\r\nonMounted(() => {\n isMounted.value = true;\n syncTeleportTarget();\n syncDarkMode();\n document.addEventListener('click', closeDropdown);\n document.addEventListener('pointermove', handleTriggerValuePointerMove);\n document.addEventListener('pointerup', handleTriggerValuePointerUp);\n document.addEventListener('selectionchange', syncTriggerValueSelection);\n document.addEventListener('keydown', handleDropdownKeydown, true);\n document.addEventListener('keydown', handleTypeaheadKeydown, true);\n window.addEventListener('resize', scheduleDropdownPositionUpdate);\n document.addEventListener('scroll', updateDropdownOnModalScroll, true);\n});\n\nonBeforeUnmount(() => {\n cancelDropdownFrames();\n disconnectResizeObserver();\n clearTypeaheadQuery();\n document.removeEventListener('click', closeDropdown);\n document.removeEventListener('pointermove', handleTriggerValuePointerMove);\n document.removeEventListener('pointerup', handleTriggerValuePointerUp);\n document.removeEventListener('selectionchange', syncTriggerValueSelection);\n document.removeEventListener('keydown', handleDropdownKeydown, true);\n document.removeEventListener('keydown', handleTypeaheadKeydown, true);\n window.removeEventListener('resize', scheduleDropdownPositionUpdate);\n document.removeEventListener('scroll', updateDropdownOnModalScroll, true);\n});\n\r\nwatch(isOpen, async (open) => {\n if (!open) {\n cancelDropdownFrames();\n disconnectResizeObserver();\n isDropdownReady.value = false;\n resetTriggerValueSelectionState();\n searchQuery.value = '';\n highlightedOptionValue.value = null;\n clearTypeaheadQuery();\n return;\n }\r\n\r\n clearTypeaheadQuery();\n syncTeleportTarget();\n syncDarkMode();\n await refreshDropdownPosition();\n\r\n if (props.searchable) {\r\n await nextTick();\r\n await syncHighlightedOption();\r\n searchInputRef.value?.focus();\r\n return;\r\n }\r\n\r\n const initialOption = props.multiple\r\n ? selectedMultipleOptions.value[0] ?? multipleOptions.value[0]\r\n : props.options.find((option) => (\r\n optionValue(option) === props.modelValue || String(optionValue(option)) === String(props.modelValue)\r\n )) ?? availableOptions.value[0];\r\n\r\n if (initialOption) {\r\n await setHighlightedOption(initialOption);\r\n }\r\n});\r\n\r\nwatch(filteredOptions, async () => {\n if (!isOpen.value || !props.searchable) {\n return;\n }\n\n await syncHighlightedOption();\n scheduleDropdownPositionUpdate();\n});\n\nwatch(() => props.modelValue, () => {\n if (!isSelectingTriggerValue.value && triggerValueRef.value) {\n triggerValueRef.value.scrollLeft = 0;\n }\n});\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"rootRef\"\r\n :class=\"['relative', props.ui.root]\"\r\n @click=\"toggleDropdown\"\r\n >\r\n <div\r\n ref=\"triggerRef\"\r\n :class=\"triggerClasses\"\r\n v-bind=\"attrs\"\r\n tabindex=\"0\"\n >\n <span\n ref=\"triggerValueRef\"\n :class=\"triggerValueClasses\"\n :style=\"darkTextStyle\"\n @pointerdown=\"handleTriggerValuePointerDown\"\n >\n {{ displayText }}\n </span>\n <div class=\"flex h-5 shrink-0 items-center gap-1\">\n <button\r\n v-if=\"canClearSelection\"\r\n type=\"button\"\r\n :class=\"clearButtonClasses\"\r\n aria-label=\"Clear selection\"\r\n @click.stop.prevent=\"clearSelection\"\r\n @pointerdown.stop\r\n >\r\n <XMarkIcon class=\"size-4\" />\r\n </button>\r\n <ChevronDownIcon\r\n :class=\"chevronClasses\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <Teleport :to=\"teleportTarget\" v-if=\"isMounted\">\n <transition\n enter-active-class=\"transition-opacity duration-150 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-100 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\r\n v-if=\"isOpen\"\r\n ref=\"dropdownMenuRef\"\r\n :class=\"[{ dark: isDarkMode }, props.ui.dropdownRoot]\"\r\n :style=\"dropdownStyle\"\r\n >\r\n <div\n :class=\"dropdownClasses\"\n :style=\"{ maxHeight: dropdownStyle.maxHeight }\"\n >\n <input\r\n v-if=\"searchable\"\r\n ref=\"searchInputRef\"\r\n v-model=\"searchQuery\"\r\n type=\"text\"\r\n :placeholder=\"searchPlaceholder\"\r\n :class=\"searchInputClasses\"\r\n @click.stop\r\n @keydown.stop\r\n >\r\n <div\r\n v-if=\"selectedDeletedOption\"\r\n :class=\"[\r\n dropdownOptionClass,\r\n deletedOptionClass,\r\n dropdownSelectedClass,\r\n ]\"\r\n >\r\n {{ optionText(selectedDeletedOption) }}\r\n </div>\r\n\r\n <div\r\n v-if=\"!hasVisibleOptions\"\r\n :class=\"emptyStateClasses\"\r\n :style=\"darkTextStyle\"\r\n >\r\n {{ noOptionsText }}\r\n </div>\r\n\r\n <div\r\n v-for=\"option in filteredOptions\"\r\n :key=\"String(optionValue(option))\"\r\n :data-option-value=\"String(optionValue(option) ?? '')\"\r\n data-select-option=\"true\"\r\n tabindex=\"-1\"\r\n :class=\"optionClasses(option)\"\r\n @click.stop=\"multiple ? toggleMultipleOption(option) : selectOption(option)\"\r\n @focus=\"highlightedOptionValue = String(optionValue(option) ?? '')\"\r\n @keydown=\"handleOptionKeydown($event, option)\"\r\n >\r\n <div\n v-if=\"multiple\"\n class=\"flex items-center gap-3\"\n >\n <input\r\n type=\"checkbox\"\r\n :class=\"['h-4 w-4 rounded border-neutral-300 text-neutral-900 focus:ring-neutral-900', props.ui.optionControl]\"\r\n :checked=\"optionIsSelected(option)\"\r\n :disabled=\"disabled\"\r\n tabindex=\"-1\"\r\n @click.stop\r\n @change.stop=\"toggleMultipleOption(option)\"\r\n >\r\n <span class=\"shrink-0 whitespace-nowrap\" :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </div>\n <template v-else>\n <span class=\"whitespace-nowrap\" :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n </transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport CustomSelect from './CustomSelect.vue';\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: '',\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n options: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: 'name',\r\n },\r\n valueKey: {\r\n type: String,\r\n default: 'id',\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: 'deleted_at',\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: 'block w-full rounded-lg border border-slate-300 bg-white px-4 py-3 text-sm text-slate-900 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-900 dark:text-neutral-50',\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'text-red-600 dark:text-neutral-100',\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-900 dark:text-neutral-50',\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'text-rose-700 dark:text-neutral-100',\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: 'text-slate-500 dark:text-neutral-200',\r\n },\r\n dropdownClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-white border border-slate-200 rounded-xl shadow-xl max-h-60 overflow-auto z-50 backdrop-blur-sm dark:bg-neutral-950 dark:border-neutral-800',\r\n },\r\n dropdownOptionClass: {\r\n type: [String, Array, Object],\r\n default: 'px-4 py-3 hover:bg-slate-100 cursor-pointer transition-colors dark:hover:bg-neutral-900',\r\n },\r\n dropdownSelectedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-blue-50 text-blue-700 font-medium dark:bg-neutral-900 dark:text-neutral-50',\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: 'bg-slate-100 text-slate-900 dark:bg-neutral-800 dark:text-neutral-50',\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: 'Search...',\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: 'w-full border-b border-neutral-200 px-4 py-3 text-sm outline-none focus:border-neutral-900 dark:border-neutral-800 dark:bg-neutral-950 dark:focus:border-neutral-100',\r\n },\r\n noOptionsText: {\n type: String,\n default: 'No options available',\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\r\nconst emit = defineEmits(['update:modelValue']);\r\n</script>\r\n\r\n<template>\r\n <CustomSelect\r\n :model-value=\"modelValue\"\r\n :model-modifiers=\"modelModifiers\"\r\n :options=\"options\"\r\n :placeholder=\"placeholder\"\r\n :placeholder-disabled=\"placeholderDisabled\"\r\n :multiple=\"multiple\"\r\n :disabled=\"disabled\"\r\n :soft-delete-aware=\"softDeleteAware\"\r\n :label-key=\"labelKey\"\r\n :value-key=\"valueKey\"\r\n :deleted-key=\"deletedKey\"\r\n :option-label=\"optionLabel\"\r\n :base-class=\"baseClass\"\r\n :normal-text-class=\"normalTextClass\"\r\n :deleted-selected-class=\"deletedSelectedClass\"\r\n :option-class=\"optionClass\"\r\n :deleted-option-class=\"deletedOptionClass\"\r\n :placeholder-class=\"placeholderClass\"\r\n :dropdown-class=\"dropdownClass\"\r\n :dropdown-option-class=\"dropdownOptionClass\"\r\n :dropdown-selected-class=\"dropdownSelectedClass\"\r\n :dropdown-highlighted-class=\"dropdownHighlightedClass\"\r\n :searchable=\"searchable\"\n :search-placeholder=\"searchPlaceholder\"\n :search-input-class=\"searchInputClass\"\n :no-options-text=\"noOptionsText\"\n :ui=\"ui\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n v-bind=\"$attrs\"\n />\n</template>\n","<script setup>\r\nimport { computed, onMounted, ref, useAttrs } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n locale: {\r\n type: String,\r\n default: 'en',\r\n },\r\n withTimestamp: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\nconst input = ref(null);\r\n\r\nconst inputType = computed(() => (props.withTimestamp ? 'datetime-local' : 'date'));\r\nconst normalizedValue = computed(() => props.modelValue ?? '');\r\nconst inputLang = computed(() => {\r\n const lang = attrs.lang;\r\n return typeof lang === 'string' && lang !== '' ? lang : props.locale;\r\n});\r\nconst cappedMax = computed(() => {\r\n const limit = props.withTimestamp ? '9999-12-31T23:59' : '9999-12-31';\r\n const incoming = attrs.max;\r\n if (typeof incoming !== 'string' || incoming === '') {\r\n return limit;\r\n }\r\n\r\n return incoming > limit ? limit : incoming;\r\n});\r\n\r\nconst inputAttrs = computed(() => {\r\n const { class: _class, type: _type, lang: _lang, ...rest } = attrs;\r\n return rest;\r\n});\r\n\r\nconst inputClasses = computed(() => [\r\n 'date-input h-[48px] w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n props.ui.input,\r\n]);\r\n\r\nconst normalizeDateValue = (rawValue) => {\r\n if (typeof rawValue !== 'string') {\r\n return '';\r\n }\r\n\r\n return rawValue.replace(/^(\\d{4})\\d+/, '$1');\r\n};\r\n\r\nconst handleDateInput = (event) => {\r\n const target = event.target;\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const rawValue = String(target.value ?? '');\r\n const normalized = normalizeDateValue(rawValue);\r\n\r\n if (normalized !== rawValue) {\r\n target.value = normalized;\r\n }\r\n\r\n emit('update:modelValue', normalized);\r\n};\r\n\r\nonMounted(() => {\r\n if (input.value?.hasAttribute('autofocus')) {\r\n input.value.focus();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => input.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <input\r\n ref=\"input\"\r\n v-bind=\"inputAttrs\"\r\n :type=\"inputType\"\r\n :lang=\"inputLang\"\r\n :max=\"cappedMax\"\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"normalizedValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"handleDateInput\"\r\n @change=\"handleDateInput\"\r\n >\r\n</template>\r\n\r\n<style scoped>\r\n.date-input {\r\n color-scheme: light;\r\n}\r\n\r\n.dark .date-input {\r\n color-scheme: dark;\r\n}\r\n\r\n.date-input::-webkit-calendar-picker-indicator {\r\n cursor: pointer;\r\n}\r\n\r\n.date-input:disabled::-webkit-calendar-picker-indicator {\r\n cursor: default;\r\n}\r\n</style>\r\n","<script setup>\r\nimport { computed, ref, useAttrs, watch, onMounted, onUnmounted } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: Object,\r\n default: () => ({ start: '', end: '' }),\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n min: {\r\n type: String,\r\n default: '',\r\n },\r\n max: {\r\n type: String,\r\n default: '',\r\n },\r\n minDays: {\r\n type: Number,\r\n default: 0,\r\n },\r\n maxDays: {\r\n type: Number,\r\n default: null,\r\n },\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n placeholder: {\r\n type: String,\r\n default: 'Select date range',\r\n },\r\n locale: {\r\n type: String,\r\n default: 'en',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst attrs = useAttrs();\r\n\r\nconst isOpen = ref(false);\r\nconst calendarRef = ref(null);\r\nconst inputRef = ref(null);\r\nconst hoveredDate = ref(null);\r\nconst currentMonth = ref(new Date().getMonth());\r\nconst currentYear = ref(new Date().getFullYear());\r\n\r\nconst startDate = computed(() => props.modelValue?.start ?? '');\r\nconst endDate = computed(() => props.modelValue?.end ?? '');\r\n\r\nconst displayText = computed(() => {\r\n if (!startDate.value && !endDate.value) return props.placeholder;\r\n if (startDate.value && !endDate.value) return startDate.value;\r\n if (!startDate.value && endDate.value) return endDate.value;\r\n return `${startDate.value} - ${endDate.value}`;\r\n});\r\n\r\nconst daysBetween = computed(() => {\r\n if (!startDate.value || !endDate.value) return 0;\r\n const start = new Date(startDate.value);\r\n const end = new Date(endDate.value);\r\n const diffTime = end - start;\r\n // Inclusive counting: May 14 to May 16 = 3 days\r\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1;\r\n});\r\n\r\nconst calendarDays = computed(() => {\r\n const firstDay = new Date(currentYear.value, currentMonth.value, 1);\r\n const lastDay = new Date(currentYear.value, currentMonth.value + 1, 0);\r\n const startDate = new Date(firstDay);\r\n startDate.setDate(startDate.getDate() - firstDay.getDay());\r\n \r\n const days = [];\r\n const current = new Date(startDate);\r\n \r\n while (current <= lastDay || current.getDay() !== 0) {\r\n const currentDate = new Date(current);\r\n days.push({\r\n date: currentDate,\r\n isCurrentMonth: current.getMonth() === currentMonth.value,\r\n isToday: current.toDateString() === new Date().toDateString(),\r\n isSelected: isDateSelected(current),\r\n isInRange: isDateInRange(current),\r\n isStartDate: isDateStart(current),\r\n isEndDate: isDateEnd(current),\r\n isHoveredInRange: isDateInHoveredRange(current),\r\n isDisabled: !isDateAllowed(currentDate),\r\n });\r\n current.setDate(current.getDate() + 1);\r\n if (current.getMonth() > currentMonth.value && current.getDay() === 0) break;\r\n }\r\n \r\n return days;\r\n});\r\n\r\nconst isDateSelected = (date) => {\r\n if (!startDate.value && !endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === startDate.value || dateStr === endDate.value;\r\n};\r\n\r\nconst isDateInRange = (date) => {\r\n if (!startDate.value || !endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr > startDate.value && dateStr < endDate.value;\r\n};\r\n\r\nconst isDateStart = (date) => {\r\n if (!startDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === startDate.value;\r\n};\r\n\r\nconst isDateEnd = (date) => {\r\n if (!endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n return dateStr === endDate.value;\r\n};\r\n\r\nconst isDateInHoveredRange = (date) => {\r\n if (!startDate.value || endDate.value || !hoveredDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n const startStr = startDate.value;\r\n const hoveredStr = hoveredDate.value.toISOString().split('T')[0];\r\n \r\n // Only exclude start date from hover range, allow hovered date to show selection\r\n if (dateStr === startStr) return false;\r\n \r\n return (dateStr > startStr && dateStr <= hoveredStr) || (dateStr < startStr && dateStr >= hoveredStr);\r\n};\r\n\r\nconst isDateInValidRange = (date) => {\r\n if (!startDate.value || endDate.value) return false;\r\n const dateStr = date.toISOString().split('T')[0];\r\n const startStr = startDate.value;\r\n \r\n // Check if date is after or equal to start date (allow same day for 1-day range)\r\n if (dateStr < startStr) return false;\r\n \r\n const start = new Date(startStr);\r\n const selected = new Date(dateStr);\r\n // Inclusive counting: same day = 1 day, next day = 2 days\r\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check if within minDays and maxDays constraints (using inclusive counting)\r\n return daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays);\r\n};\r\n\r\nconst inputClasses = computed(() => [\r\n 'date-range-input h-[48px] w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10 cursor-pointer',\r\n attrs.class,\r\n props.ui.trigger,\r\n]);\r\n\r\nconst toggleCalendar = () => {\r\n if (!props.disabled) {\r\n if (isOpen.value) {\r\n // If closing the calendar and we have a partial selection, clear it\r\n if (startDate.value && !endDate.value) {\r\n emit('update:modelValue', { start: '', end: '' });\r\n }\r\n isOpen.value = false;\r\n } else {\r\n isOpen.value = true;\r\n }\r\n }\r\n};\r\n\r\nconst isDateAllowed = (date) => {\r\n const dateStr = date.toISOString().split('T')[0];\r\n \r\n // Check min date constraint\r\n if (props.min && dateStr < props.min) {\r\n return false;\r\n }\r\n \r\n // Check max date constraint\r\n if (props.max && dateStr > props.max) {\r\n return false;\r\n }\r\n \r\n // If we have a start date but no end date, check if this date is valid for end selection\r\n if (startDate.value && !endDate.value) {\r\n // Allow selecting the same day as start date only if minDays is 1 (inclusive: 1 day)\r\n if (dateStr === startDate.value) {\r\n return props.minDays <= 1;\r\n }\r\n return isDateInValidRange(date);\r\n }\r\n \r\n // If we're selecting a start date (no selection yet or complete selection), \r\n // check if this date can be a valid start date considering minDays and max date\r\n if (!startDate.value || (startDate.value && endDate.value)) {\r\n const selected = new Date(dateStr);\r\n \r\n // Check if there are enough days after this date to satisfy minDays\r\n if (props.minDays > 0 && props.max) {\r\n const minEndDate = new Date(selected);\r\n minEndDate.setDate(minEndDate.getDate() + props.minDays);\r\n const minEndStr = minEndDate.toISOString().split('T')[0];\r\n \r\n // If minEndDate is beyond the max date, this start date is too late\r\n if (minEndStr > props.max) {\r\n return false;\r\n }\r\n }\r\n }\r\n \r\n return true;\r\n};\r\n\r\nconst selectDate = (date) => {\r\n const dateStr = date.toISOString().split('T')[0];\r\n \r\n // Special case: if clicking the same day as start date, complete selection with 1-day range\r\n // Only allowed if minDays is 1 or less (inclusive counting: 1 day)\r\n if (startDate.value && !endDate.value && dateStr === startDate.value && props.minDays <= 1) {\r\n emit('update:modelValue', { start: startDate.value, end: dateStr });\r\n isOpen.value = false;\r\n return;\r\n }\r\n \r\n // Check if the selected date is allowed by min/max constraints\r\n if (!isDateAllowed(date)) {\r\n return; // Don't select dates outside min/max range\r\n }\r\n \r\n if (!startDate.value || (startDate.value && endDate.value)) {\r\n // Start new selection\r\n emit('update:modelValue', { start: dateStr, end: '' });\r\n } else if (!endDate.value) {\r\n // Complete selection\r\n const start = new Date(startDate.value);\r\n const selected = new Date(dateStr);\r\n \r\n if (selected < start) {\r\n // If selected date is before start, swap them\r\n // Inclusive counting\r\n const daysDiff = Math.ceil((start - selected) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check constraints for swapped range\r\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\r\n emit('update:modelValue', { start: dateStr, end: startDate.value });\r\n isOpen.value = false;\r\n } else {\r\n // Invalid range, keep original start date and don't close\r\n return;\r\n }\r\n } else {\r\n // Normal selection (including same day)\r\n // Inclusive counting\r\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24)) + 1;\r\n \r\n // Check constraints using inclusive counting\r\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\r\n emit('update:modelValue', { start: startDate.value, end: dateStr });\r\n isOpen.value = false;\r\n } else {\r\n // Invalid range, keep original start date and don't close\r\n return;\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst closeCalendar = (event) => {\r\n if (calendarRef.value && !calendarRef.value.contains(event.target) && !inputRef.value.contains(event.target)) {\r\n // If we have a start date but no end date, clear the selection\r\n if (startDate.value && !endDate.value) {\r\n emit('update:modelValue', { start: '', end: '' });\r\n }\r\n isOpen.value = false;\r\n }\r\n};\r\n\r\nconst handleDateHover = (date) => {\r\n if (startDate.value && !endDate.value) {\r\n hoveredDate.value = date;\r\n }\r\n};\r\n\r\nconst handleDateLeave = () => {\r\n hoveredDate.value = null;\r\n};\r\n\r\nconst previousMonth = () => {\r\n if (currentMonth.value === 0) {\r\n currentMonth.value = 11;\r\n currentYear.value--;\r\n } else {\r\n currentMonth.value--;\r\n }\r\n};\r\n\r\nconst nextMonth = () => {\r\n if (currentMonth.value === 11) {\r\n currentMonth.value = 0;\r\n currentYear.value++;\r\n } else {\r\n currentMonth.value++;\r\n }\r\n};\r\n\r\nconst goToToday = () => {\r\n const today = new Date();\r\n currentMonth.value = today.getMonth();\r\n currentYear.value = today.getFullYear();\r\n};\r\n\r\nconst clearSelection = () => {\r\n emit('update:modelValue', { start: '', end: '' });\r\n isOpen.value = false;\r\n};\r\n\r\nconst monthNames = computed(() => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n return new Intl.DateTimeFormat(props.locale, { month: 'long' }).format(new Date(2000, i, 1));\r\n });\r\n});\r\n\r\nconst dayNames = computed(() => {\r\n return Array.from({ length: 7 }, (_, i) => {\r\n return new Intl.DateTimeFormat(props.locale, { weekday: 'short' }).format(new Date(2000, 0, i + 2));\r\n });\r\n});\r\n\r\n// Handle click outside to close dropdown\r\nwatch(isOpen, (newValue) => {\r\n if (newValue) {\r\n document.addEventListener('click', closeCalendar);\r\n } else {\r\n document.removeEventListener('click', closeCalendar);\r\n }\r\n});\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('click', closeCalendar);\r\n});\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative', props.ui.root]\">\r\n <label\r\n v-if=\"label\"\r\n :class=\"['text-sm font-medium text-neutral-700 dark:text-neutral-300 mb-1 block', props.ui.label]\"\r\n >\r\n {{ label }}\r\n </label>\r\n <input\r\n ref=\"inputRef\"\r\n readonly\r\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\r\n :value=\"displayText\"\r\n :disabled=\"props.disabled\"\r\n @click=\"toggleCalendar\"\r\n >\r\n \r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"calendarRef\"\r\n :class=\"['absolute top-full left-0 z-50 mt-1 w-80 rounded-lg border border-neutral-200 bg-white shadow-xl dark:border-neutral-800 dark:bg-neutral-950', props.ui.panel]\"\r\n @click.stop\r\n >\r\n <div :class=\"['p-4', props.ui.panelContent]\">\r\n <div :class=\"['mb-4 flex items-center justify-between', props.ui.header]\">\r\n <button\r\n type=\"button\"\r\n :class=\"['p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors', props.ui.navButton]\"\r\n @click=\"previousMonth\"\r\n >\r\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n \r\n <div :class=\"['text-sm font-medium text-neutral-900 dark:text-neutral-50', props.ui.monthLabel]\">\r\n {{ monthNames[currentMonth] }} {{ currentYear }}\r\n </div>\r\n \r\n <button\r\n type=\"button\"\r\n :class=\"['p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors', props.ui.navButton]\"\r\n @click=\"nextMonth\"\r\n >\r\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n <div :class=\"['grid grid-cols-7 gap-1 mb-2', props.ui.weekdays]\">\r\n <div\r\n v-for=\"day in dayNames\"\r\n :key=\"day\"\r\n :class=\"['text-xs font-medium text-neutral-500 dark:text-neutral-400 text-center py-1', props.ui.weekday]\"\r\n >\r\n {{ day }}\r\n </div>\r\n </div>\r\n \r\n <div class=\"grid grid-cols-7 gap-1\">\r\n <div\r\n v-for=\"day in calendarDays\"\r\n :key=\"day.date.toISOString()\"\r\n class=\"relative\"\r\n >\r\n <button\r\n type=\"button\"\r\n :class=\"[\r\n 'w-8 h-8 text-xs rounded transition-colors',\r\n props.ui.day,\r\n day.isToday && !day.isSelected ? props.ui.dayToday : null,\r\n day.isDisabled ? props.ui.dayDisabled : null,\r\n day.isSelected ? props.ui.daySelected : null,\r\n day.isInRange ? props.ui.dayInRange : null,\r\n day.isHoveredInRange ? props.ui.dayHovered : null,\r\n {\r\n 'text-neutral-400 dark:text-neutral-600': !day.isCurrentMonth,\r\n 'text-neutral-900 dark:text-neutral-50': day.isCurrentMonth && !day.isDisabled,\r\n 'text-neutral-300 dark:text-neutral-500 cursor-not-allowed': day.isDisabled,\r\n 'bg-neutral-200 dark:bg-neutral-700': day.isToday && !day.isSelected,\r\n 'bg-blue-500 text-white hover:bg-blue-600': day.isSelected,\r\n 'bg-blue-100 dark:bg-blue-900': day.isInRange,\r\n 'bg-blue-50 dark:bg-blue-950': day.isHoveredInRange,\r\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800': !day.isDisabled,\r\n 'rounded-l-full': day.isStartDate && !day.isEndDate,\r\n 'rounded-r-full': day.isEndDate && !day.isStartDate,\r\n 'rounded-full': day.isStartDate && day.isEndDate,\r\n }]\"\r\n :disabled=\"day.isDisabled\"\r\n @click=\"selectDate(day.date)\"\r\n @mouseenter=\"handleDateHover(day.date)\"\r\n @mouseleave=\"handleDateLeave\"\r\n >\r\n {{ day.date.getDate() }}\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div :class=\"['mt-4 pt-4 border-t border-neutral-200 dark:border-neutral-800', props.ui.footer]\">\r\n <div class=\"flex items-center justify-between\">\r\n <div :class=\"['text-xs text-neutral-500 dark:text-neutral-400', props.ui.footerText]\">\r\n <div v-if=\"startDate && endDate\">\r\n Range: {{ daysBetween }} days\r\n </div>\r\n <div v-else-if=\"startDate\">\r\n Select end date\r\n </div>\r\n <div v-else>\r\n Select start date\r\n </div>\r\n </div>\r\n \r\n <button\r\n v-if=\"startDate || endDate\"\r\n type=\"button\"\r\n :class=\"['text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 transition-colors', props.ui.clearButton]\"\r\n @click=\"clearSelection\"\r\n >\r\n Clear\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.date-range-input {\r\n color-scheme: light;\r\n}\r\n\r\n.dark .date-range-input {\r\n color-scheme: dark;\r\n}\r\n\r\n.date-range-input:disabled {\r\n cursor: not-allowed;\r\n}\r\n</style>\r\n","<script setup>\r\nimport { PhotoIcon } from '@heroicons/vue/24/outline';\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst props = defineProps({\r\n currentImageUrl: {\r\n type: String,\r\n default: '',\r\n },\r\n accept: {\r\n type: String,\r\n default: 'image/*',\r\n },\r\n currentLabel: {\r\n type: String,\r\n default: 'Current logo',\r\n },\r\n currentSubtext: {\r\n type: String,\r\n default: 'Upload a new logo to replace this one',\r\n },\r\n attrs: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst handleFileChange = (event) => {\r\n const file = event.target.files?.[0] ?? null;\r\n emit('update:modelValue', file);\r\n};\r\n</script>\r\n\r\n<template>\r\n <div :class=\"props.ui.root\">\r\n <div :class=\"['relative', props.ui.inputWrapper]\">\r\n <div :class=\"['absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none', props.ui.leadingIcon]\">\r\n <PhotoIcon class=\"size-5 text-neutral-400 dark:text-neutral-200\" />\r\n </div>\r\n <input\r\n v-bind=\"attrs\"\r\n type=\"file\"\r\n :accept=\"accept\"\r\n :class=\"['block h-[48px] w-full cursor-pointer rounded-lg border border-neutral-200 bg-white py-[7px] pl-10 pr-4 text-sm text-neutral-700 align-middle shadow-sm transition-all duration-200 file:mr-3 file:h-[34px] file:align-middle file:rounded-md file:border-0 file:bg-neutral-900 file:px-4 file:py-0 file:text-sm file:font-medium file:leading-[34px] file:text-neutral-50 hover:file:bg-neutral-800 focus:border-neutral-900 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-100 dark:file:bg-neutral-800 dark:file:text-neutral-50 dark:hover:file:bg-neutral-700 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10', props.ui.input]\"\r\n @change=\"handleFileChange\"\r\n />\r\n </div>\r\n\r\n <div\r\n v-if=\"props.currentImageUrl\"\r\n :class=\"['mt-4 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-800 dark:bg-neutral-900/50', props.ui.previewCard]\"\r\n >\r\n <div class=\"flex items-center space-x-4\">\r\n <img :src=\"props.currentImageUrl\" alt=\"Current logo\" :class=\"['h-16 w-auto max-w-24 object-contain rounded-lg shadow-sm', props.ui.previewImage]\">\r\n <div>\r\n <p :class=\"['text-sm font-medium text-neutral-900 dark:text-neutral-50', props.ui.previewTitle]\">{{ props.currentLabel }}</p>\r\n <p :class=\"['text-xs text-neutral-500 dark:text-neutral-200', props.ui.previewText]\">{{ props.currentSubtext }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup>\r\nimport { computed } from 'vue';\r\n\r\nconst emit = defineEmits(['update:modelValue']);\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, Number, null],\r\n default: '',\r\n },\r\n options: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst normalizedOptions = computed(() => {\r\n return props.options\r\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\r\n .filter((option) => option !== '');\r\n});\r\n\r\nconst isSelected = (option) => String(option) === String(props.modelValue ?? '');\r\nconst selectOption = (option) => emit('update:modelValue', option);\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['flex h-[48px] overflow-hidden rounded-lg border border-neutral-200 bg-white text-sm dark:border-neutral-800 dark:bg-neutral-950', props.ui.root]\">\r\n <button\r\n v-for=\"(option, idx) in normalizedOptions\"\r\n :key=\"`notation-${idx}-${option}`\"\r\n type=\"button\"\r\n :class=\"[\r\n 'flex-1 border-l border-neutral-200 px-2 text-center font-semibold transition-colors duration-150 first:border-l-0 dark:border-neutral-800',\r\n props.ui.option,\r\n idx === 0 ? 'rounded-l-lg' : '',\r\n idx === normalizedOptions.length - 1 ? 'rounded-r-lg' : '',\r\n isSelected(option)\r\n ? 'bg-neutral-900 text-neutral-50 dark:bg-neutral-800 dark:text-neutral-50'\r\n : 'bg-white text-neutral-700 hover:bg-neutral-100 dark:bg-neutral-950 dark:text-neutral-100 dark:hover:bg-neutral-900',\r\n 'focus-visible:ring-2 focus-visible:ring-neutral-900/20 focus-visible:ring-offset-0 dark:focus-visible:ring-neutral-100/20',\r\n isSelected(option) ? props.ui.optionSelected : props.ui.optionUnselected,\r\n ]\"\r\n :disabled=\"disabled\"\r\n @click=\"selectOption(option)\"\r\n >\r\n {{ option }}\r\n </button>\r\n </div>\r\n</template>\r\n","<script setup>\nimport { computed, ref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean, null],\n default: null,\n },\n value: {\n type: [String, Number, Boolean],\n default: true,\n },\n label: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => String(props.modelValue ?? '') === String(props.value));\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = () => {\n hasFocus.value = false;\n};\n\nconst onChange = () => emit('update:modelValue', props.value);\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors',\n props.ui.root,\n isChecked ? 'border-neutral-900 bg-neutral-900 text-neutral-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-50' : 'border-neutral-200 text-neutral-600 dark:border-neutral-800 dark:text-neutral-100',\n disabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer',\n hasFocus && !disabled ? 'ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950' : '',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"radio\"\n class=\"sr-only\"\n :name=\"name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n >\n <span :class=\"props.ui.label\">\n <span :class=\"props.ui.indicator\">{{ isChecked ? '✓' : '○' }}</span> {{ label }}\n </span>\n </label>\n</template>\n","<script setup>\nimport { computed, ref } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\", \"blur\"]);\n\nconst props = defineProps({\n modelValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n value: {\n type: [Boolean, String, Number],\n default: true,\n },\n uncheckedValue: {\n type: [Boolean, String, Number, null],\n default: false,\n },\n label: {\n type: String,\n default: \"\",\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isChecked = computed(() => props.modelValue === props.value);\nconst hasFocus = ref(false);\n\nconst handleFocus = () => {\n hasFocus.value = true;\n};\n\nconst handleBlur = (event) => {\n hasFocus.value = false;\n emit(\"blur\", event);\n};\n\nconst onChange = (event) => {\n emit(\n \"update:modelValue\",\n event.target.checked ? props.value : props.uncheckedValue,\n );\n};\n</script>\n\n<template>\n <label\n :class=\"[\n 'inline-flex items-center gap-3 select-none',\n props.ui.root,\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n hasFocus && !disabled\n ? 'rounded-full ring-2 ring-neutral-900/20 ring-offset-2 ring-offset-white dark:ring-neutral-100/20 dark:ring-offset-neutral-950'\n : '',\n hasFocus && !disabled ? props.ui.focus : '',\n ]\"\n >\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n :name=\"name\"\n :checked=\"isChecked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <span\n aria-hidden=\"true\"\n :class=\"[\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition-colors duration-200',\n props.ui.control,\n isChecked\n ? 'border-neutral-900 bg-neutral-900 dark:border-neutral-100 dark:bg-neutral-100'\n : 'border-neutral-300 bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800',\n isChecked ? props.ui.controlChecked : props.ui.controlUnchecked,\n ]\"\n >\n <span\n :class=\"['inline-block size-4 rounded-full bg-white shadow-sm transition-transform duration-200 dark:bg-neutral-950', props.ui.indicator, isChecked ? 'translate-x-6' : 'translate-x-1']\"\n />\n </span>\n\n <span v-if=\"label\" :class=\"['text-sm text-neutral-700 dark:text-neutral-200', props.ui.label]\">\n {{ label }}\n </span>\n </label>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport InputGroup from './InputGroup.vue';\n\nconst emit = defineEmits(['update:modelValue']);\nconst props = defineProps({\n modelValue: {\n type: [String, Number, null],\n default: '',\n },\n options: {\n type: Array,\n default: () => [],\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst normalizedOptions = computed(() => {\n return props.options\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\n .filter((option) => option !== '');\n});\n\nconst selectOption = (option) => emit('update:modelValue', option);\n</script>\n\n<template>\n <div :class=\"['flex flex-wrap gap-3', props.ui.group]\">\n <InputGroup\n v-for=\"option in normalizedOptions\"\n :key=\"`radio-${name ?? 'group'}-${option}`\"\n type=\"radio-input\"\n :model-value=\"props.modelValue\"\n :name=\"name\"\n :value=\"option\"\n :label=\"option\"\n :disabled=\"disabled\"\n :ui=\"props.ui.item ?? props.ui\"\n @update:modelValue=\"selectOption\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport Editor from '@tinymce/tinymce-vue';\nimport 'tinymce/skins/ui/oxide/skin.css';\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: '',\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n height: {\n type: Number,\n default: 300,\n },\n menubar: {\n type: [Boolean, String],\n default: false,\n },\n toolbar: {\n type: [String, Array],\n default: 'undo redo | bold italic underline | bullist numlist | link image | alignleft aligncenter alignright | code',\n },\n plugins: {\n type: [String, Array],\n default: () => ['link', 'table', 'code', 'lists', 'image'],\n },\n init: {\n type: Object,\n default: () => ({}),\n },\n licenseKey: {\n type: String,\n default: 'gpl',\n },\n outputFormat: {\n type: String,\n default: 'html',\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['update:modelValue', 'blur', 'init']);\n\nconst content = ref(props.modelValue ?? '');\nconst isEditorReady = ref(false);\nconst editorRevision = ref(0);\nconst editorComponentRef = ref(null);\nconst editorInstance = ref(null);\n\nconst getEditor = () => editorInstance.value ?? editorComponentRef.value?.getEditor?.() ?? null;\n\nconst syncContentFromEditor = (editor = getEditor()) => {\n if (!editor) {\n return '';\n }\n\n const nextValue = editor.getContent({ format: props.outputFormat });\n content.value = nextValue;\n emit('update:modelValue', nextValue);\n\n return nextValue;\n};\n\nconst waitForFrames = async (frameCount = 1) => {\n for (let index = 0; index < frameCount; index += 1) {\n await new Promise((resolve) => {\n requestAnimationFrame(() => resolve());\n });\n }\n};\n\nconst loadTinyMce = async () => {\n const tinymceModule = await import('tinymce/tinymce');\n const tinymce = tinymceModule.default ?? tinymceModule;\n\n if (typeof globalThis !== 'undefined' && !globalThis.tinymce) {\n globalThis.tinymce = tinymce;\n }\n\n await Promise.all([\n import('tinymce/models/dom'),\n import('tinymce/icons/default'),\n import('tinymce/themes/silver'),\n import('tinymce/plugins/code'),\n import('tinymce/plugins/image'),\n import('tinymce/plugins/link'),\n import('tinymce/plugins/lists'),\n import('tinymce/plugins/table'),\n ]);\n\n isEditorReady.value = true;\n};\n\nwatch(\n () => props.modelValue,\n (value) => {\n const nextValue = value ?? '';\n\n if (nextValue === content.value) {\n return;\n }\n\n content.value = nextValue;\n editorRevision.value += 1;\n },\n);\n\nconst normalizedToolbar = computed(() => (\n Array.isArray(props.toolbar)\n ? props.toolbar.join(' | ')\n : props.toolbar\n));\n\nconst normalizedPlugins = computed(() => (\n Array.isArray(props.plugins)\n ? [...props.plugins]\n : props.plugins\n));\n\nconst editorKey = computed(() => {\n const mode = props.readonly ? 'tiny-editor-readonly' : 'tiny-editor-editable';\n const menubarKey = props.menubar === undefined ? 'menubar-undefined' : `menubar-${String(props.menubar)}`;\n return `${mode}-${menubarKey}-${editorRevision.value}`;\n});\n\nconst editorInit = computed(() => {\n return {\n height: props.height,\n menubar: props.menubar,\n plugins: normalizedPlugins.value,\n toolbar: normalizedToolbar.value,\n skin: false,\n content_css: false,\n ...props.init,\n };\n});\n\nonMounted(() => {\n void loadTinyMce();\n});\n\nonBeforeUnmount(() => {\n editorInstance.value = null;\n});\n\nconst handleEditorInit = (_event, editor) => {\n editorInstance.value = editor;\n emit('init', editor);\n};\n\nconst handleEditorInput = (_event, editor) => {\n syncContentFromEditor(editor);\n};\n\nconst handleEditorBlur = (_event, editor) => {\n emit('blur', editor.getContent({ format: props.outputFormat }));\n};\n\ndefineExpose({\n getEditor,\n focus: () => getEditor()?.focus(),\n execCommand: (command, ui = false, value) => getEditor()?.execCommand(command, ui, value),\n getContent: (options) => getEditor()?.getContent(options) ?? '',\n getBody: () => getEditor()?.getBody?.() ?? null,\n selectNode: (node) => {\n const editor = getEditor();\n\n if (!editor || !node) {\n return;\n }\n\n editor.selection.select(node);\n },\n getBookmark: () => getEditor()?.selection.getBookmark() ?? null,\n moveToBookmark: (bookmark) => {\n const editor = getEditor();\n\n if (!editor || !bookmark) {\n return;\n }\n\n editor.selection.moveToBookmark(bookmark);\n },\n syncContent: () => syncContentFromEditor(),\n insertContent: async (value, options = {}) => {\n const editor = getEditor();\n\n if (!editor) {\n return null;\n }\n\n editor.focus();\n editor.insertContent(value);\n\n if (options.selectLast) {\n await waitForFrames(options.frames ?? 2);\n\n const matchingNodes = Array.from(\n editor.getBody().querySelectorAll(options.selectLast),\n );\n const selectedNode = matchingNodes.at(-1);\n\n if (selectedNode) {\n editor.selection.select(selectedNode);\n }\n }\n\n if (options.command) {\n await waitForFrames(options.frames ?? 2);\n editor.execCommand(options.command, false, options.commandValue);\n }\n\n if (options.sync !== false) {\n syncContentFromEditor(editor);\n }\n\n return editor;\n },\n});\n</script>\n\n<template>\n <div :key=\"editorKey\" :class=\"props.ui.root\">\n <div v-if=\"!isEditorReady\" :class=\"['min-h-[12rem] w-full rounded-lg border border-slate-300 bg-slate-50', props.ui.container]\" />\n\n <Editor\n v-else\n ref=\"editorComponentRef\"\n :class=\"[props.ui.container, props.ui.editorFrame]\"\n :initial-value=\"content\"\n :license-key=\"licenseKey\"\n :readonly=\"readonly\"\n :output-format=\"outputFormat\"\n :init=\"editorInit\"\n @init=\"handleEditorInit\"\n @input=\"handleEditorInput\"\n @blur=\"handleEditorBlur\"\n />\n </div>\n</template>\n\n<style scoped>\n</style>\n","<script setup>\r\nimport { ChevronDownIcon, EyeDropperIcon } from '@heroicons/vue/24/outline';\r\nimport { computed, nextTick, onMounted, onUnmounted, ref, useAttrs, watch } from 'vue';\r\nimport { useI18n } from 'vue-i18n';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\r\n modelValue: {\r\n type: [String, null],\r\n default: '',\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\r\n },\r\n allowAlpha: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n variant: {\r\n type: String,\r\n default: 'classic',\r\n },\r\n ui: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'blur']);\r\nconst attrs = useAttrs();\r\nconst { t } = useI18n();\r\n\r\nconst DEFAULT_HEX = '#000000';\r\nconst DEFAULT_ALPHA = 255;\r\nconst PICKER_PANEL_WIDTH = 320;\r\nconst PICKER_PANEL_GAP = 8;\r\n\r\nconst triggerRef = ref(null);\r\nconst panelRef = ref(null);\r\nconst hexInputRef = ref(null);\r\nconst saturationRef = ref(null);\r\n\r\nconst isOpen = ref(false);\r\nconst supportsEyeDropper = ref(false);\r\nconst lastEmittedValue = ref('');\r\nconst hue = ref(220);\r\nconst saturation = ref(84);\r\nconst brightness = ref(92);\r\nconst alpha = ref(DEFAULT_ALPHA);\r\nconst displayValue = ref('');\r\nconst panelStyle = ref({\r\n position: 'fixed',\r\n left: '0px',\r\n top: '0px',\r\n visibility: 'hidden',\r\n width: `${PICKER_PANEL_WIDTH}px`,\r\n zIndex: '9999',\r\n});\r\nlet dragCleanup = null;\r\nlet revealFrame = null;\r\n\r\nconst clamp = (value, min, max) => Math.min(max, Math.max(min, value));\r\n\r\nconst parseHexColor = (value) => {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const trimmed = value.trim();\r\n if (trimmed === '') {\r\n return null;\r\n }\r\n\r\n const withHash = trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\r\n const shortRgbMatch = withHash.match(/^#([0-9a-fA-F]{3})$/);\r\n if (shortRgbMatch) {\r\n const expanded = shortRgbMatch[1].split('').map((char) => char.repeat(2)).join('').toUpperCase();\r\n return { hex6: `#${expanded}`, alpha: DEFAULT_ALPHA };\r\n }\r\n\r\n const longRgbMatch = withHash.match(/^#([0-9a-fA-F]{6})$/);\r\n if (longRgbMatch) {\r\n return { hex6: `#${longRgbMatch[1].toUpperCase()}`, alpha: DEFAULT_ALPHA };\r\n }\r\n\r\n const shortRgbaMatch = withHash.match(/^#([0-9a-fA-F]{4})$/);\r\n if (shortRgbaMatch) {\r\n const expanded = shortRgbaMatch[1].split('').map((char) => char.repeat(2)).join('').toUpperCase();\r\n return {\r\n hex6: `#${expanded.slice(0, 6)}`,\r\n alpha: Number.parseInt(expanded.slice(6, 8), 16),\r\n };\r\n }\r\n\r\n const longRgbaMatch = withHash.match(/^#([0-9a-fA-F]{8})$/);\r\n if (longRgbaMatch) {\r\n const expanded = longRgbaMatch[1].toUpperCase();\r\n return {\r\n hex6: `#${expanded.slice(0, 6)}`,\r\n alpha: Number.parseInt(expanded.slice(6, 8), 16),\r\n };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst formatColor = (parsedColor, allowAlpha = false) => {\r\n if (!parsedColor) {\r\n return '';\r\n }\r\n\r\n if (!allowAlpha) {\r\n return parsedColor.hex6;\r\n }\r\n\r\n return `${parsedColor.hex6}${parsedColor.alpha.toString(16).padStart(2, '0').toUpperCase()}`;\r\n};\r\n\r\nconst normalizeModelValue = (value, allowAlpha = false) => {\r\n const parsed = parseHexColor(value);\r\n if (!parsed) {\r\n return '';\r\n }\r\n\r\n return formatColor({\r\n hex6: parsed.hex6,\r\n alpha: allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, allowAlpha);\r\n};\r\n\r\nconst hexToRgb = (hex6) => {\r\n const normalized = hex6.replace('#', '');\r\n return {\r\n red: Number.parseInt(normalized.slice(0, 2), 16),\r\n green: Number.parseInt(normalized.slice(2, 4), 16),\r\n blue: Number.parseInt(normalized.slice(4, 6), 16),\r\n };\r\n};\r\n\r\nconst rgbToHex = ({ red, green, blue }) => {\r\n const toHex = (value) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, '0').toUpperCase();\r\n return `#${toHex(red)}${toHex(green)}${toHex(blue)}`;\r\n};\r\n\r\nconst rgbToHsv = ({ red, green, blue }) => {\r\n const r = red / 255;\r\n const g = green / 255;\r\n const b = blue / 255;\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const delta = max - min;\r\n\r\n let nextHue = hue.value;\r\n\r\n if (delta !== 0) {\r\n if (max === r) {\r\n nextHue = 60 * (((g - b) / delta) % 6);\r\n } else if (max === g) {\r\n nextHue = 60 * (((b - r) / delta) + 2);\r\n } else {\r\n nextHue = 60 * (((r - g) / delta) + 4);\r\n }\r\n }\r\n\r\n if (nextHue < 0) {\r\n nextHue += 360;\r\n }\r\n\r\n const nextSaturation = max === 0 ? 0 : (delta / max) * 100;\r\n const nextBrightness = max * 100;\r\n\r\n return {\r\n hue: clamp(nextHue, 0, 360),\r\n saturation: clamp(nextSaturation, 0, 100),\r\n brightness: clamp(nextBrightness, 0, 100),\r\n };\r\n};\r\n\r\nconst hsvToRgb = ({ hue: colorHue, saturation: colorSaturation, brightness: colorBrightness }) => {\r\n const h = ((colorHue % 360) + 360) % 360;\r\n const s = clamp(colorSaturation, 0, 100) / 100;\r\n const v = clamp(colorBrightness, 0, 100) / 100;\r\n\r\n const chroma = v * s;\r\n const x = chroma * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const match = v - chroma;\r\n\r\n let rPrime = 0;\r\n let gPrime = 0;\r\n let bPrime = 0;\r\n\r\n if (h < 60) {\r\n rPrime = chroma;\r\n gPrime = x;\r\n } else if (h < 120) {\r\n rPrime = x;\r\n gPrime = chroma;\r\n } else if (h < 180) {\r\n gPrime = chroma;\r\n bPrime = x;\r\n } else if (h < 240) {\r\n gPrime = x;\r\n bPrime = chroma;\r\n } else if (h < 300) {\r\n rPrime = x;\r\n bPrime = chroma;\r\n } else {\r\n rPrime = chroma;\r\n bPrime = x;\r\n }\r\n\r\n return {\r\n red: Math.round((rPrime + match) * 255),\r\n green: Math.round((gPrime + match) * 255),\r\n blue: Math.round((bPrime + match) * 255),\r\n };\r\n};\r\n\r\nconst alphaPercentFromByte = (value) => Math.round(clamp(value, 0, 255) * 100 / 255);\r\nconst alphaByteFromPercent = (value) => Math.round(clamp(Number(value) || 0, 0, 100) * 255 / 100);\r\n\r\nconst currentRgb = computed(() => hsvToRgb({\r\n hue: hue.value,\r\n saturation: saturation.value,\r\n brightness: brightness.value,\r\n}));\r\n\r\nconst currentColor = computed(() => ({\r\n hex6: rgbToHex(currentRgb.value),\r\n alpha: clamp(alpha.value, 0, 255),\r\n}));\r\n\r\nconst normalizedValue = computed(() => normalizeModelValue(props.modelValue, props.allowAlpha));\r\nconst emittedValue = computed(() => formatColor(currentColor.value, props.allowAlpha));\r\nconst opacityPercent = computed(() => alphaPercentFromByte(alpha.value));\r\nconst swatchColor = computed(() => {\r\n const { red, green, blue } = currentRgb.value;\r\n return `rgba(${red}, ${green}, ${blue}, ${clamp(alpha.value / 255, 0, 1)})`;\r\n});\r\nconst hueColor = computed(() => rgbToHex(hsvToRgb({ hue: hue.value, saturation: 100, brightness: 100 })));\r\nconst isRainbowVariant = computed(() => props.variant === 'rainbow');\r\nconst alphaGradient = computed(() => {\r\n const { red, green, blue } = currentRgb.value;\r\n return `linear-gradient(90deg, rgba(${red}, ${green}, ${blue}, 0) 0%, rgba(${red}, ${green}, ${blue}, 1) 100%)`;\r\n});\r\nconst saturationHandleStyle = computed(() => ({\r\n left: `${isRainbowVariant.value ? (hue.value / 360) * 100 : saturation.value}%`,\r\n top: `${isRainbowVariant.value\r\n ? (brightness.value >= 100\r\n ? saturation.value / 2\r\n : 50 + ((100 - brightness.value) / 2))\r\n : (100 - brightness.value)}%`,\r\n}));\r\nconst saturationAreaStyle = computed(() => (\r\n isRainbowVariant.value\r\n ? {\r\n background:\r\n 'linear-gradient(90deg, #ff0000 0%, #ffff00 16.66%, #00ff00 33.33%, #00ffff 50%, #0000ff 66.66%, #ff00ff 83.33%, #ff0000 100%)',\r\n }\r\n : {\r\n backgroundColor: hueColor.value,\r\n }\r\n));\r\nconst saturationAreaLabel = computed(() => (\r\n isRainbowVariant.value\r\n ? t('Rainbow color area for {color}', { color: emittedValue.value })\r\n : t('Saturation and brightness for {color}', { color: emittedValue.value })\r\n));\r\n\r\nconst fieldId = computed(() => {\r\n const id = attrs.id;\r\n return typeof id === 'string' && id !== '' ? id : undefined;\r\n});\r\n\r\nconst fieldName = computed(() => {\r\n const name = attrs.name;\r\n return typeof name === 'string' && name !== '' ? name : undefined;\r\n});\r\n\r\nconst triggerAttrs = computed(() => {\r\n const {\r\n class: _class,\r\n name: _name,\r\n autofocus: _autofocus,\r\n required: _required,\r\n placeholder: _placeholder,\r\n maxlength: _maxlength,\r\n ...rest\r\n } = attrs;\r\n\r\n return {\r\n ...rest,\r\n id: fieldId.value,\r\n };\r\n});\r\n\r\nconst triggerClasses = computed(() => [\r\n 'group flex h-[48px] w-full items-center gap-3 rounded-lg border border-neutral-200 bg-white px-3 py-3 text-left text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10',\r\n attrs.class,\r\n props.disabled ? props.disabledClass : '',\r\n props.ui.trigger,\r\n]);\r\n\r\nconst hiddenInputRequired = computed(() => Boolean(attrs.required) && !props.disabled);\r\nconst hexInputPlaceholder = computed(() => (props.allowAlpha ? '#RRGGBBAA' : '#RRGGBB'));\r\nconst canUseEyeDropper = computed(() => supportsEyeDropper.value && !props.disabled);\r\nconst normalizedVariant = computed(() => (isRainbowVariant.value ? 'rainbow' : 'classic'));\r\n\r\nconst syncFromNormalizedValue = (value) => {\r\n const parsed = parseHexColor(value) ?? { hex6: DEFAULT_HEX, alpha: DEFAULT_ALPHA };\r\n const rgb = hexToRgb(parsed.hex6);\r\n const hsv = rgbToHsv(rgb);\r\n\r\n hue.value = hsv.hue;\r\n saturation.value = hsv.saturation;\r\n brightness.value = hsv.brightness;\r\n alpha.value = props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA;\r\n displayValue.value = formatColor({\r\n hex6: parsed.hex6,\r\n alpha: props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n};\r\n\r\nconst emitCurrentColor = () => {\r\n displayValue.value = emittedValue.value;\r\n lastEmittedValue.value = emittedValue.value;\r\n emit('update:modelValue', emittedValue.value);\r\n};\r\n\r\nwatch([normalizedValue, () => props.allowAlpha, normalizedVariant], ([nextValue, allowAlpha, variant], [, previousAllowAlpha, previousVariant]) => {\r\n if (allowAlpha === previousAllowAlpha && nextValue === lastEmittedValue.value) {\r\n displayValue.value = nextValue;\r\n lastEmittedValue.value = '';\r\n return;\r\n }\r\n\r\n if (variant !== previousVariant) {\r\n lastEmittedValue.value = '';\r\n }\r\n\r\n lastEmittedValue.value = '';\r\n syncFromNormalizedValue(nextValue);\r\n});\r\n\r\nconst updatePanelPosition = () => {\r\n if (!triggerRef.value || !panelRef.value) {\r\n return;\r\n }\r\n\r\n const rect = triggerRef.value.getBoundingClientRect();\r\n const panelWidth = panelRef.value.offsetWidth || PICKER_PANEL_WIDTH;\r\n const panelHeight = panelRef.value.offsetHeight || 0;\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n let left = rect.left;\r\n if (left + panelWidth > viewportWidth - PICKER_PANEL_GAP) {\r\n left = viewportWidth - panelWidth - PICKER_PANEL_GAP;\r\n }\r\n left = Math.max(PICKER_PANEL_GAP, left);\r\n\r\n const spaceBelow = viewportHeight - rect.bottom - PICKER_PANEL_GAP;\r\n const spaceAbove = rect.top - PICKER_PANEL_GAP;\r\n const openUpward = spaceBelow < panelHeight && spaceAbove > spaceBelow;\r\n\r\n panelStyle.value = {\r\n position: 'fixed',\r\n left: `${left}px`,\r\n ...(openUpward\r\n ? { bottom: `${viewportHeight - rect.top + PICKER_PANEL_GAP}px` }\r\n : { top: `${rect.bottom + PICKER_PANEL_GAP}px` }),\r\n width: `${panelWidth}px`,\r\n zIndex: '9999',\r\n visibility: panelStyle.value.visibility,\r\n };\r\n};\r\n\r\nconst revealPanel = async () => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n if (revealFrame !== null) {\r\n cancelAnimationFrame(revealFrame);\r\n revealFrame = null;\r\n }\r\n\r\n panelStyle.value = {\r\n ...panelStyle.value,\r\n visibility: 'hidden',\r\n };\r\n\r\n await nextTick();\r\n updatePanelPosition();\r\n\r\n revealFrame = requestAnimationFrame(() => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n panelStyle.value = {\r\n ...panelStyle.value,\r\n visibility: 'visible',\r\n };\r\n });\r\n};\r\n\r\nconst closePanel = () => {\r\n isOpen.value = false;\r\n};\r\n\r\nconst togglePanel = async () => {\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n isOpen.value = !isOpen.value;\r\n\r\n if (isOpen.value) {\r\n displayValue.value = emittedValue.value;\r\n await revealPanel();\r\n await nextTick();\r\n hexInputRef.value?.focus();\r\n hexInputRef.value?.select();\r\n }\r\n};\r\n\r\nconst closeOnOutsidePointer = (event) => {\r\n if (!isOpen.value) {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (triggerRef.value?.contains(target) || panelRef.value?.contains(target)) {\r\n return;\r\n }\r\n\r\n closePanel();\r\n};\r\n\r\nconst closeOnEscape = (event) => {\r\n if (event.key === 'Escape' && isOpen.value) {\r\n closePanel();\r\n triggerRef.value?.focus();\r\n }\r\n};\r\n\r\nconst handleViewportChange = () => {\r\n if (isOpen.value) {\r\n updatePanelPosition();\r\n }\r\n};\r\n\r\nconst beginDrag = (event, updateFromPointer) => {\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n updateFromPointer(event);\r\n\r\n const handleMove = (moveEvent) => updateFromPointer(moveEvent);\r\n const handleUp = () => {\r\n window.removeEventListener('pointermove', handleMove);\r\n window.removeEventListener('pointerup', handleUp);\r\n dragCleanup = null;\r\n };\r\n\r\n window.addEventListener('pointermove', handleMove);\r\n window.addEventListener('pointerup', handleUp, { once: true });\r\n dragCleanup = handleUp;\r\n};\r\n\r\nconst updateFromSaturationPointer = (event) => {\r\n if (!saturationRef.value) {\r\n return;\r\n }\r\n\r\n const rect = saturationRef.value.getBoundingClientRect();\r\n const xPercent = clamp(((event.clientX - rect.left) / rect.width) * 100, 0, 100);\r\n const yPercent = clamp(((event.clientY - rect.top) / rect.height) * 100, 0, 100);\r\n\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp((xPercent / 100) * 360, 0, 360);\r\n\r\n if (yPercent <= 50) {\r\n saturation.value = clamp((yPercent / 50) * 100, 0, 100);\r\n brightness.value = 100;\r\n } else {\r\n saturation.value = 100;\r\n brightness.value = clamp(100 - (((yPercent - 50) / 50) * 100), 0, 100);\r\n }\r\n } else {\r\n saturation.value = xPercent;\r\n brightness.value = clamp(100 - yPercent, 0, 100);\r\n }\r\n\r\n emitCurrentColor();\r\n};\r\n\r\nconst updateFromSaturationKey = (event) => {\r\n const step = event.shiftKey ? 10 : 2;\r\n\r\n if (event.key === 'ArrowLeft') {\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp(hue.value - (step * 3.6), 0, 360);\r\n } else {\r\n saturation.value = clamp(saturation.value - step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowRight') {\r\n if (isRainbowVariant.value) {\r\n hue.value = clamp(hue.value + (step * 3.6), 0, 360);\r\n } else {\r\n saturation.value = clamp(saturation.value + step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (isRainbowVariant.value) {\r\n if (brightness.value < 100) {\r\n brightness.value = clamp(brightness.value + step, 0, 100);\r\n } else {\r\n saturation.value = clamp(saturation.value - step, 0, 100);\r\n }\r\n } else {\r\n brightness.value = clamp(brightness.value + step, 0, 100);\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (isRainbowVariant.value) {\r\n if (saturation.value < 100 || brightness.value === 100) {\r\n saturation.value = clamp(saturation.value + step, 0, 100);\r\n } else {\r\n brightness.value = clamp(brightness.value - step, 0, 100);\r\n }\r\n } else {\r\n brightness.value = clamp(brightness.value - step, 0, 100);\r\n }\r\n } else {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleHueInput = (event) => {\r\n hue.value = clamp(Number(event.target?.value ?? hue.value) || 0, 0, 360);\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleAlphaInput = (event) => {\r\n alpha.value = alphaByteFromPercent(event.target?.value ?? opacityPercent.value);\r\n emitCurrentColor();\r\n};\r\n\r\nconst handleHexInput = (event) => {\r\n const nextValue = String(event.target?.value ?? '');\r\n displayValue.value = nextValue;\r\n\r\n const parsed = parseHexColor(nextValue);\r\n if (!parsed) {\r\n return;\r\n }\r\n\r\n const normalized = formatColor({\r\n hex6: parsed.hex6,\r\n alpha: props.allowAlpha ? parsed.alpha : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n\r\n syncFromNormalizedValue(normalized);\r\n lastEmittedValue.value = normalized;\r\n emit('update:modelValue', normalized);\r\n};\r\n\r\nconst handleHexBlur = (event) => {\r\n displayValue.value = emittedValue.value;\r\n emit('blur', event);\r\n};\r\n\r\nconst pickFromScreen = async () => {\r\n if (!canUseEyeDropper.value) {\r\n return;\r\n }\r\n\r\n try {\r\n const eyeDropper = new window.EyeDropper();\r\n const result = await eyeDropper.open();\r\n const picked = parseHexColor(result?.sRGBHex);\r\n\r\n if (!picked) {\r\n return;\r\n }\r\n\r\n const normalized = formatColor({\r\n hex6: picked.hex6,\r\n alpha: props.allowAlpha ? alpha.value : DEFAULT_ALPHA,\r\n }, props.allowAlpha);\r\n\r\n syncFromNormalizedValue(normalized);\r\n lastEmittedValue.value = normalized;\r\n emit('update:modelValue', normalized);\r\n } catch (error) {\r\n if (error?.name !== 'AbortError') {\r\n console.error('EyeDropper failed', error);\r\n }\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n supportsEyeDropper.value = typeof window !== 'undefined' && 'EyeDropper' in window;\r\n syncFromNormalizedValue(normalizedValue.value);\r\n\r\n if (attrs.autofocus !== undefined) {\r\n triggerRef.value?.focus();\r\n }\r\n\r\n document.addEventListener('pointerdown', closeOnOutsidePointer, true);\r\n document.addEventListener('keydown', closeOnEscape);\r\n window.addEventListener('resize', handleViewportChange);\r\n window.addEventListener('scroll', handleViewportChange, true);\r\n});\r\n\r\nonUnmounted(() => {\r\n if (revealFrame !== null) {\r\n cancelAnimationFrame(revealFrame);\r\n }\r\n\r\n dragCleanup?.();\r\n document.removeEventListener('pointerdown', closeOnOutsidePointer, true);\r\n document.removeEventListener('keydown', closeOnEscape);\r\n window.removeEventListener('resize', handleViewportChange);\r\n window.removeEventListener('scroll', handleViewportChange, true);\r\n});\r\n\r\nwatch(isOpen, (open) => {\r\n if (open) {\r\n revealPanel();\r\n }\r\n});\r\n\r\ndefineExpose({ focus: () => triggerRef.value?.focus() });\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['relative w-full', props.ui.root]\">\r\n <input\r\n v-if=\"fieldName\"\r\n type=\"hidden\"\r\n :name=\"fieldName\"\r\n :value=\"emittedValue\"\r\n :disabled=\"props.disabled\"\r\n :required=\"hiddenInputRequired\"\r\n >\r\n\r\n <button\r\n ref=\"triggerRef\"\r\n v-bind=\"triggerAttrs\"\r\n type=\"button\"\r\n :class=\"triggerClasses\"\r\n :disabled=\"props.disabled\"\r\n :aria-expanded=\"isOpen\"\r\n aria-haspopup=\"dialog\"\r\n @click=\"togglePanel\"\r\n >\r\n <span :class=\"['color-picker-checker relative inline-flex size-10 shrink-0 overflow-hidden rounded-lg border border-neutral-200 dark:border-neutral-700', props.ui.swatch]\">\r\n <span class=\"absolute inset-0\" :style=\"{ backgroundColor: swatchColor }\" />\r\n </span>\r\n <span class=\"min-w-0 flex-1\">\r\n <span :class=\"['block text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Color') }}</span>\r\n <span :class=\"['block truncate font-mono text-sm text-neutral-900 dark:text-neutral-50', props.ui.value]\">{{ emittedValue }}</span>\r\n </span>\r\n <ChevronDownIcon :class=\"['size-4 shrink-0 text-neutral-400 transition-transform dark:text-neutral-500', isOpen ? 'rotate-180' : '', props.ui.chevron]\" />\r\n </button>\r\n\r\n <Teleport to=\"body\">\r\n <transition\r\n enter-active-class=\"transition duration-150 ease-out\"\r\n enter-from-class=\"opacity-0 translate-y-1\"\r\n enter-to-class=\"opacity-100 translate-y-0\"\r\n leave-active-class=\"transition duration-100 ease-in\"\r\n leave-from-class=\"opacity-100 translate-y-0\"\r\n leave-to-class=\"opacity-0 translate-y-1\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"panelRef\"\r\n :class=\"['z-50', props.ui.panelRoot]\"\r\n :style=\"panelStyle\"\r\n >\r\n <div :class=\"['rounded-2xl border border-neutral-200 bg-white/96 p-4 shadow-2xl shadow-neutral-950/12 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/96 dark:shadow-black/30', props.ui.panel]\">\r\n <div class=\"flex items-start gap-3\">\r\n <div :class=\"['color-picker-checker relative size-14 shrink-0 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700', props.ui.previewSwatch]\">\r\n <span class=\"absolute inset-0\" :style=\"{ backgroundColor: swatchColor }\" />\r\n </div>\r\n <div class=\"min-w-0 flex-1\">\r\n <p :class=\"['text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Selected color') }}</p>\r\n <p :class=\"['truncate font-mono text-base text-neutral-900 dark:text-neutral-50', props.ui.value]\">{{ emittedValue }}</p>\r\n </div>\r\n <button\r\n v-if=\"supportsEyeDropper\"\r\n type=\"button\"\r\n :class=\"['inline-flex size-10 items-center justify-center rounded-xl border border-neutral-200 text-neutral-600 transition-colors hover:bg-neutral-100 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-900 dark:focus:ring-neutral-100/10', props.disabled ? 'cursor-not-allowed opacity-50' : '', props.ui.eyedropperButton]\"\r\n :disabled=\"props.disabled\"\r\n :aria-label=\"t('Pick color from screen')\"\r\n @click=\"pickFromScreen\"\r\n >\r\n <EyeDropperIcon class=\"size-5\" />\r\n </button>\r\n </div>\r\n\r\n <div class=\"mt-4 space-y-4\">\r\n <div\r\n ref=\"saturationRef\"\r\n :class=\"['relative h-48 cursor-crosshair overflow-hidden rounded-2xl border border-neutral-200 dark:border-neutral-800', props.ui.saturationArea]\"\r\n :style=\"saturationAreaStyle\"\r\n tabindex=\"0\"\r\n role=\"slider\"\r\n :aria-label=\"saturationAreaLabel\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"100\"\r\n :aria-valuenow=\"Math.round(saturation)\"\r\n @pointerdown=\"beginDrag($event, updateFromSaturationPointer)\"\r\n @keydown=\"updateFromSaturationKey\"\r\n >\r\n <div v-if=\"!isRainbowVariant\" class=\"absolute inset-0 bg-[linear-gradient(to_right,#fff,transparent)]\" />\r\n <template v-if=\"isRainbowVariant\">\r\n <div class=\"absolute inset-x-0 top-0 h-1/2 bg-[linear-gradient(to_bottom,#fff,transparent)]\" />\r\n <div class=\"absolute inset-x-0 bottom-0 h-1/2 bg-[linear-gradient(to_bottom,transparent,#000)]\" />\r\n </template>\r\n <div v-else class=\"absolute inset-0 bg-[linear-gradient(to_top,#000,transparent)]\" />\r\n <span\r\n :class=\"['pointer-events-none absolute size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.3)]', props.ui.saturationHandle]\"\r\n :style=\"saturationHandleStyle\"\r\n />\r\n </div>\r\n\r\n <div class=\"space-y-3\">\r\n <div v-if=\"!isRainbowVariant\" class=\"space-y-2\">\r\n <div :class=\"['flex items-center justify-between text-xs font-medium text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">\r\n <label :for=\"fieldId ? `${fieldId}-hue` : undefined\">{{ t('Hue') }}</label>\r\n <span>{{ Math.round(hue) }}°</span>\r\n </div>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-hue` : undefined\"\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"360\"\r\n step=\"1\"\r\n :class=\"['color-picker-range', props.ui.range]\"\r\n :disabled=\"props.disabled\"\r\n :value=\"hue\"\r\n style=\"background: linear-gradient(90deg, #FF0000 0%, #FFFF00 17%, #00FF00 33%, #00FFFF 50%, #0000FF 67%, #FF00FF 83%, #FF0000 100%);\"\r\n @input=\"handleHueInput\"\r\n >\r\n </div>\r\n\r\n <div v-if=\"props.allowAlpha\" class=\"space-y-2\">\r\n <div :class=\"['flex items-center justify-between text-xs font-medium text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">\r\n <label :for=\"fieldId ? `${fieldId}-alpha` : undefined\">{{ t('Opacity') }}</label>\r\n <span>{{ opacityPercent }}%</span>\r\n </div>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-alpha` : undefined\"\r\n type=\"range\"\r\n min=\"0\"\r\n max=\"100\"\r\n step=\"1\"\r\n :class=\"['color-picker-range', props.ui.range]\"\r\n :disabled=\"props.disabled\"\r\n :value=\"opacityPercent\"\r\n :style=\"{ background: alphaGradient }\"\r\n @input=\"handleAlphaInput\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"space-y-2\">\r\n <label :for=\"fieldId ? `${fieldId}-hex` : undefined\" :class=\"['text-xs font-medium uppercase tracking-[0.16em] text-neutral-500 dark:text-neutral-400', props.ui.sectionLabel]\">{{ t('Hex value') }}</label>\r\n <input\r\n :id=\"fieldId ? `${fieldId}-hex` : undefined\"\r\n ref=\"hexInputRef\"\r\n type=\"text\"\r\n inputmode=\"text\"\r\n spellcheck=\"false\"\r\n autocapitalize=\"characters\"\r\n :maxlength=\"props.allowAlpha ? 9 : 7\"\r\n :placeholder=\"hexInputPlaceholder\"\r\n :class=\"['w-full rounded-xl border border-neutral-200 bg-white px-3 py-2.5 font-mono text-sm text-neutral-950 shadow-sm outline-none transition-colors focus:border-neutral-900 focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10', props.ui.hexInput]\"\r\n :value=\"displayValue\"\r\n :disabled=\"props.disabled\"\r\n @input=\"handleHexInput\"\r\n @blur=\"handleHexBlur\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.color-picker-checker {\r\n background-image:\r\n linear-gradient(45deg, rgb(255 255 255 / 0.85) 25%, transparent 25%, transparent 75%, rgb(255 255 255 / 0.85) 75%, rgb(255 255 255 / 0.85)),\r\n linear-gradient(45deg, rgb(255 255 255 / 0.85) 25%, transparent 25%, transparent 75%, rgb(255 255 255 / 0.85) 75%, rgb(255 255 255 / 0.85));\r\n background-position: 0 0, 6px 6px;\r\n background-size: 12px 12px;\r\n}\r\n\r\n.dark .color-picker-checker {\r\n background-image:\r\n linear-gradient(45deg, rgb(38 38 38 / 0.9) 25%, transparent 25%, transparent 75%, rgb(38 38 38 / 0.9) 75%, rgb(38 38 38 / 0.9)),\r\n linear-gradient(45deg, rgb(64 64 64 / 0.9) 25%, transparent 25%, transparent 75%, rgb(64 64 64 / 0.9) 75%, rgb(64 64 64 / 0.9));\r\n}\r\n\r\n.color-picker-range {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 100%;\r\n height: 12px;\r\n border-radius: 9999px;\r\n cursor: pointer;\r\n border: 1px solid rgb(229 229 229);\r\n outline: none;\r\n}\r\n\r\n.color-picker-range::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 9999px;\r\n border: 2px solid rgb(255 255 255);\r\n background: rgb(23 23 23);\r\n box-shadow: 0 1px 4px rgb(0 0 0 / 0.18);\r\n}\r\n\r\n.color-picker-range::-moz-range-thumb {\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 9999px;\r\n border: 2px solid rgb(255 255 255);\r\n background: rgb(23 23 23);\r\n box-shadow: 0 1px 4px rgb(0 0 0 / 0.18);\r\n}\r\n\r\n.dark .color-picker-range {\r\n border-color: rgb(38 38 38);\r\n}\r\n\r\n.dark .color-picker-range::-webkit-slider-thumb {\r\n background: rgb(250 250 250);\r\n border-color: rgb(23 23 23);\r\n}\r\n\r\n.dark .color-picker-range::-moz-range-thumb {\r\n background: rgb(250 250 250);\r\n border-color: rgb(23 23 23);\r\n}\r\n</style>\r\n","<script setup>\nimport { computed, useAttrs, useSlots } from \"vue\";\nimport { ExclamationCircleIcon } from \"@heroicons/vue/24/outline\";\r\nimport TextInput from \"./TextInput.vue\";\r\nimport TextArea from \"./TextArea.vue\";\r\nimport SelectInput from \"./SelectInput.vue\";\r\nimport DateInput from \"./DateInput.vue\";\r\nimport DateRangeInput from \"./DateRangeInput.vue\";\r\nimport ImageInput from \"./ImageInput.vue\";\r\nimport NotationInput from \"./NotationInput.vue\";\r\nimport CheckboxInput from \"./CheckboxInput.vue\";\r\nimport RadioInput from \"./RadioInput.vue\";\r\nimport ToggleInput from \"./ToggleInput.vue\";\r\nimport CheckboxMultipleInput from \"./CheckboxMultipleInput.vue\";\r\nimport RadioMultipleInput from \"./RadioMultipleInput.vue\";\r\nimport TinyEditor from \"./TinyEditor.vue\";\r\nimport ColorPicker from \"./ColorPicker.vue\";\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = defineProps({\n type: {\r\n type: String,\r\n required: true,\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n helperText: {\r\n type: String,\r\n default: \"\",\r\n },\r\n name: {\r\n type: String,\r\n default: undefined,\r\n },\r\n errorMessage: {\r\n type: String,\r\n default: \"\",\r\n },\r\n modelValue: {\r\n type: [String, Number, Boolean, Array, null],\r\n default: \"\",\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n disabledClass: {\r\n type: String,\r\n default:\r\n \"!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500\",\r\n },\r\n modelModifiers: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n withTimestamp: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n placeholder: {\r\n type: String,\r\n default: \"\",\r\n },\r\n placeholderDisabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n softDeleteAware: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labelKey: {\r\n type: String,\r\n default: \"name\",\r\n },\r\n valueKey: {\r\n type: String,\r\n default: \"id\",\r\n },\r\n deletedKey: {\r\n type: String,\r\n default: \"deleted_at\",\r\n },\r\n optionLabel: {\r\n type: Function,\r\n default: null,\r\n },\r\n baseClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n normalTextClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n deletedSelectedClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n optionClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n deletedOptionClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n placeholderClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n accept: {\r\n type: String,\r\n default: undefined,\r\n },\r\n currentImageUrl: {\r\n type: String,\r\n default: \"\",\r\n },\r\n currentLabel: {\r\n type: String,\r\n default: \"Current logo\",\r\n },\r\n currentSubtext: {\r\n type: String,\r\n default: \"Upload a new logo to replace this one\",\r\n },\r\n height: {\r\n type: Number,\r\n default: 300,\r\n },\r\n menubar: {\r\n type: [Boolean, String],\r\n default: false,\r\n },\r\n toolbar: {\r\n type: [String, Array],\r\n default: undefined,\r\n },\r\n plugins: {\r\n type: [String, Array],\r\n default: undefined,\r\n },\r\n init: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n licenseKey: {\r\n type: String,\r\n default: \"gpl\",\r\n },\r\n outputFormat: {\r\n type: String,\r\n default: \"html\",\r\n },\r\n min: {\r\n type: String,\r\n default: \"\",\r\n },\r\n max: {\r\n type: String,\r\n default: \"\",\r\n },\r\n minDays: {\r\n type: Number,\r\n default: 0,\r\n },\r\n maxDays: {\r\n type: Number,\r\n default: null,\r\n },\r\n startLabel: {\r\n type: String,\r\n default: \"Start Date\",\r\n },\r\n endLabel: {\r\n type: String,\r\n default: \"End Date\",\r\n },\r\n locale: {\r\n type: String,\r\n default: \"en\",\r\n },\r\n allowAlpha: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n variant: {\r\n type: String,\r\n default: \"classic\",\r\n },\r\n searchable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n searchPlaceholder: {\r\n type: String,\r\n default: \"Search...\",\r\n },\r\n searchInputClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n dropdownHighlightedClass: {\r\n type: [String, Array, Object],\r\n default: undefined,\r\n },\r\n noOptionsText: {\n type: String,\n default: undefined,\n },\n rootClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n labelClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n helperTextClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n errorTextClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n leadingIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n trailingIconClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"blur\"]);\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst defaultFieldClass =\n \"block w-full rounded-lg border border-neutral-200 bg-white px-4 py-3 text-sm text-neutral-950 placeholder:text-neutral-400 shadow-sm transition-all duration-200 focus:border-neutral-900 focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:ring-neutral-100/10\";\nconst defaultLabelClass =\n \"mb-1 block text-base font-semibold text-gray-900 dark:text-gray-50\";\nconst defaultHelperTextClass = \"mb-1 block text-xs text-gray-500\";\nconst defaultErrorClass = \"mt-2 flex items-center text-sm text-red-600\";\nconst defaultErrorIconClass = \"mr-1 h-4 w-4 flex-shrink-0\";\nconst updateValue = (value) => emit(\"update:modelValue\", value);\nconst onUpdateModelValue = (value) => emit(\"update:modelValue\", value);\nconst onBlur = (event) => emit(\"blur\", event);\nconst fieldListeners = {\n \"update:modelValue\": onUpdateModelValue,\n blur: onBlur,\n};\nconst hasLeadingIconSlot = computed(() => Boolean(slots[\"leading-icon\"]));\nconst hasTrailingIconSlot = computed(() => Boolean(slots[\"trailing-icon\"]));\n\r\nconst hasError = computed(() => Boolean(props.errorMessage));\r\nconst showsInlineChoiceControl = computed(\r\n () =>\r\n isCheckboxSingleType.value ||\r\n isRadioSingleType.value ||\r\n isToggleSingleType.value,\r\n);\r\n\r\nconst fieldId = computed(() => {\r\n const id = attrs.id;\r\n return typeof id === \"string\" && id !== \"\" ? id : undefined;\r\n});\r\n\r\nconst textLikeTypes = [\r\n \"text\",\r\n \"email\",\r\n \"password\",\r\n \"number\",\r\n \"time\",\r\n \"url\",\r\n \"tel\",\r\n \"search\",\r\n \"month\",\r\n \"week\",\r\n];\r\n\r\nconst noComponentTypes = [];\r\nconst isImageType = computed(() => props.type === \"image\");\r\nconst isNotationType = computed(() => props.type === \"notation\");\r\nconst isCheckboxSingleType = computed(() => props.type === \"checkbox-input\");\r\nconst isRadioSingleType = computed(() => props.type === \"radio-input\");\r\nconst isToggleSingleType = computed(() => props.type === \"toggle-input\");\r\nconst isCheckboxType = computed(() => props.type === \"checkbox\");\r\nconst isRadioType = computed(() => props.type === \"radio\");\r\nconst isDateType = computed(\r\n () => props.type === \"date\" || props.type === \"datetime-local\",\r\n);\r\nconst isDateRangeType = computed(() => props.type === \"daterange\");\r\nconst isTextareaType = computed(() => props.type === \"textarea\");\r\nconst isTinyEditorType = computed(() => props.type === \"tiny-editor\");\r\nconst isColorPickerType = computed(() => props.type === \"color\");\nconst isSelectType = computed(() => props.type === \"select\");\nconst isTextLikeType = computed(() => textLikeTypes.includes(props.type));\nconst isNoComponentType = computed(() => noComponentTypes.includes(props.type));\nconst supportsAutoDecoratedField = computed(\n () =>\n (isTextLikeType.value && props.type !== \"password\") || isDateType.value,\n);\nconst showsLeadingIcon = computed(\n () => supportsAutoDecoratedField.value && hasLeadingIconSlot.value,\n);\nconst showsTrailingIcon = computed(\n () => supportsAutoDecoratedField.value && hasTrailingIconSlot.value,\n);\nconst decoratedFieldClass = computed(() => [\n showsLeadingIcon.value ? \"pl-10\" : null,\n showsTrailingIcon.value ? \"pr-10\" : null,\n]);\n\nconst textInputBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class, decoratedFieldClass.value],\n type: props.type,\r\n name: props.name,\r\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst textAreaBindings = computed(() => ({\r\n ...attrs,\r\n class: [defaultFieldClass, attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst dateBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class, decoratedFieldClass.value],\n name: props.name,\r\n modelValue: props.modelValue,\r\n locale: props.locale,\r\n withTimestamp: props.type === \"datetime-local\" || props.withTimestamp,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst selectBindings = computed(() => {\r\n const inputProps = {\r\n ...attrs,\r\n class: [defaultFieldClass, attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n modelModifiers: props.modelModifiers,\r\n options: props.options,\r\n placeholder: props.placeholder,\r\n placeholderDisabled: props.placeholderDisabled,\r\n multiple: props.multiple,\r\n disabled: props.disabled,\r\n softDeleteAware: props.softDeleteAware,\r\n labelKey: props.labelKey,\r\n valueKey: props.valueKey,\r\n deletedKey: props.deletedKey,\n optionLabel: props.optionLabel,\n ui: props.ui,\n };\n\r\n if (props.baseClass !== undefined) inputProps.baseClass = props.baseClass;\r\n if (props.normalTextClass !== undefined)\r\n inputProps.normalTextClass = props.normalTextClass;\r\n if (props.deletedSelectedClass !== undefined)\r\n inputProps.deletedSelectedClass = props.deletedSelectedClass;\r\n if (props.optionClass !== undefined)\r\n inputProps.optionClass = props.optionClass;\r\n if (props.deletedOptionClass !== undefined)\r\n inputProps.deletedOptionClass = props.deletedOptionClass;\r\n if (props.placeholderClass !== undefined)\r\n inputProps.placeholderClass = props.placeholderClass;\r\n if (props.searchable !== undefined) inputProps.searchable = props.searchable;\r\n if (props.searchPlaceholder !== undefined)\r\n inputProps.searchPlaceholder = props.searchPlaceholder;\r\n if (props.searchInputClass !== undefined)\r\n inputProps.searchInputClass = props.searchInputClass;\r\n if (props.dropdownHighlightedClass !== undefined)\r\n inputProps.dropdownHighlightedClass = props.dropdownHighlightedClass;\r\n if (props.noOptionsText !== undefined)\r\n inputProps.noOptionsText = props.noOptionsText;\r\n\r\n return inputProps;\r\n});\r\n\r\nconst notationBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n options: props.options,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst checkboxBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n options: props.options,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst radioBindings = computed(() => ({\r\n ...attrs,\r\n modelValue: props.modelValue,\r\n options: props.options,\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst checkboxSingleBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst radioSingleBindings = computed(() => ({\r\n ...attrs,\r\n modelValue: props.modelValue,\r\n label: props.label || attrs.label || \"\",\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst toggleSingleBindings = computed(() => ({\r\n ...attrs,\r\n name: props.name,\r\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n ui: props.ui,\n}));\n\r\nconst imageBindings = computed(() => {\r\n return {\r\n ...attrs,\r\n accept: props.accept ?? attrs.accept ?? \"image/*\",\r\n modelValue: props.modelValue,\r\n currentImageUrl: props.currentImageUrl,\n currentLabel: props.currentLabel,\n currentSubtext: props.currentSubtext,\n ui: props.ui,\n };\n});\n\r\nconst tinyEditorBindings = computed(() => {\r\n const inputProps = {\r\n ...attrs,\r\n modelValue: typeof props.modelValue === \"string\" ? props.modelValue : \"\",\r\n readonly: props.disabled,\r\n height: props.height,\r\n menubar: props.menubar,\n licenseKey: props.licenseKey,\n outputFormat: props.outputFormat,\n ui: props.ui,\n };\n\r\n if (props.toolbar !== undefined) inputProps.toolbar = props.toolbar;\r\n if (props.plugins !== undefined) inputProps.plugins = props.plugins;\r\n if (props.init !== undefined) inputProps.init = props.init;\r\n\r\n return inputProps;\r\n});\r\n\r\nconst dateRangeBindings = computed(() => ({\r\n ...attrs,\r\n class: [attrs.class],\r\n name: props.name,\r\n modelValue: props.modelValue,\r\n min: props.min,\r\n max: props.max,\r\n minDays: props.minDays,\r\n maxDays: props.maxDays,\r\n startLabel: props.startLabel,\r\n endLabel: props.endLabel,\r\n locale: props.locale,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n ui: props.ui,\n}));\n\r\nconst colorPickerBindings = computed(() => ({\n ...attrs,\n class: [attrs.class],\n name: props.name,\n modelValue: typeof props.modelValue === \"string\" ? props.modelValue : \"\",\r\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n allowAlpha: props.allowAlpha,\n variant: props.variant,\n ui: props.ui,\n}));\n\nconst resolvedFieldComponent = computed(() => {\n if (isTextareaType.value) return TextArea;\n if (isTinyEditorType.value) return TinyEditor;\n if (isColorPickerType.value) return ColorPicker;\n if (isSelectType.value) return SelectInput;\n if (isDateType.value) return DateInput;\n if (isDateRangeType.value) return DateRangeInput;\n if (isTextLikeType.value) return TextInput;\n if (isImageType.value) return ImageInput;\n if (isCheckboxSingleType.value) return CheckboxInput;\n if (isRadioSingleType.value) return RadioInput;\n if (isToggleSingleType.value) return ToggleInput;\n if (isNotationType.value) return NotationInput;\n if (isCheckboxType.value) return CheckboxMultipleInput;\n if (isRadioType.value) return RadioMultipleInput;\n return null;\n});\n\nconst resolvedFieldBindings = computed(() => {\n if (isTextareaType.value) return textAreaBindings.value;\n if (isTinyEditorType.value) return tinyEditorBindings.value;\n if (isColorPickerType.value) return colorPickerBindings.value;\n if (isSelectType.value) return selectBindings.value;\n if (isDateType.value) return dateBindings.value;\n if (isDateRangeType.value) return dateRangeBindings.value;\n if (isTextLikeType.value) return textInputBindings.value;\n if (isImageType.value) return imageBindings.value;\n if (isCheckboxSingleType.value) return checkboxSingleBindings.value;\n if (isRadioSingleType.value) return radioSingleBindings.value;\n if (isToggleSingleType.value) return toggleSingleBindings.value;\n if (isNotationType.value) return notationBindings.value;\n if (isCheckboxType.value) return checkboxBindings.value;\n if (isRadioType.value) return radioBindings.value;\n return {};\n});\n</script>\n\n<template>\n <div :class=\"rootClass\">\n <slot\n name=\"wrapper\"\n :field-id=\"fieldId\"\n :label=\"label\"\n :helper-text=\"helperText\"\n :error-message=\"errorMessage\"\n :has-error=\"hasError\"\n :shows-inline-choice-control=\"showsInlineChoiceControl\"\n :field-component=\"resolvedFieldComponent\"\n :field-bindings=\"resolvedFieldBindings\"\n :field-listeners=\"fieldListeners\"\n :on-update-model-value=\"onUpdateModelValue\"\n :on-blur=\"onBlur\"\n :label-class=\"props.labelClass ?? defaultLabelClass\"\n :helper-text-class=\"props.helperTextClass ?? defaultHelperTextClass\"\n :error-class=\"props.errorClass ?? defaultErrorClass\"\n :error-icon-class=\"props.errorIconClass ?? defaultErrorIconClass\"\n :error-text-class=\"props.errorTextClass\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n >\n <slot\n v-if=\"!showsInlineChoiceControl && ($slots.label || label)\"\n name=\"label\"\n :label=\"label\"\n :for=\"fieldId\"\n :label-class=\"props.labelClass ?? defaultLabelClass\"\n >\n <label\n v-if=\"label\"\n :for=\"fieldId\"\n :class=\"props.labelClass ?? defaultLabelClass\"\n >\n {{ label }}\n </label>\n </slot>\n\n <slot\n v-if=\"helperText && !showsInlineChoiceControl\"\n name=\"helper\"\n :helper-text=\"helperText\"\n :helper-text-class=\"props.helperTextClass ?? defaultHelperTextClass\"\n >\n <span :class=\"props.helperTextClass ?? defaultHelperTextClass\">\n {{ helperText }}\n </span>\n </slot>\n\n <component\n :is=\"resolvedFieldComponent\"\n v-if=\"resolvedFieldComponent && !showsLeadingIcon && !showsTrailingIcon\"\n v-bind=\"resolvedFieldBindings\"\n v-on=\"fieldListeners\"\n />\n\n <div v-else-if=\"resolvedFieldComponent\" class=\"relative\">\n <div\n v-if=\"showsLeadingIcon\"\n :class=\"[\n 'pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-neutral-400 dark:text-neutral-200',\n props.leadingIconClass,\n ]\"\n >\n <slot name=\"leading-icon\" :type=\"type\" :field-id=\"fieldId\" />\n </div>\n\n <component\n :is=\"resolvedFieldComponent\"\n v-bind=\"resolvedFieldBindings\"\n v-on=\"fieldListeners\"\n />\n\n <div\n v-if=\"showsTrailingIcon\"\n :class=\"[\n 'pointer-events-none absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-neutral-400 dark:text-neutral-200',\n props.trailingIconClass,\n ]\"\n >\n <slot name=\"trailing-icon\" :type=\"type\" :field-id=\"fieldId\" />\n </div>\n </div>\n\n <slot\n v-else-if=\"isNoComponentType\"\n name=\"unsupported-type\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n />\n\n <slot\n v-else\n name=\"unsupported-type\"\n :type=\"type\"\n :model-value=\"modelValue\"\n :update-value=\"updateValue\"\n :attrs=\"attrs\"\n />\n\n <slot\n v-if=\"hasError\"\n name=\"error\"\n :error-message=\"errorMessage\"\n :error-class=\"props.errorClass ?? defaultErrorClass\"\n :error-icon-class=\"props.errorIconClass ?? defaultErrorIconClass\"\n :error-text-class=\"props.errorTextClass\"\n >\n <div :class=\"props.errorClass ?? defaultErrorClass\">\n <ExclamationCircleIcon\n :class=\"props.errorIconClass ?? defaultErrorIconClass\"\n />\n <span :class=\"props.errorTextClass\">{{ errorMessage }}</span>\n </div>\n </slot>\n </slot>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport InputGroup from './InputGroup.vue';\n\nconst emit = defineEmits(['update:modelValue']);\nconst props = defineProps({\n modelValue: {\n type: Array,\n default: () => [],\n },\n options: {\n type: Array,\n default: () => [],\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n ui: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst normalizedOptions = computed(() => {\n return props.options\n .map((option) => (option === null || option === undefined) ? '' : String(option).trim())\n .filter((option) => option !== '');\n});\n\nconst isChecked = (option) => {\n return Array.isArray(props.modelValue) && props.modelValue.includes(option);\n};\n\nconst updateSelection = (option, checked) => {\n const nextSelection = Array.isArray(props.modelValue) ? [...props.modelValue] : [];\n const index = nextSelection.indexOf(option);\n\n if (checked && index === -1) {\n nextSelection.push(option);\n } else if (!checked && index !== -1) {\n nextSelection.splice(index, 1);\n }\n\n emit('update:modelValue', nextSelection);\n};\n</script>\n\n<template>\n <div :class=\"['flex flex-wrap gap-3', props.ui.group]\">\n <InputGroup\n v-for=\"option in normalizedOptions\"\n :key=\"`checkbox-${option}`\"\n type=\"checkbox-input\"\n :name=\"name\"\n :model-value=\"isChecked(option)\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :label=\"option\"\n :disabled=\"disabled\"\n :ui=\"props.ui.item ?? props.ui\"\n @update:modelValue=\"(checked) => updateSelection(option, checked)\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nconst props = defineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String,\n default: 'center',\n validator: (value) => ['top', 'center', 'bottom'].includes(value),\n },\n});\n\nconst emit = defineEmits(['close']);\nconst dialog = ref();\nconst showSlot = ref(props.show);\nconst presetMaxWidthClasses = {\n 'sm': 'sm:max-w-sm',\n 'md': 'sm:max-w-md',\n 'lg': 'sm:max-w-lg',\n 'xl': 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n '5xl': 'sm:max-w-5xl',\n '6xl': 'sm:max-w-6xl',\n '7xl': 'sm:max-w-7xl',\n 'full': 'sm:max-w-full',\n};\n\nconst openModal = () => {\n document.body.style.overflow = 'hidden';\n showSlot.value = true;\n dialog.value?.showModal();\n};\n\nconst closeModal = () => {\n document.body.style.overflow = null;\n setTimeout(() => {\n dialog.value?.close();\n showSlot.value = false;\n }, 200);\n};\n\nwatch(() => props.show, () => {\n if (props.show) {\n openModal();\n } else {\n closeModal();\n }\n});\n\nonMounted(() => {\n if (props.show) {\n openModal();\n }\n});\n\nconst close = () => {\n if (props.closeable) {\n emit('close');\n }\n};\n\nconst closeOnEscape = (e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n\n if (props.show) {\n close();\n }\n }\n};\n\nonMounted(() => document.addEventListener('keydown', closeOnEscape));\n\nonUnmounted(() => {\n document.removeEventListener('keydown', closeOnEscape);\n document.body.style.overflow = null;\n});\n\nconst maxWidthClass = computed(() => {\n return presetMaxWidthClasses[props.maxWidth] ?? null;\n});\n\nconst modalWidthStyle = computed(() => {\n if (maxWidthClass.value) {\n return null;\n }\n\n return props.maxWidth ? { maxWidth: props.maxWidth } : null;\n});\n\nconst positionClasses = computed(() => {\n switch (props.position) {\n case 'top':\n return 'flex-col items-center pt-16';\n case 'bottom':\n return 'flex-col items-center justify-end pb-16';\n default:\n return 'items-center justify-center';\n }\n});\n</script>\n\n<template>\n <dialog class=\"z-50 m-0 min-h-full min-w-full overflow-y-auto bg-transparent backdrop:bg-transparent\" ref=\"dialog\">\n <div class=\"fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50 flex\" :class=\"positionClasses\">\n <transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div v-show=\"show\" class=\"fixed inset-0 z-40 transform transition-all\" @click=\"close\">\n <div class=\"absolute inset-0 bg-neutral-950/55 backdrop-blur-[2px]\" />\n </div>\n </transition>\n\n <transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-show=\"show\"\n class=\"relative z-50 mb-6 overflow-hidden rounded-lg border border-neutral-200 bg-white shadow-xl transform transition-all dark:border-neutral-800 dark:bg-neutral-950 sm:mx-auto sm:w-full\"\n :class=\"maxWidthClass\"\n :style=\"modalWidthStyle\"\n >\n <slot v-if=\"showSlot\"/>\n </div>\n </transition>\n </div>\n </dialog>\n</template>\n","<script setup>\nimport Modal from './Modal.vue';\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline';\n\nconst emit = defineEmits(['close']);\n\nconst props = defineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n position: {\n type: String,\n default: 'center',\n validator: (value) => ['top', 'center', 'bottom'].includes(value),\n },\n});\n\nconst close = () => {\n emit('close');\n};\n</script>\n\n<template>\n <Modal\n :show=\"show\"\n :max-width=\"maxWidth\"\n :closeable=\"closeable\"\n :position=\"position\"\n @close=\"close\"\n >\n <div class=\"bg-white px-4 pb-4 pt-5 dark:bg-neutral-950 sm:p-6 sm:pb-4\">\n <div class=\"sm:flex sm:items-start\">\n <div class=\"mx-auto flex size-12 shrink-0 items-center justify-center rounded-full bg-red-100 dark:bg-red-950/60 sm:mx-0 sm:size-10\">\n <ExclamationTriangleIcon class=\"size-6 text-red-600 dark:text-neutral-100\" />\n </div>\n\n <div class=\"mt-3 text-center sm:mt-0 sm:ms-4 sm:text-start\">\n <h3 class=\"text-lg font-medium text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </h3>\n\n <div class=\"mt-4 text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"content\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col-reverse gap-4 border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60 lg:flex-row lg:justify-end lg:gap-0\">\n <slot name=\"footer\" />\n </div>\n </Modal>\n</template>\n","<script setup>\nimport Modal from './Modal.vue';\n\nconst emit = defineEmits(['close']);\n\ndefineProps({\n show: {\n type: Boolean,\n default: false,\n },\n maxWidth: {\n type: String,\n default: '2xl',\n },\n closeable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst close = () => {\n emit('close');\n};\n</script>\n\n<template>\n <Modal\n :show=\"show\"\n :max-width=\"maxWidth\"\n :closeable=\"closeable\"\n @close=\"close\"\n >\n <div class=\"px-6 py-4\">\n <div class=\"text-lg font-medium text-neutral-950 dark:text-neutral-50\">\n <slot name=\"title\" />\n </div>\n\n <div class=\"mt-4 text-sm text-neutral-600 dark:text-neutral-200\">\n <slot name=\"content\" />\n </div>\n </div>\n\n <div class=\"flex flex-row justify-end border-t border-neutral-200 bg-neutral-50 px-6 py-4 text-end dark:border-neutral-800 dark:bg-neutral-900/60\">\n <slot name=\"footer\" />\n </div>\n </Modal>\n</template>\n","<script setup>\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\n\nconst props = defineProps({\n align: {\n type: String,\n default: 'right',\n },\n width: {\n type: String,\n default: '48',\n },\n contentClasses: {\n type: Array,\n default: () => ['py-1', 'bg-white', 'dark:bg-neutral-950'],\n },\n});\n\nconst open = ref(false);\nconst triggerRef = ref(null);\nconst menuRef = ref(null);\nconst menuStyle = ref({\n position: 'fixed',\n left: '0px',\n top: '0px',\n visibility: 'hidden',\n});\nconst menuOriginClass = ref('ltr:origin-top-right rtl:origin-top-left');\nlet revealFrame = null;\n\nconst closeOnEscape = (e) => {\n if (open.value && e.key === 'Escape') {\n open.value = false;\n }\n};\n\nconst closeOnOutsideClick = (event) => {\n if (!open.value) {\n return;\n }\n\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (triggerRef.value?.contains(target) || menuRef.value?.contains(target)) {\n return;\n }\n\n open.value = false;\n};\n\nconst setOriginClass = (alignRight, openUpward) => {\n const horizontal = alignRight\n ? 'ltr:origin-top-right rtl:origin-top-left'\n : 'ltr:origin-top-left rtl:origin-top-right';\n\n menuOriginClass.value = `${horizontal} ${openUpward ? 'origin-bottom' : 'origin-top'}`;\n};\n\nconst widthClass = computed(() => {\n return {\n '48': 'w-48',\n }[props.width.toString()];\n});\n\nconst alignmentClasses = computed(() => {\n return menuOriginClass.value;\n});\n\nconst updateDropdownPosition = () => {\n if (!triggerRef.value || !menuRef.value) {\n return;\n }\n\n const rect = triggerRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const menuWidth = menuRef.value.offsetWidth;\n const menuHeight = menuRef.value.offsetHeight;\n const gap = 8;\n\n const spaceLeft = rect.left - gap;\n const spaceRight = viewportWidth - rect.right - gap;\n\n let alignRight = props.align === 'right';\n\n if (alignRight && rect.right + menuWidth > viewportWidth - gap && spaceLeft > spaceRight) {\n alignRight = false;\n } else if (!alignRight && rect.left + menuWidth > viewportWidth - gap && spaceRight > spaceLeft) {\n alignRight = true;\n }\n\n let left = alignRight ? rect.right - menuWidth : rect.left;\n left = Math.max(gap, Math.min(left, viewportWidth - menuWidth - gap));\n\n const spaceBelow = viewportHeight - rect.bottom - gap;\n const spaceAbove = rect.top - gap;\n const openUpward = spaceBelow < menuHeight && spaceAbove > spaceBelow;\n\n menuStyle.value = {\n position: 'fixed',\n left: `${left}px`,\n ...(openUpward\n ? { bottom: `${viewportHeight - rect.top + gap}px` }\n : { top: `${rect.bottom + gap}px` }),\n zIndex: '9999',\n maxHeight: `${Math.max(Math.min(openUpward ? spaceAbove : spaceBelow, 320), 160)}px`,\n };\n\n setOriginClass(alignRight, openUpward);\n};\n\nconst refreshPosition = async () => {\n if (!open.value) {\n return;\n }\n\n if (revealFrame !== null) {\n cancelAnimationFrame(revealFrame);\n revealFrame = null;\n }\n\n menuStyle.value = {\n ...menuStyle.value,\n visibility: 'hidden',\n };\n\n await nextTick();\n updateDropdownPosition();\n\n revealFrame = requestAnimationFrame(() => {\n if (!open.value) {\n return;\n }\n\n menuStyle.value = {\n ...menuStyle.value,\n visibility: 'visible',\n };\n });\n};\n\nconst handleViewportChange = () => {\n if (open.value) {\n updateDropdownPosition();\n }\n};\n\nwatch(open, (value) => {\n if (value) {\n refreshPosition();\n }\n});\n\nonMounted(() => {\n document.addEventListener('keydown', closeOnEscape);\n document.addEventListener('pointerdown', closeOnOutsideClick, true);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n});\n\nonUnmounted(() => {\n if (revealFrame !== null) {\n cancelAnimationFrame(revealFrame);\n }\n\n document.removeEventListener('keydown', closeOnEscape);\n document.removeEventListener('pointerdown', closeOnOutsideClick, true);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n});\n</script>\n\n<template>\n <div class=\"relative inline-block w-fit\">\n <div ref=\"triggerRef\" @click=\"open = ! open\">\n <slot name=\"trigger\" :open=\"open\" />\n </div>\n\n <Teleport to=\"body\">\n <transition\n enter-active-class=\"transition-opacity duration-150 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-100 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"open\"\n ref=\"menuRef\"\n class=\"z-50 rounded-xl shadow-xl shadow-neutral-950/10 dark:shadow-black/30\"\n :class=\"[widthClass, alignmentClasses]\"\n :style=\"menuStyle\"\n @click=\"open = false\"\n >\n <div class=\"rounded-xl border border-neutral-200 bg-white/95 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/95\" :class=\"contentClasses\">\n <slot name=\"content\" />\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup>\nimport { Link } from '@inertiajs/vue3';\n\ndefineProps({\n href: String,\n as: String,\n});\n</script>\n\n<template>\n <div>\n <button v-if=\"as == 'button'\" type=\"submit\" class=\"block w-full px-4 py-2 text-start text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </button>\n\n <a v-else-if=\"as =='a'\" :href=\"href\" class=\"block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </a>\n\n <Link v-else :href=\"href\" class=\"block px-4 py-2 text-sm leading-5 text-neutral-700 transition duration-150 ease-in-out hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-100 dark:hover:bg-neutral-900 dark:focus:bg-neutral-900\">\n <slot />\n </Link>\n </div>\n</template>\n","<script setup>\nimport { computed, useSlots } from 'vue';\nimport SectionTitle from './SectionTitle.vue';\n\ndefineEmits(['submitted']);\n\nconst hasActions = computed(() => !! useSlots().actions);\n</script>\n\n<template>\n <div class=\"md:grid md:grid-cols-3 md:gap-6\">\n <SectionTitle>\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #description>\n <slot name=\"description\" />\n </template>\n </SectionTitle>\n\n <div class=\"mt-5 md:col-span-2 md:mt-0\">\n <form @submit.prevent=\"$emit('submitted')\">\n <div\n class=\"rounded-lg border border-neutral-200 bg-white px-4 py-5 shadow-sm dark:border-neutral-800 dark:bg-neutral-950 sm:p-6\"\n :class=\"hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md'\"\n >\n <div class=\"grid grid-cols-6 gap-6\">\n <slot name=\"form\" />\n </div>\n </div>\n\n <div v-if=\"hasActions\" class=\"flex items-center justify-start rounded-b-lg border border-t-0 border-neutral-200 bg-neutral-50 px-3 pb-6 text-end dark:border-neutral-800 dark:bg-neutral-900/60 sm:rounded-bl-md sm:rounded-br-md\">\n <slot name=\"actions\" />\n </div>\n </form>\n </div>\n </div>\n</template>\n","<script setup>\ndefineProps({\n message: String,\n});\n</script>\n\n<template>\n <div v-show=\"message\">\n <p class=\"text-sm text-red-600 dark:text-neutral-100\">\n {{ message }}\n </p>\n </div>\n</template>\n","<script setup>\ndefineProps({\n value: String,\n});\n</script>\n\n<template>\n <label class=\"block text-sm font-medium text-neutral-700 dark:text-neutral-100\">\n <span v-if=\"value\">{{ value }}</span>\n <span v-else><slot /></span>\n </label>\n</template>\n","<script setup>\ndefineOptions({\n inheritAttrs: false,\n});\n\nimport { Link } from '@inertiajs/vue3';\nimport { computed, useAttrs } from 'vue';\n\nconst attrs = useAttrs();\n\nconst props = defineProps({\n href: {\n type: String,\n required: true,\n },\n title: {\n type: String,\n default: null,\n },\n external: {\n type: Boolean,\n default: false,\n },\n target: {\n type: String,\n default: null,\n },\n rel: {\n type: String,\n default: null,\n },\n variant: {\n type: String,\n default: 'primary',\n },\n});\n\nconst variantClasses = {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n success: 'bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-600 dark:text-white dark:hover:bg-emerald-600/90',\n secondary: 'bg-neutral-300 text-neutral-900 hover:bg-neutral-300/80 dark:bg-gray-500 dark:text-gray-50 dark:hover:bg-gray-500/80',\n tertiary: 'border border-neutral-200 bg-white text-neutral-900 shadow-xs hover:bg-neutral-50 dark:border-neutral-200 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-100',\n warning: 'bg-amber-100 text-amber-700 hover:bg-amber-100/90 focus-visible:ring-amber-500/20 dark:bg-amber-600/20 dark:text-neutral-50 dark:hover:bg-amber-600/30 dark:focus-visible:ring-amber-500/40',\n danger: 'bg-red-100 text-red-700 hover:bg-red-100/90 focus-visible:ring-red-500/20 dark:bg-red-600/20 dark:text-neutral-50 dark:hover:bg-red-600/30 dark:focus-visible:ring-red-500/40',\n 'warning-solid': 'bg-amber-500 text-white hover:bg-amber-500/90 dark:bg-amber-500 dark:text-white dark:hover:bg-amber-500/90',\n 'danger-solid': 'bg-red-600 text-white hover:bg-red-600/90 focus-visible:ring-red-500/20 dark:bg-red-600/60 dark:text-white dark:hover:bg-red-600/50 dark:focus-visible:ring-red-500/40',\n};\n\nconst resolvedVariant = computed(() => {\n return variantClasses[props.variant] ? props.variant : 'primary';\n});\n\nconst linkClasses = computed(() => [\n 'inline-flex h-9 min-w-[40px] shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md px-4 py-2 text-sm font-medium shadow-xs outline-none transition-all aria-invalid:border-red-500 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',\n variantClasses[resolvedVariant.value],\n attrs.class,\n]);\n</script>\n\n<template>\n <Link\n v-if=\"!external\"\n v-bind=\"attrs\"\n :href=\"href\"\n :title=\"title\"\n :class=\"linkClasses\"\n >\n <slot />\n </Link>\n <a\n v-else\n v-bind=\"attrs\"\n :href=\"href\"\n :title=\"title\"\n :target=\"target\"\n :rel=\"rel\"\n :class=\"linkClasses\"\n >\n <slot />\n </a>\n</template>\n","<script setup>\nimport Divider from \"./Divider.vue\";\n</script>\n\n<template>\n <div class=\"hidden sm:block\">\n <div class=\"py-8\">\n <Divider />\n </div>\n </div>\n</template>\n","import { computed, inject, provide, ref, type ComputedRef, type InjectionKey, type Ref } from 'vue';\n\nexport type SidebarState = 'expanded' | 'collapsed';\n\nexport type SidebarContext = {\n state: ComputedRef<SidebarState>;\n open: Ref<boolean>;\n setOpen: (value: boolean) => void;\n toggleSidebar: () => void;\n expand: () => void;\n collapse: () => void;\n};\n\nconst SIDEBAR_CONTEXT_KEY: InjectionKey<SidebarContext> = Symbol('SidebarContext');\n\nconst fallbackOpen = ref(true);\nconst fallbackContext: SidebarContext = {\n state: computed(() => (fallbackOpen.value ? 'expanded' : 'collapsed')),\n open: fallbackOpen,\n setOpen: (value: boolean) => {\n fallbackOpen.value = value;\n },\n toggleSidebar: () => {\n fallbackOpen.value = !fallbackOpen.value;\n },\n expand: () => {\n fallbackOpen.value = true;\n },\n collapse: () => {\n fallbackOpen.value = false;\n },\n};\n\nexport function provideSidebarContext(defaultOpen = true): SidebarContext {\n const open = ref(defaultOpen);\n const state = computed<SidebarState>(() => (open.value ? 'expanded' : 'collapsed'));\n\n const context: SidebarContext = {\n state,\n open,\n setOpen: (value: boolean) => {\n open.value = value;\n },\n toggleSidebar: () => {\n open.value = !open.value;\n },\n expand: () => {\n open.value = true;\n },\n collapse: () => {\n open.value = false;\n },\n };\n\n provide(SIDEBAR_CONTEXT_KEY, context);\n\n return context;\n}\n\nexport function useSidebar(): SidebarContext {\n return inject(SIDEBAR_CONTEXT_KEY, fallbackContext);\n}\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { useSidebar } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n class?: HTMLAttributes['class'];\n }>(),\n {\n side: 'left',\n variant: 'sidebar',\n collapsible: 'offcanvas',\n class: undefined,\n },\n);\n\nconst { state } = useSidebar();\n</script>\n\n<template>\n <div\n v-if=\"collapsible === 'none'\"\n data-slot=\"sidebar\"\n data-sidebar=\"sidebar\"\n :class=\"[\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n\n <div\n v-else\n class=\"group peer text-sidebar-foreground hidden md:block\"\n data-slot=\"sidebar\"\n :data-state=\"state\"\n :data-collapsible=\"state === 'collapsed' ? collapsible : ''\"\n :data-variant=\"variant\"\n :data-side=\"side\"\n >\n <div\n :class=\"[\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ]\"\n />\n <div\n :class=\"[\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n data-sidebar=\"sidebar\"\n class=\"bg-sidebar text-sidebar-foreground flex h-full w-full flex-col group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { useSidebar } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n class?: HTMLAttributes['class'];\n }>(),\n {\n side: 'left',\n variant: 'sidebar',\n collapsible: 'offcanvas',\n class: undefined,\n },\n);\n\nconst { state } = useSidebar();\n</script>\n\n<template>\n <div\n v-if=\"collapsible === 'none'\"\n data-slot=\"sidebar\"\n data-sidebar=\"sidebar\"\n :class=\"[\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n\n <div\n v-else\n class=\"group peer text-sidebar-foreground hidden md:block\"\n data-slot=\"sidebar\"\n :data-state=\"state\"\n :data-collapsible=\"state === 'collapsed' ? collapsible : ''\"\n :data-variant=\"variant\"\n :data-side=\"side\"\n >\n <div\n :class=\"[\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ]\"\n />\n <div\n :class=\"[\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n data-sidebar=\"sidebar\"\n class=\"bg-sidebar text-sidebar-foreground flex h-full w-full flex-col group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n :class=\"['flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n :class=\"['flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n :class=\"['relative flex w-full min-w-0 flex-col p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n :class=\"['relative flex w-full min-w-0 flex-col p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n :class=\"['w-full text-sm', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n :class=\"['w-full text-sm', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, computed, isVNode, useAttrs, useSlots, type HTMLAttributes, type VNode } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n asChild?: boolean;\n class?: HTMLAttributes['class'];\n }>(),\n {\n as: 'div',\n asChild: false,\n class: undefined,\n },\n);\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst baseClass = computed(() => [\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-none transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n props.class,\n]);\n\nconst childVNode = computed(() => {\n if (!props.asChild) {\n return null;\n }\n\n const content = slots.default?.() ?? [];\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\n\n if (!firstVNode) {\n return null;\n }\n\n return cloneVNode(firstVNode, {\n ...attrs,\n class: [baseClass.value, (firstVNode.props as Record<string, unknown> | null)?.class],\n });\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-if=\"!asChild\"\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n :class=\"baseClass\"\n v-bind=\"attrs\"\n >\n <slot />\n </component>\n <component :is=\"childVNode\" v-else-if=\"childVNode\" />\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, computed, isVNode, useAttrs, useSlots, type HTMLAttributes, type VNode } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n asChild?: boolean;\n class?: HTMLAttributes['class'];\n }>(),\n {\n as: 'div',\n asChild: false,\n class: undefined,\n },\n);\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst baseClass = computed(() => [\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-none transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n props.class,\n]);\n\nconst childVNode = computed(() => {\n if (!props.asChild) {\n return null;\n }\n\n const content = slots.default?.() ?? [];\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\n\n if (!firstVNode) {\n return null;\n }\n\n return cloneVNode(firstVNode, {\n ...attrs,\n class: [baseClass.value, (firstVNode.props as Record<string, unknown> | null)?.class],\n });\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-if=\"!asChild\"\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n :class=\"baseClass\"\n v-bind=\"attrs\"\n >\n <slot />\n </component>\n <component :is=\"childVNode\" v-else-if=\"childVNode\" />\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n :class=\"['flex flex-col gap-2 p-2', props.class]\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <main\n data-slot=\"sidebar-inset\"\n :class=\"[\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n props.class,\n ]\"\n >\n <slot />\n </main>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <main\n data-slot=\"sidebar-inset\"\n :class=\"[\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n props.class,\n ]\"\n >\n <slot />\n </main>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n :class=\"['flex w-full min-w-0 flex-col gap-1', props.class]\"\n >\n <slot />\n </ul>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n :class=\"['flex w-full min-w-0 flex-col gap-1', props.class]\"\n >\n <slot />\n </ul>\n</template>\n","<script setup lang=\"ts\">\r\nimport { Link } from '@inertiajs/vue3';\r\nimport { cloneVNode, computed, isVNode, mergeProps, useAttrs, useSlots, type Component, type HTMLAttributes, type VNode } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n href?: string;\r\n title?: string;\r\n active?: boolean;\r\n isActive?: boolean;\r\n icon?: Component;\r\n external?: boolean;\r\n target?: string;\r\n rel?: string;\r\n variant?: 'default' | 'outline';\r\n size?: 'default' | 'sm' | 'lg';\r\n as?: 'button' | 'a' | 'link';\r\n asChild?: boolean;\r\n tooltip?: string;\r\n class?: HTMLAttributes['class'];\r\n }>(),\r\n {\r\n title: '',\r\n href: undefined,\r\n active: undefined,\r\n isActive: undefined,\r\n icon: undefined,\r\n external: false,\r\n target: undefined,\r\n rel: undefined,\r\n variant: 'default',\r\n size: 'default',\r\n as: undefined,\r\n asChild: false,\r\n tooltip: undefined,\r\n class: undefined,\r\n },\r\n);\r\n\r\nconst attrs = useAttrs();\r\nconst slots = useSlots();\r\n\r\nconst resolvedActive = computed(() => props.active ?? props.isActive ?? false);\r\n\r\nconst baseClass = computed(() => [\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:p-2! group-data-[collapsible=icon]:[&>*:first-child]:mx-auto group-data-[collapsible=icon]:[&>*:first-child]:flex group-data-[collapsible=icon]:[&>*:first-child]:items-center group-data-[collapsible=icon]:[&>*:first-child]:justify-center [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n props.variant === 'outline'\r\n ? 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]'\r\n : 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n props.size === 'sm'\r\n ? 'h-7 text-xs'\r\n : props.size === 'lg'\r\n ? 'h-12 text-sm group-data-[collapsible=icon]:p-0!'\r\n : 'h-8 text-sm',\r\n props.class,\r\n]);\r\n\r\nconst sharedAttrs = computed(() => ({\r\n ...attrs,\r\n title: props.tooltip ?? (props.title || undefined),\r\n 'data-slot': 'sidebar-menu-button',\r\n 'data-sidebar': 'menu-button',\r\n 'data-size': props.size,\r\n 'data-active': resolvedActive.value ? 'true' : undefined,\r\n 'aria-current': resolvedActive.value ? ('page' as const) : undefined,\r\n class: baseClass.value,\r\n}));\r\n\r\nconst childVNode = computed(() => {\r\n if (!props.asChild) {\r\n return null;\r\n }\r\n\r\n const content = slots.default?.() ?? [];\r\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\r\n\r\n if (!firstVNode) {\r\n return null;\r\n }\r\n\r\n return cloneVNode(firstVNode, mergeProps(sharedAttrs.value, firstVNode.props ?? {}));\r\n});\r\n</script>\r\n\r\n<template>\r\n <component :is=\"childVNode\" v-if=\"asChild && childVNode\" />\r\n <Link\r\n v-else-if=\"(as === 'link' || !as) && href && !external\"\r\n :href=\"href\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </Link>\r\n <a\r\n v-else-if=\"href && (external || as === 'a')\"\r\n :href=\"href\"\r\n :target=\"target\"\r\n :rel=\"rel\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { Link } from '@inertiajs/vue3';\r\nimport { cloneVNode, computed, isVNode, mergeProps, useAttrs, useSlots, type Component, type HTMLAttributes, type VNode } from 'vue';\r\n\r\ndefineOptions({ inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n href?: string;\r\n title?: string;\r\n active?: boolean;\r\n isActive?: boolean;\r\n icon?: Component;\r\n external?: boolean;\r\n target?: string;\r\n rel?: string;\r\n variant?: 'default' | 'outline';\r\n size?: 'default' | 'sm' | 'lg';\r\n as?: 'button' | 'a' | 'link';\r\n asChild?: boolean;\r\n tooltip?: string;\r\n class?: HTMLAttributes['class'];\r\n }>(),\r\n {\r\n title: '',\r\n href: undefined,\r\n active: undefined,\r\n isActive: undefined,\r\n icon: undefined,\r\n external: false,\r\n target: undefined,\r\n rel: undefined,\r\n variant: 'default',\r\n size: 'default',\r\n as: undefined,\r\n asChild: false,\r\n tooltip: undefined,\r\n class: undefined,\r\n },\r\n);\r\n\r\nconst attrs = useAttrs();\r\nconst slots = useSlots();\r\n\r\nconst resolvedActive = computed(() => props.active ?? props.isActive ?? false);\r\n\r\nconst baseClass = computed(() => [\r\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:gap-0 group-data-[collapsible=icon]:p-2! group-data-[collapsible=icon]:[&>*:first-child]:mx-auto group-data-[collapsible=icon]:[&>*:first-child]:flex group-data-[collapsible=icon]:[&>*:first-child]:items-center group-data-[collapsible=icon]:[&>*:first-child]:justify-center [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\r\n props.variant === 'outline'\r\n ? 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]'\r\n : 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\r\n props.size === 'sm'\r\n ? 'h-7 text-xs'\r\n : props.size === 'lg'\r\n ? 'h-12 text-sm group-data-[collapsible=icon]:p-0!'\r\n : 'h-8 text-sm',\r\n props.class,\r\n]);\r\n\r\nconst sharedAttrs = computed(() => ({\r\n ...attrs,\r\n title: props.tooltip ?? (props.title || undefined),\r\n 'data-slot': 'sidebar-menu-button',\r\n 'data-sidebar': 'menu-button',\r\n 'data-size': props.size,\r\n 'data-active': resolvedActive.value ? 'true' : undefined,\r\n 'aria-current': resolvedActive.value ? ('page' as const) : undefined,\r\n class: baseClass.value,\r\n}));\r\n\r\nconst childVNode = computed(() => {\r\n if (!props.asChild) {\r\n return null;\r\n }\r\n\r\n const content = slots.default?.() ?? [];\r\n const firstVNode = content.find((entry) => isVNode(entry)) as VNode | undefined;\r\n\r\n if (!firstVNode) {\r\n return null;\r\n }\r\n\r\n return cloneVNode(firstVNode, mergeProps(sharedAttrs.value, firstVNode.props ?? {}));\r\n});\r\n</script>\r\n\r\n<template>\r\n <component :is=\"childVNode\" v-if=\"asChild && childVNode\" />\r\n <Link\r\n v-else-if=\"(as === 'link' || !as) && href && !external\"\r\n :href=\"href\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </Link>\r\n <a\r\n v-else-if=\"href && (external || as === 'a')\"\r\n :href=\"href\"\r\n :target=\"target\"\r\n :rel=\"rel\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n v-bind=\"sharedAttrs\"\r\n >\r\n <component v-if=\"icon\" :is=\"icon\" />\r\n <slot>{{ title }}</slot>\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n :class=\"['group/menu-item relative', props.class]\"\n >\n <slot />\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n</script>\n\n<template>\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n :class=\"['group/menu-item relative', props.class]\"\n >\n <slot />\n </li>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { provideSidebarContext } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n defaultOpen?: boolean;\n width?: string;\n iconWidth?: string;\n class?: HTMLAttributes['class'];\n }>(),\n {\n defaultOpen: true,\n width: '16rem',\n iconWidth: '3rem',\n class: undefined,\n },\n);\n\nprovideSidebarContext(props.defaultOpen);\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-wrapper\"\n :style=\"{\n '--sidebar-width': props.width,\n '--sidebar-width-icon': props.iconWidth,\n }\"\n :class=\"[\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport { provideSidebarContext } from './sidebar-context';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n defaultOpen?: boolean;\n width?: string;\n iconWidth?: string;\n class?: HTMLAttributes['class'];\n }>(),\n {\n defaultOpen: true,\n width: '16rem',\n iconWidth: '3rem',\n class: undefined,\n },\n);\n\nprovideSidebarContext(props.defaultOpen);\n</script>\n\n<template>\n <div\n data-slot=\"sidebar-wrapper\"\n :style=\"{\n '--sidebar-width': props.width,\n '--sidebar-width-icon': props.iconWidth,\n }\"\n :class=\"[\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n props.class,\n ]\"\n v-bind=\"$attrs\"\n >\n <slot />\n </div>\n</template>\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst isEmptyString = (value) => value === \"\";\n\nexport { isEmptyString };\n//# sourceMappingURL=isEmptyString.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { provide, inject } from 'vue';\n\nconst LUCIDE_CONTEXT = Symbol(\"lucide-icons\");\nfunction setLucideProps(props) {\n return provide(LUCIDE_CONTEXT, props);\n}\nfunction useLucideProps() {\n return inject(LUCIDE_CONTEXT, {});\n}\n\nexport { LUCIDE_CONTEXT, setLucideProps, useLucideProps };\n//# sourceMappingURL=context.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { computed, h } from 'vue';\nimport { isEmptyString } from './shared/src/utils/isEmptyString.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport defaultAttributes from './defaultAttributes.js';\nimport { useLucideProps } from './context.js';\n\nconst Icon = ({\n name,\n iconNode,\n absoluteStrokeWidth,\n \"absolute-stroke-width\": absoluteStrokeWidthKebabCase,\n strokeWidth,\n \"stroke-width\": strokeWidthKebabCase,\n size,\n color,\n ...props\n}, { slots }) => {\n const {\n size: contextSize,\n color: contextColor,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n class: contextClass = \"\"\n } = useLucideProps();\n const calculatedStrokeWidth = computed(() => {\n const isAbsoluteStrokeWidth = isEmptyString(absoluteStrokeWidth) || isEmptyString(absoluteStrokeWidthKebabCase) || absoluteStrokeWidth === true || absoluteStrokeWidthKebabCase === true || contextAbsoluteStrokeWidth === true;\n const strokeWidthValue = strokeWidth || strokeWidthKebabCase || contextStrokeWidth || defaultAttributes[\"stroke-width\"];\n if (isAbsoluteStrokeWidth) {\n return Number(strokeWidthValue) * 24 / Number(size ?? contextSize ?? defaultAttributes.width);\n }\n return strokeWidthValue;\n });\n return h(\n \"svg\",\n {\n ...defaultAttributes,\n ...props,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor ?? defaultAttributes.stroke,\n \"stroke-width\": calculatedStrokeWidth.value,\n class: mergeClasses(\n \"lucide\",\n contextClass,\n ...name ? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`] : [\"lucide-icon\"]\n )\n },\n [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []]\n );\n};\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => (props, { slots, attrs }) => h(\n Icon,\n {\n ...attrs,\n ...props,\n iconNode,\n name: iconName\n },\n slots\n);\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"9\", cy: \"12\", r: \"1\", key: \"1vctgf\" }],\n [\"circle\", { cx: \"9\", cy: \"5\", r: \"1\", key: \"hp0tcf\" }],\n [\"circle\", { cx: \"9\", cy: \"19\", r: \"1\", key: \"fkjjf6\" }],\n [\"circle\", { cx: \"15\", cy: \"12\", r: \"1\", key: \"1tmaij\" }],\n [\"circle\", { cx: \"15\", cy: \"5\", r: \"1\", key: \"19l28e\" }],\n [\"circle\", { cx: \"15\", cy: \"19\", r: \"1\", key: \"f4zoj3\" }]\n];\nconst GripVertical = createLucideIcon(\"grip-vertical\", __iconNode);\n\nexport { __iconNode, GripVertical as default };\n//# sourceMappingURL=grip-vertical.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m16 15-3-3 3-3\", key: \"14y99z\" }]\n];\nconst PanelLeftClose = createLucideIcon(\"panel-left-close\", __iconNode);\n\nexport { __iconNode, PanelLeftClose as default };\n//# sourceMappingURL=panel-left-close.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"m14 9 3 3-3 3\", key: \"8010ee\" }]\n];\nconst PanelLeftOpen = createLucideIcon(\"panel-left-open\", __iconNode);\n\nexport { __iconNode, PanelLeftOpen as default };\n//# sourceMappingURL=panel-left-open.js.map\n","/**\n * @license @lucide/vue v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","<script setup lang=\"ts\">\r\nimport type { HTMLAttributes } from 'vue';\r\nimport { PanelLeftClose, PanelLeftOpen } from '@lucide/vue';\r\nimport Button from './Button.vue';\r\nimport { useSidebar } from './sidebar-context';\r\n\r\nconst props = defineProps<{\r\n class?: HTMLAttributes['class'];\r\n}>();\r\n\r\nconst { state, toggleSidebar } = useSidebar();\r\n</script>\r\n\r\n<template>\r\n <Button\r\n data-sidebar=\"trigger\"\r\n data-slot=\"sidebar-trigger\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n :class=\"['h-7 w-7', props.class]\"\r\n @click=\"toggleSidebar\"\r\n >\r\n <PanelLeftOpen v-if=\"state === 'collapsed'\" />\r\n <PanelLeftClose v-else />\r\n <span class=\"sr-only\">Basculer la barre latérale</span>\r\n </Button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { HTMLAttributes } from 'vue';\r\nimport { PanelLeftClose, PanelLeftOpen } from '@lucide/vue';\r\nimport Button from './Button.vue';\r\nimport { useSidebar } from './sidebar-context';\r\n\r\nconst props = defineProps<{\r\n class?: HTMLAttributes['class'];\r\n}>();\r\n\r\nconst { state, toggleSidebar } = useSidebar();\r\n</script>\r\n\r\n<template>\r\n <Button\r\n data-sidebar=\"trigger\"\r\n data-slot=\"sidebar-trigger\"\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n :class=\"['h-7 w-7', props.class]\"\r\n @click=\"toggleSidebar\"\r\n >\r\n <PanelLeftOpen v-if=\"state === 'collapsed'\" />\r\n <PanelLeftClose v-else />\r\n <span class=\"sr-only\">Basculer la barre latérale</span>\r\n </Button>\r\n</template>\r\n","const stack: symbol[] = []\nlet bodyLockCount = 0\nlet previousBodyOverflow = ''\n\nexport type SlidePanelPushSide = 'top' | 'right' | 'bottom' | 'left'\n\ntype PushTargetState = {\n contributions: Map<symbol, { side: SlidePanelPushSide; size: number }>\n originalMargins: Record<SlidePanelPushSide, { value: string; priority: string; base: number }>\n originalTransition: { value: string; priority: string }\n}\n\nconst pushTargets = new Map<HTMLElement, PushTargetState>()\n\nconst marginProperty: Record<SlidePanelPushSide, 'marginTop' | 'marginRight' | 'marginBottom' | 'marginLeft'> = {\n top: 'marginTop',\n right: 'marginRight',\n bottom: 'marginBottom',\n left: 'marginLeft',\n}\n\nconst ensurePushTarget = (target: HTMLElement): PushTargetState => {\n const existing = pushTargets.get(target)\n if (existing) return existing\n\n const computed = window.getComputedStyle(target)\n const originalMargins = (['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]).reduce((margins, side) => {\n const property = marginProperty[side]\n margins[side] = {\n value: target.style[property],\n priority: target.style.getPropertyPriority(`margin-${side}`),\n base: Number.parseFloat(computed[property]) || 0,\n }\n return margins\n }, {} as PushTargetState['originalMargins'])\n\n const state: PushTargetState = {\n contributions: new Map(),\n originalMargins,\n originalTransition: {\n value: target.style.transition,\n priority: target.style.getPropertyPriority('transition'),\n },\n }\n\n pushTargets.set(target, state)\n return state\n}\n\nconst applyPushTarget = (target: HTMLElement, state: PushTargetState): void => {\n const totals = (['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]).reduce((result, side) => {\n result[side] = 0\n return result\n }, {} as Record<SlidePanelPushSide, number>)\n\n for (const contribution of state.contributions.values()) {\n totals[contribution.side] += contribution.size\n }\n\n target.style.setProperty(\n 'transition',\n state.originalTransition.value\n ? `${state.originalTransition.value}, margin 200ms ease`\n : 'margin 200ms ease',\n )\n\n for (const side of ['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]) {\n target.style[marginProperty[side]] = `${state.originalMargins[side].base + totals[side]}px`\n }\n}\n\nexport const setSlidePanelPush = (\n id: symbol,\n target: HTMLElement,\n side: SlidePanelPushSide,\n size: number,\n): void => {\n const state = ensurePushTarget(target)\n state.contributions.set(id, { side, size: Math.max(0, size) })\n applyPushTarget(target, state)\n}\n\nexport const removeSlidePanelPush = (id: symbol): void => {\n for (const [target, state] of pushTargets) {\n if (!state.contributions.delete(id)) continue\n\n if (state.contributions.size > 0) {\n applyPushTarget(target, state)\n continue\n }\n\n for (const side of ['top', 'right', 'bottom', 'left'] as SlidePanelPushSide[]) {\n const original = state.originalMargins[side]\n target.style.setProperty(`margin-${side}`, original.value, original.priority)\n if (!original.value) target.style.removeProperty(`margin-${side}`)\n }\n\n target.style.setProperty('transition', state.originalTransition.value, state.originalTransition.priority)\n if (!state.originalTransition.value) target.style.removeProperty('transition')\n pushTargets.delete(target)\n }\n}\n\nexport const registerSlidePanel = (id: symbol, lockBody: boolean): number => {\n if (!stack.includes(id)) {\n stack.push(id)\n\n if (lockBody && typeof document !== 'undefined') {\n if (bodyLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n\n bodyLockCount += 1\n }\n }\n\n return 1000 + (stack.indexOf(id) + 1) * 2\n}\n\nexport const unregisterSlidePanel = (id: symbol, lockBody: boolean): void => {\n const index = stack.indexOf(id)\n if (index === -1) {\n return\n }\n\n stack.splice(index, 1)\n\n if (lockBody && typeof document !== 'undefined' && bodyLockCount > 0) {\n bodyLockCount -= 1\n\n if (bodyLockCount === 0) {\n document.body.style.overflow = previousBodyOverflow\n previousBodyOverflow = ''\n }\n }\n}\n\nexport const isTopSlidePanel = (id: symbol): boolean => stack[stack.length - 1] === id\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport {\n isTopSlidePanel,\n removeSlidePanelPush,\n registerSlidePanel,\n setSlidePanelPush,\n unregisterSlidePanel,\n} from './slide-panel-context'\n\nexport type SlidePanelPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type SlidePanelMode = 'overlay' | 'push'\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n position?: SlidePanelPosition\n width?: string | number\n height?: string | number\n top?: string | number\n right?: string | number\n bottom?: string | number\n left?: string | number\n mode?: SlidePanelMode\n pushTarget?: string | HTMLElement | null\n backdrop?: boolean\n closeable?: boolean\n}>(), {\n show: false,\n position: 'right',\n mode: 'overlay',\n backdrop: false,\n closeable: true,\n})\n\nconst emit = defineEmits<{ close: [] }>()\nconst panel = ref<HTMLElement | null>(null)\nconst rendered = ref(false)\nconst visible = ref(false)\nconst layer = ref(0)\nconst panelId = Symbol('slide-panel')\nlet previouslyFocused: Element | null = null\nlet resizeObserver: ResizeObserver | undefined\nlet warnedAboutPushTarget = false\n\nconst isTopmost = computed(() => isTopSlidePanel(panelId))\n\nconst toCssValue = (value: string | number | undefined) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nconst panelStyle = computed<Record<string, string>>(() => {\n const style: Record<string, string> = { zIndex: String(layer.value) }\n\n if (props.position === 'left' || props.position === 'right') {\n style.width = toCssValue(props.width) ?? '400px'\n style.height = toCssValue(props.height) ?? '100vh'\n } else {\n style.width = toCssValue(props.width) ?? '100vw'\n style.height = toCssValue(props.height) ?? 'auto'\n }\n\n const defaultEdges: Record<SlidePanelPosition, Record<string, string>> = {\n right: { top: '0px', right: '0px', bottom: '0px' },\n left: { top: '0px', bottom: '0px', left: '0px' },\n top: { top: '0px', right: '0px', left: '0px' },\n bottom: { right: '0px', bottom: '0px', left: '0px' },\n }\n\n Object.assign(style, defaultEdges[props.position])\n\n for (const edge of ['top', 'right', 'bottom', 'left'] as const) {\n const value = toCssValue(props[edge])\n if (value !== undefined) style[edge] = value\n }\n\n return style\n})\n\nconst transitionClasses = computed(() => {\n switch (props.position) {\n case 'left': return { enterFrom: '-translate-x-full', leaveTo: '-translate-x-full' }\n case 'top': return { enterFrom: '-translate-y-full', leaveTo: '-translate-y-full' }\n case 'bottom': return { enterFrom: 'translate-y-full', leaveTo: 'translate-y-full' }\n default: return { enterFrom: 'translate-x-full', leaveTo: 'translate-x-full' }\n }\n})\n\nconst resolvePushTarget = (): HTMLElement | null => {\n if (typeof document === 'undefined' || !props.pushTarget) return null\n if (typeof props.pushTarget === 'string') return document.querySelector<HTMLElement>(props.pushTarget)\n return props.pushTarget\n}\n\nconst updatePush = () => {\n if (!visible.value || props.mode !== 'push') {\n removeSlidePanelPush(panelId)\n return\n }\n\n const target = resolvePushTarget()\n if (!target || !panel.value) {\n removeSlidePanelPush(panelId)\n if (!warnedAboutPushTarget) {\n console.warn('[SlidePanel] mode=\"push\" requires pushTarget to resolve to an HTMLElement.')\n warnedAboutPushTarget = true\n }\n return\n }\n\n warnedAboutPushTarget = false\n const size = props.position === 'left' || props.position === 'right'\n ? panel.value.getBoundingClientRect().width\n : panel.value.getBoundingClientRect().height\n setSlidePanelPush(panelId, target, props.position, size)\n}\n\nconst focusPanel = async () => {\n await nextTick()\n panel.value?.focus()\n updatePush()\n}\n\nconst open = () => {\n previouslyFocused = typeof document !== 'undefined' ? document.activeElement : null\n rendered.value = true\n layer.value = registerSlidePanel(panelId, props.backdrop)\n void nextTick(() => {\n visible.value = true\n void focusPanel()\n })\n}\n\nconst close = () => {\n if (!rendered.value) return\n\n visible.value = false\n removeSlidePanelPush(panelId)\n}\n\nconst finishClose = () => {\n if (props.show) return\n\n rendered.value = false\n unregisterSlidePanel(panelId, props.backdrop)\n if (previouslyFocused instanceof HTMLElement) previouslyFocused.focus()\n}\n\nconst requestClose = () => {\n if (props.closeable && isTopmost.value) emit('close')\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.show && isTopmost.value) {\n event.preventDefault()\n requestClose()\n }\n}\n\nwatch(() => props.show, (show) => show ? open() : close(), { immediate: true })\n\nwatch(\n () => [props.mode, props.pushTarget, props.position, props.width, props.height, props.top, props.right, props.bottom, props.left],\n () => void nextTick(updatePush),\n)\n\nwatch(panel, (element) => {\n resizeObserver?.disconnect()\n if (element) {\n resizeObserver?.observe(element)\n updatePush()\n }\n})\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(updatePush)\n if (panel.value) resizeObserver.observe(panel.value)\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n resizeObserver?.disconnect()\n unregisterSlidePanel(panelId, props.backdrop)\n removeSlidePanelPush(panelId)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"rendered && backdrop\"\n v-show=\"visible\"\n class=\"fixed inset-0 bg-neutral-950/40 backdrop-blur-[1px]\"\n :style=\"{ zIndex: String(layer - 1) }\"\n aria-hidden=\"true\"\n @click=\"requestClose\"\n />\n </Transition>\n\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n :enter-from-class=\"`${transitionClasses.enterFrom} opacity-0`\"\n enter-to-class=\"translate-x-0 translate-y-0 opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0 opacity-100\"\n :leave-to-class=\"`${transitionClasses.leaveTo} opacity-0`\"\n >\n <section\n v-if=\"rendered\"\n v-show=\"visible\"\n ref=\"panel\"\n class=\"fixed max-w-full overflow-y-auto border border-neutral-200 bg-white shadow-2xl outline-none dark:border-neutral-800 dark:bg-neutral-950\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-modal=\"backdrop ? 'true' : undefined\"\n tabindex=\"-1\"\n @after-leave=\"finishClose\"\n >\n <slot />\n </section>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport {\n isTopSlidePanel,\n removeSlidePanelPush,\n registerSlidePanel,\n setSlidePanelPush,\n unregisterSlidePanel,\n} from './slide-panel-context'\n\nexport type SlidePanelPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type SlidePanelMode = 'overlay' | 'push'\n\nconst props = withDefaults(defineProps<{\n show?: boolean\n position?: SlidePanelPosition\n width?: string | number\n height?: string | number\n top?: string | number\n right?: string | number\n bottom?: string | number\n left?: string | number\n mode?: SlidePanelMode\n pushTarget?: string | HTMLElement | null\n backdrop?: boolean\n closeable?: boolean\n}>(), {\n show: false,\n position: 'right',\n mode: 'overlay',\n backdrop: false,\n closeable: true,\n})\n\nconst emit = defineEmits<{ close: [] }>()\nconst panel = ref<HTMLElement | null>(null)\nconst rendered = ref(false)\nconst visible = ref(false)\nconst layer = ref(0)\nconst panelId = Symbol('slide-panel')\nlet previouslyFocused: Element | null = null\nlet resizeObserver: ResizeObserver | undefined\nlet warnedAboutPushTarget = false\n\nconst isTopmost = computed(() => isTopSlidePanel(panelId))\n\nconst toCssValue = (value: string | number | undefined) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nconst panelStyle = computed<Record<string, string>>(() => {\n const style: Record<string, string> = { zIndex: String(layer.value) }\n\n if (props.position === 'left' || props.position === 'right') {\n style.width = toCssValue(props.width) ?? '400px'\n style.height = toCssValue(props.height) ?? '100vh'\n } else {\n style.width = toCssValue(props.width) ?? '100vw'\n style.height = toCssValue(props.height) ?? 'auto'\n }\n\n const defaultEdges: Record<SlidePanelPosition, Record<string, string>> = {\n right: { top: '0px', right: '0px', bottom: '0px' },\n left: { top: '0px', bottom: '0px', left: '0px' },\n top: { top: '0px', right: '0px', left: '0px' },\n bottom: { right: '0px', bottom: '0px', left: '0px' },\n }\n\n Object.assign(style, defaultEdges[props.position])\n\n for (const edge of ['top', 'right', 'bottom', 'left'] as const) {\n const value = toCssValue(props[edge])\n if (value !== undefined) style[edge] = value\n }\n\n return style\n})\n\nconst transitionClasses = computed(() => {\n switch (props.position) {\n case 'left': return { enterFrom: '-translate-x-full', leaveTo: '-translate-x-full' }\n case 'top': return { enterFrom: '-translate-y-full', leaveTo: '-translate-y-full' }\n case 'bottom': return { enterFrom: 'translate-y-full', leaveTo: 'translate-y-full' }\n default: return { enterFrom: 'translate-x-full', leaveTo: 'translate-x-full' }\n }\n})\n\nconst resolvePushTarget = (): HTMLElement | null => {\n if (typeof document === 'undefined' || !props.pushTarget) return null\n if (typeof props.pushTarget === 'string') return document.querySelector<HTMLElement>(props.pushTarget)\n return props.pushTarget\n}\n\nconst updatePush = () => {\n if (!visible.value || props.mode !== 'push') {\n removeSlidePanelPush(panelId)\n return\n }\n\n const target = resolvePushTarget()\n if (!target || !panel.value) {\n removeSlidePanelPush(panelId)\n if (!warnedAboutPushTarget) {\n console.warn('[SlidePanel] mode=\"push\" requires pushTarget to resolve to an HTMLElement.')\n warnedAboutPushTarget = true\n }\n return\n }\n\n warnedAboutPushTarget = false\n const size = props.position === 'left' || props.position === 'right'\n ? panel.value.getBoundingClientRect().width\n : panel.value.getBoundingClientRect().height\n setSlidePanelPush(panelId, target, props.position, size)\n}\n\nconst focusPanel = async () => {\n await nextTick()\n panel.value?.focus()\n updatePush()\n}\n\nconst open = () => {\n previouslyFocused = typeof document !== 'undefined' ? document.activeElement : null\n rendered.value = true\n layer.value = registerSlidePanel(panelId, props.backdrop)\n void nextTick(() => {\n visible.value = true\n void focusPanel()\n })\n}\n\nconst close = () => {\n if (!rendered.value) return\n\n visible.value = false\n removeSlidePanelPush(panelId)\n}\n\nconst finishClose = () => {\n if (props.show) return\n\n rendered.value = false\n unregisterSlidePanel(panelId, props.backdrop)\n if (previouslyFocused instanceof HTMLElement) previouslyFocused.focus()\n}\n\nconst requestClose = () => {\n if (props.closeable && isTopmost.value) emit('close')\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.show && isTopmost.value) {\n event.preventDefault()\n requestClose()\n }\n}\n\nwatch(() => props.show, (show) => show ? open() : close(), { immediate: true })\n\nwatch(\n () => [props.mode, props.pushTarget, props.position, props.width, props.height, props.top, props.right, props.bottom, props.left],\n () => void nextTick(updatePush),\n)\n\nwatch(panel, (element) => {\n resizeObserver?.disconnect()\n if (element) {\n resizeObserver?.observe(element)\n updatePush()\n }\n})\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(updatePush)\n if (panel.value) resizeObserver.observe(panel.value)\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n resizeObserver?.disconnect()\n unregisterSlidePanel(panelId, props.backdrop)\n removeSlidePanelPush(panelId)\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"rendered && backdrop\"\n v-show=\"visible\"\n class=\"fixed inset-0 bg-neutral-950/40 backdrop-blur-[1px]\"\n :style=\"{ zIndex: String(layer - 1) }\"\n aria-hidden=\"true\"\n @click=\"requestClose\"\n />\n </Transition>\n\n <Transition\n enter-active-class=\"transform transition duration-200 ease-out\"\n :enter-from-class=\"`${transitionClasses.enterFrom} opacity-0`\"\n enter-to-class=\"translate-x-0 translate-y-0 opacity-100\"\n leave-active-class=\"transform transition duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0 opacity-100\"\n :leave-to-class=\"`${transitionClasses.leaveTo} opacity-0`\"\n >\n <section\n v-if=\"rendered\"\n v-show=\"visible\"\n ref=\"panel\"\n class=\"fixed max-w-full overflow-y-auto border border-neutral-200 bg-white shadow-2xl outline-none dark:border-neutral-800 dark:bg-neutral-950\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-modal=\"backdrop ? 'true' : undefined\"\n tabindex=\"-1\"\n @after-leave=\"finishClose\"\n >\n <slot />\n </section>\n </Transition>\n </Teleport>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/vue/24/outline';\n\nconst props = defineProps({\n fields: {\n type: Array,\n required: true,\n validator: (value) => {\n return value.every(field =>\n typeof field === 'object' &&\n field.key &&\n field.label\n );\n }\n },\n currentSortField: {\n type: String,\n default: ''\n },\n currentDirection: {\n type: String,\n default: 'asc',\n validator: (value) => ['asc', 'desc'].includes(value)\n },\n count: {\n type: Number,\n default: 0\n },\n countLabel: {\n type: String,\n default: 'items'\n },\n sortByLabel: {\n type: String,\n default: 'Sort by'\n }\n});\n\nconst emit = defineEmits(['sort']);\n\nconst handleSort = (fieldKey) => {\n emit('sort', fieldKey);\n};\n</script>\n\n<template>\n <div class=\"rounded-xl border border-neutral-200 bg-white/80 px-6 py-4 backdrop-blur-sm dark:border-neutral-800 dark:bg-neutral-950/80\">\n <div class=\"flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center\">\n <div class=\"flex items-center gap-3\">\n <label class=\"text-sm font-medium text-neutral-700 dark:text-neutral-100\">{{ sortByLabel }}:</label>\n <div class=\"flex flex-wrap items-center gap-2\">\n <button\n v-for=\"field in fields\"\n :key=\"field.key\"\n @click=\"handleSort(field.key)\"\n :class=\"[\n 'px-3 py-1.5 text-sm font-medium rounded-lg transition-all duration-200',\n currentSortField === field.key\n ? 'bg-neutral-900 text-neutral-50 shadow-sm dark:bg-neutral-800 dark:text-neutral-50'\n : 'bg-neutral-100 text-neutral-700 hover:bg-neutral-200 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:bg-neutral-800'\n ]\"\n >\n {{ field.label }}\n <ChevronUpIcon\n v-if=\"currentSortField === field.key && currentDirection === 'asc'\"\n class=\"w-3 h-3 ml-1 inline\"\n />\n <ChevronDownIcon\n v-if=\"currentSortField === field.key && currentDirection === 'desc'\"\n class=\"w-3 h-3 ml-1 inline\"\n />\n </button>\n </div>\n </div>\n <div class=\"text-xs text-neutral-500 dark:text-neutral-200\">\n {{ count }} {{ countLabel }}\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/vue/24/outline';\n\nconst props = defineProps({\n field: {\n type: String,\n required: true\n },\n currentSortField: {\n type: String,\n default: ''\n },\n currentDirection: {\n type: String,\n default: 'asc'\n },\n headerClass: {\n type: [String, Array, Object],\n default: ''\n },\n headerStyle: {\n type: Object,\n default: () => ({})\n },\n contentClass: {\n type: String,\n default: ''\n }\n});\n\nconst isCurrentSort = computed(() => {\n return props.field === props.currentSortField;\n});\n\nconst sortIconClass = computed(() => {\n if (!isCurrentSort.value) {\n return 'text-neutral-400 dark:text-neutral-200';\n }\n\n return 'text-neutral-900 dark:text-neutral-100';\n});\n</script>\n\n<template>\n <th\n :class=\"headerClass\"\n :style=\"headerStyle\"\n @click=\"$emit('sort', field)\"\n >\n <div :class=\"contentClass\">\n <span><slot></slot></span>\n <div class=\"flex flex-col\">\n <ChevronUpIcon\n v-if=\"isCurrentSort && currentDirection === 'asc'\"\n :class=\"sortIconClass\"\n class=\"w-3 h-3\"\n />\n <ChevronDownIcon\n v-if=\"isCurrentSort && currentDirection === 'desc'\"\n :class=\"sortIconClass\"\n class=\"w-3 h-3\"\n />\n </div>\n </div>\n </th>\n</template>\n","<script setup>\nimport { Search } from \"@lucide/vue\";\nimport { computed } from \"vue\";\nimport InputGroup from \"./InputGroup.vue\";\nimport ToggleInput from \"./ToggleInput.vue\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: \"\",\n },\n placeholder: {\n type: String,\n default: \"Search...\",\n },\n count: {\n type: Number,\n default: null,\n },\n countLabel: {\n type: String,\n default: \"results\",\n },\n queryLabel: {\n type: String,\n default: \"for\",\n },\n showDeleted: {\n type: Boolean,\n default: false,\n },\n showDeletedToggle: {\n type: Boolean,\n default: false,\n },\n showDeletedLabel: {\n type: String,\n default: \"Show deleted\",\n },\n cardClass: {\n type: String,\n default:\n \"rounded-xl border border-neutral-200 bg-white/90 px-6 py-4 shadow-sm dark:border-neutral-800 dark:bg-neutral-950/90\",\n },\n searchbar: {\n type: Boolean,\n default: true,\n },\n searchMode: {\n type: String,\n default: \"server\",\n validator: (value) => [\"client\", \"server\"].includes(value),\n },\n searchFieldsLayout: {\n type: String,\n default: \"inline\",\n validator: (value) => [\"inline\", \"stacked\"].includes(value),\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"update:showDeleted\"]);\n\nconst model = computed({\n get: () => props.modelValue,\n set: (value) => emit(\"update:modelValue\", value),\n});\n\nconst showDeletedModel = computed({\n get: () => props.showDeleted,\n set: (value) => emit(\"update:showDeleted\", value),\n});\n\nconst searchContentClasses = computed(() =>\n props.searchFieldsLayout === \"stacked\"\n ? \"flex w-full min-w-0 flex-1 flex-col gap-3\"\n : \"flex w-full min-w-0 flex-1 flex-col gap-3 lg:flex-row lg:items-center\"\n);\n\nconst searchFieldsClasses = computed(() =>\n props.searchFieldsLayout === \"stacked\"\n ? \"w-full min-w-0\"\n : \"min-w-0 flex-1\"\n);\n</script>\n\n<template>\n <div :class=\"cardClass\">\n <div\n class=\"flex flex-col items-start gap-4 lg:flex-row lg:flex-wrap lg:items-center lg:justify-between\"\n >\n <div :class=\"searchContentClasses\">\n <InputGroup\n v-if=\"searchbar\"\n v-model=\"model\"\n type=\"text\"\n root-class=\"w-full lg:max-w-md\"\n :placeholder=\"placeholder\"\n >\n <template #leading-icon>\n <Search class=\"h-5 w-5\" />\n </template>\n </InputGroup>\n <!-- Slot for additional search fields -->\n <div :class=\"searchFieldsClasses\">\n <slot name=\"search-fields\" />\n </div>\n </div>\n\n <div\n v-if=\"showDeletedToggle || count !== null || $slots.controls\"\n class=\"flex shrink-0 flex-col items-start gap-3 sm:flex-row sm:items-center lg:w-auto\"\n >\n <div v-if=\"showDeletedToggle\" class=\"flex items-center\">\n <ToggleInput v-model=\"showDeletedModel\" :label=\"showDeletedLabel\" />\n </div>\n\n <!-- Slot for additional control fields -->\n <slot name=\"controls\" />\n\n <div\n v-if=\"count !== null\"\n class=\"flex items-center text-xs text-neutral-500 dark:text-neutral-400 sm:w-auto sm:text-sm lg:w-auto\"\n >\n <span>{{ count }} {{ countLabel }}</span>\n <span v-if=\"model\" class=\"ml-2\">\n {{ queryLabel }}\n <span class=\"font-medium text-neutral-700 dark:text-neutral-200\">\n \"{{ model }}\"\n </span>\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n","export const getNestedValue = (object, path) => {\n if (!path || typeof path !== 'string') {\n return object;\n }\n\n return path.split('.').reduce((current, key) => current?.[key], object);\n};\n\nexport const setNestedValue = (object, path, value) => {\n if (!path || typeof path !== 'string' || object == null) {\n return;\n }\n\n const keys = path.split('.');\n const lastKey = keys.pop();\n let current = object;\n\n for (const key of keys) {\n if (current[key] === undefined || current[key] === null || typeof current[key] !== 'object') {\n current[key] = {};\n }\n\n current = current[key];\n }\n\n if (lastKey !== undefined) {\n current[lastKey] = value;\n }\n};\n\nexport const getRowKey = (item, index, rowKey) => {\n if (typeof rowKey === 'function') {\n return rowKey(item, index) ?? `row-${index}`;\n }\n\n return getNestedValue(item, rowKey) ?? `row-${index}`;\n};\n\nconst cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneValue(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, cloneValue(entry)]),\n );\n }\n\n return value;\n};\n\nexport const reorderRows = ({ data, fromIndex, toIndex, orderField, mutateRows }) => {\n const reorderedData = mutateRows ? [...data] : data.map((item) => cloneValue(item));\n const [movedItem] = reorderedData.splice(fromIndex, 1);\n reorderedData.splice(toIndex, 0, movedItem);\n\n if (mutateRows) {\n reorderedData.forEach((item, index) => setNestedValue(item, orderField, index + 1));\n }\n\n return {\n data: reorderedData,\n item: movedItem,\n fromIndex,\n toIndex,\n };\n};\n","<script setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { GripVertical } from '@lucide/vue';\nimport ThSortable from \"./ThSortable.vue\";\nimport LinkButton from \"./LinkButton.vue\";\nimport TableSearch from \"./TableSearch.vue\";\nimport { getRowKey, reorderRows } from './tableListOrdering.js';\n\nconst slots = useSlots();\n\nconst props = defineProps({\n data: {\n type: Array,\n required: true\n },\n columns: {\n type: Array,\n required: true\n },\n rowKey: {\n type: [String, Function],\n default: 'id'\n },\n orderable: {\n type: Boolean,\n default: false\n },\n orderField: {\n type: String,\n default: 'order'\n },\n mutateRows: {\n type: Boolean,\n default: true\n },\n sortField: {\n type: String,\n default: ''\n },\n sortDirection: {\n type: String,\n default: 'asc'\n },\n emptyState: {\n type: Object,\n default: () => ({\n icon: 'UsersIcon',\n title: 'No data found',\n description: 'No items to display.',\n actionText: null,\n actionUrl: null\n })\n },\n rowClasses: {\n type: Function,\n default: (item, index) => [\n 'transition-colors duration-150',\n item.deleted_at\n ? 'bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50'\n : 'odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900'\n ]\n },\n maxTextLength: {\n type: Number,\n default: 40\n },\n isCard: {\n type: Boolean,\n default: true\n },\n tableClass: {\n type: String,\n default: ''\n },\n theadClass: {\n type: String,\n default: ''\n },\n tbodyClass: {\n type: String,\n default: ''\n },\n headerRowClass: {\n type: String,\n default: ''\n },\n dense: {\n type: Boolean,\n default: false\n },\n actionsLabel: {\n type: String,\n default: 'Actions'\n },\n deletedLabel: {\n type: String,\n default: 'Deleted'\n },\n search: {\n type: Boolean,\n default: false\n },\n searchPlaceholder: {\n type: String,\n default: 'Search...'\n },\n searchValue: {\n type: String,\n default: undefined\n },\n searchCountLabel: {\n type: String,\n default: 'results'\n },\n searchCount: {\n type: Number,\n default: null\n },\n searchQueryLabel: {\n type: String,\n default: 'for'\n },\n searchShowDeleted: {\n type: Boolean,\n default: false\n },\n searchShowDeletedToggle: {\n type: Boolean,\n default: false\n },\n searchShowDeletedLabel: {\n type: String,\n default: 'Show deleted'\n },\n searchMode: {\n type: String,\n default: 'server',\n validator: (value) => ['client', 'server'].includes(value)\n },\n searchFieldsLayout: {\n type: String,\n default: 'inline',\n validator: (value) => ['inline', 'stacked'].includes(value)\n }\n});\n\nconst emit = defineEmits(['sort', 'reorder', 'update:searchShowDeleted', 'update:searchValue']);\n\nconst localData = ref(props.data);\n\nwatch(() => props.data, (value) => {\n localData.value = value;\n});\n\nconst hasActionsSlot = computed(() => !!slots.actions);\nconst internalSearchQuery = ref('');\nconst searchQuery = computed({\n get: () => props.searchValue ?? internalSearchQuery.value,\n set: (value) => {\n internalSearchQuery.value = value;\n emit('update:searchValue', value);\n }\n});\n\nconst filteredData = computed(() => {\n if (props.searchMode !== 'client' || !props.search || !searchQuery.value.trim()) {\n return localData.value;\n }\n\n const query = searchQuery.value.toLowerCase().trim();\n\n return localData.value.filter((item) => {\n return props.columns.some((column) => {\n if (column.searchable === false || column.slot) {\n return false;\n }\n\n const value = column.key.split('.').reduce((obj, key) => obj?.[key], item);\n\n if (value === null || value === undefined || value === '') {\n return false;\n }\n\n return String(value).toLowerCase().includes(query);\n });\n });\n});\n\nconst hasData = computed(() => filteredData.value && filteredData.value.length > 0);\nconst resolvedSearchCount = computed(() => {\n return props.searchCount ?? filteredData.value.length;\n});\n\nconst draggedIndex = ref(null);\nconst dragOverIndex = ref(null);\nconst dragPreview = ref(null);\nconst dragRowHeight = ref(0);\nconst canReorder = computed(() => {\n return props.orderable && !searchQuery.value.trim();\n});\n\nconst startDrag = (index, event) => {\n if (!canReorder.value) {\n event.preventDefault();\n return;\n }\n\n draggedIndex.value = index;\n dragOverIndex.value = index;\n const row = event.currentTarget?.closest('tr');\n\n if (row) {\n dragRowHeight.value = row.offsetHeight;\n const preview = document.createElement('div');\n const previewTable = document.createElement('table');\n const previewBody = document.createElement('tbody');\n const previewRow = row.cloneNode(true);\n\n previewTable.className = row.closest('table')?.className ?? '';\n previewTable.style.width = `${row.getBoundingClientRect().width}px`;\n previewTable.style.borderCollapse = 'collapse';\n previewTable.style.background = 'white';\n previewRow.classList.remove('opacity-0');\n previewRow.style.background = 'white';\n previewRow.querySelectorAll('td').forEach((cell) => {\n cell.style.background = 'white';\n });\n previewBody.appendChild(previewRow);\n previewTable.appendChild(previewBody);\n preview.appendChild(previewTable);\n dragPreview.value = preview;\n dragPreview.value.style.position = 'fixed';\n dragPreview.value.style.top = '0';\n dragPreview.value.style.left = '0';\n dragPreview.value.style.background = 'white';\n dragPreview.value.style.borderRadius = '0.5rem';\n dragPreview.value.style.boxShadow = '0 10px 25px rgb(15 23 42 / 0.18)';\n dragPreview.value.style.opacity = '0.96';\n dragPreview.value.style.pointerEvents = 'none';\n dragPreview.value.style.zIndex = '1000';\n document.body.appendChild(dragPreview.value);\n updateDragPreviewPosition(event);\n document.addEventListener('dragover', handleDocumentDragOver, true);\n\n const transparentDragImage = document.createElement('canvas');\n transparentDragImage.width = 1;\n transparentDragImage.height = 1;\n event.dataTransfer.setDragImage(transparentDragImage, 0, 0);\n }\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(index));\n};\n\nconst endDrag = () => {\n document.removeEventListener('dragover', handleDocumentDragOver, true);\n dragPreview.value?.remove();\n dragPreview.value = null;\n draggedIndex.value = null;\n dragOverIndex.value = null;\n dragRowHeight.value = 0;\n};\n\nconst handleDocumentDragOver = (event) => {\n if (!canReorder.value || draggedIndex.value === null) {\n return;\n }\n\n event.preventDefault();\n updateDragPreviewPosition(event);\n};\n\nconst updateDragPreviewPosition = (event) => {\n if (!dragPreview.value) {\n return;\n }\n\n const offsetX = 24;\n const offsetY = dragRowHeight.value / 2;\n\n dragPreview.value.style.transform = `translate3d(${event.clientX - offsetX}px, ${event.clientY - offsetY}px, 0)`;\n};\n\nconst updateDragOver = (index, event) => {\n if (canReorder.value) {\n dragOverIndex.value = index;\n updateDragPreviewPosition(event);\n }\n};\n\nconst getDropTargetIndex = (event, fallbackIndex) => {\n const row = event.currentTarget;\n const tbody = row?.parentElement;\n\n if (!tbody) {\n return fallbackIndex;\n }\n\n const targetRow = Array.from(tbody.children).find((candidate) => {\n const rect = candidate.getBoundingClientRect();\n\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n const targetIndex = Number(targetRow?.dataset.rowIndex);\n\n return Number.isInteger(targetIndex) ? targetIndex : fallbackIndex;\n};\n\nconst rowDragStyle = (index) => {\n if (\n draggedIndex.value === null ||\n dragOverIndex.value === null ||\n draggedIndex.value === dragOverIndex.value ||\n index === draggedIndex.value\n ) {\n return {};\n }\n\n if (draggedIndex.value < dragOverIndex.value) {\n if (index > draggedIndex.value && index <= dragOverIndex.value) {\n return { transform: `translateY(-${dragRowHeight.value}px)` };\n }\n } else if (index >= dragOverIndex.value && index < draggedIndex.value) {\n return { transform: `translateY(${dragRowHeight.value}px)` };\n }\n\n return {};\n};\n\nconst dropRow = (toIndex, event) => {\n event.preventDefault();\n\n if (!canReorder.value || draggedIndex.value === null) {\n endDrag();\n return;\n }\n\n const targetIndex = getDropTargetIndex(\n event,\n dragOverIndex.value ?? toIndex,\n );\n\n if (draggedIndex.value === targetIndex) {\n endDrag();\n return;\n }\n\n const result = reorderRows({\n data: localData.value,\n fromIndex: draggedIndex.value,\n toIndex: targetIndex,\n orderField: props.orderField,\n mutateRows: props.mutateRows,\n });\n\n if (props.mutateRows) {\n props.data.splice(0, props.data.length, ...result.data);\n localData.value = props.data;\n } else {\n localData.value = result.data;\n }\n\n emit('reorder', {\n ...result,\n rowKey: getRowKey(result.item, targetIndex, props.rowKey),\n });\n endDrag();\n};\n\nconst sortBy = (field) => {\n emit('sort', field);\n};\n\nconst joinClasses = (...classes) => {\n return classes.flatMap((value) => {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return [];\n }).filter(Boolean).join(' ');\n};\n\nconst updateSearchShowDeleted = (value) => {\n emit('update:searchShowDeleted', value);\n};\n\nconst truncateText = (value) => {\n const stringValue = String(value ?? '');\n const maxLength = Number(props.maxTextLength);\n\n if (!Number.isFinite(maxLength) || maxLength <= 0 || stringValue.length <= maxLength) {\n return stringValue;\n }\n\n return `${stringValue.slice(0, maxLength)}...`;\n};\n\nconst getCellContent = (item, column) => {\n if (column.slot) {\n return null; // Will be handled by slot\n }\n \n if (column.render) {\n return column.render(item);\n }\n \n // Handle nested properties\n const value = column.key.split('.').reduce((obj, key) => obj?.[key], item);\n \n // Return \"-\" for empty values (null, undefined, empty string)\n if (value === null || value === undefined || value === '') {\n return '-';\n }\n \n return truncateText(value);\n};\n\nconst isDeleted = (item) => {\n return item.deleted_at || item.deleted;\n};\n\nconst getColumnClass = (column) => {\n return joinClasses(\n props.dense ? 'px-3 py-2 text-sm truncate' : 'px-6 py-4 text-sm truncate',\n !column.isSecondary ? 'font-medium' : '',\n column.isSecondary ? 'text-neutral-600 dark:text-neutral-200' : '',\n column.align === 'right' ? 'text-right' : '',\n column.class,\n column.cellClass,\n );\n};\n\nconst getHeaderClass = (column) => {\n return joinClasses(\n column.sortable ? 'cursor-pointer transition-colors duration-150' : '',\n props.dense\n ? 'px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-[0.12em]'\n : 'px-6 py-3 text-left text-[11px] font-semibold uppercase tracking-[0.12em]',\n 'text-neutral-600 dark:text-neutral-200',\n column.sortable ? 'hover:bg-neutral-100 dark:hover:bg-neutral-900' : '',\n column.align === 'right' ? 'text-right' : '',\n column.headerClass,\n );\n};\n\nconst getContentClass = (column) => {\n return joinClasses(\n column.sortable ? 'flex items-center space-x-1' : '',\n column.align === 'right' ? 'w-full text-right justify-end' : '',\n column.contentClass,\n );\n};\n\nconst getColumnWidthStyle = (column) => {\n return column.width ? { width: column.width } : {};\n};\n\nconst actionHeaderClass = computed(() => {\n return joinClasses(\n props.dense\n ? 'px-3 py-2 text-right text-[11px] font-semibold uppercase tracking-[0.12em]'\n : 'px-6 py-3 text-right text-[11px] font-semibold uppercase tracking-[0.12em]',\n 'text-neutral-600 dark:text-neutral-200',\n );\n});\n\nconst actionCellClass = computed(() => {\n return joinClasses(\n props.dense ? 'px-3 py-2 whitespace-nowrap text-right text-sm font-medium' : 'px-6 py-4 whitespace-nowrap text-right text-sm font-medium',\n );\n});\n</script>\n\n<template>\n <div class=\"space-y-6\">\n <TableSearch\n v-if=\"search\"\n :model-value=\"searchQuery\"\n :placeholder=\"searchPlaceholder\"\n :count=\"resolvedSearchCount\"\n :count-label=\"searchCountLabel\"\n :query-label=\"searchQueryLabel\"\n :show-deleted=\"searchShowDeleted\"\n :show-deleted-toggle=\"searchShowDeletedToggle\"\n :show-deleted-label=\"searchShowDeletedLabel\"\n :search-mode=\"searchMode\"\n :search-fields-layout=\"searchFieldsLayout\"\n @update:model-value=\"searchQuery = $event\"\n @update:show-deleted=\"updateSearchShowDeleted\"\n >\n <template\n v-if=\"$slots['search-fields']\"\n #search-fields\n >\n <slot name=\"search-fields\" />\n </template>\n\n <template\n v-if=\"$slots.controls\"\n #controls\n >\n <slot name=\"controls\" />\n </template>\n </TableSearch>\n\n <div\n :class=\"[\n 'bg-white/90 backdrop-blur-sm dark:bg-neutral-950/90',\n isCard\n ? 'animate-fadeIn rounded-2xl border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden'\n : '',\n ]\"\n >\n <div :class=\"['overflow-x-auto', isCard ? 'rounded-t-xl' : '']\">\n <table :class=\"joinClasses('min-w-full divide-y divide-neutral-200 dark:divide-neutral-800', tableClass)\">\n <thead :class=\"joinClasses('bg-neutral-50/80 dark:bg-neutral-900/80', theadClass)\">\n <tr :class=\"headerRowClass\">\n <th v-if=\"orderable\" class=\"w-10 px-2 py-3 text-center text-[11px] font-semibold uppercase tracking-[0.12em] text-neutral-600 dark:text-neutral-200\">#</th>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <ThSortable\n v-if=\"column.sortable\"\n :field=\"column.key\"\n :current-sort-field=\"sortField\"\n :current-direction=\"sortDirection\"\n :header-class=\"getHeaderClass(column)\"\n :header-style=\"getColumnWidthStyle(column)\"\n :content-class=\"getContentClass(column)\"\n @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"getHeaderClass(column)\"\n :style=\"getColumnWidthStyle(column)\"\n >\n <div :class=\"getContentClass(column)\">\n {{ column.label }}\n </div>\n </th>\n </template>\n\n <th\n v-if=\"$slots.actions\"\n :class=\"actionHeaderClass\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n <tbody :class=\"joinClasses('divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950', tbodyClass)\">\n <tr\n v-for=\"(item, index) in filteredData\"\n :key=\"getRowKey(item, index, rowKey)\"\n :data-row-index=\"index\"\n :class=\"joinClasses(\n rowClasses(item, index),\n 'transition-[transform,opacity,box-shadow] duration-100 ease-out',\n draggedIndex === index ? 'pointer-events-none opacity-0' : '',\n dragOverIndex === index ? 'ring-2 ring-inset ring-neutral-400 dark:ring-neutral-500' : '',\n )\"\n :style=\"rowDragStyle(index)\"\n @dragenter=\"updateDragOver(index, $event)\"\n @dragover.prevent=\"updateDragOver(index, $event)\"\n @drop=\"dropRow(index, $event)\"\n >\n <td v-if=\"orderable\" class=\"w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400\">\n <span class=\"inline-flex items-center gap-1\">\n <span\n :draggable=\"canReorder\"\n class=\"cursor-grab touch-none active:cursor-grabbing\"\n :aria-label=\"`Drag row ${index + 1}`\"\n @dragstart=\"startDrag(index, $event)\"\n @dragend=\"endDrag\"\n >\n <GripVertical class=\"size-4\" />\n </span>\n <span>{{ index + 1 }}</span>\n </span>\n </td>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"getColumnClass(column)\" :style=\"getColumnWidthStyle(column)\">\n <template v-if=\"column.key === 'name' && !column.slot\">\n <div :class=\"joinClasses('flex items-center', getContentClass(column))\">\n <div class=\"truncate text-sm font-medium text-neutral-950 dark:text-neutral-50\" :title=\"getCellContent(item, column)\">\n {{ getCellContent(item, column) }}\n </div>\n <span v-if=\"isDeleted(item)\" class=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-700 dark:bg-red-950/60 dark:text-neutral-100\">\n {{ deletedLabel }}\n </span>\n </div>\n </template>\n <div v-else-if=\"column.slot\" :class=\"getContentClass(column)\">\n <slot\n :name=\"column.slot\"\n :item=\"item\"\n :column=\"column\"\n :index=\"index\"\n />\n </div>\n <div v-else-if=\"column.render\" :class=\"getContentClass(column)\" v-html=\"column.render(item)\"></div>\n <div v-else :class=\"getContentClass(column)\">\n {{ getCellContent(item, column) }}\n </div>\n </td>\n </template>\n\n <td v-if=\"$slots.actions\" :class=\"actionCellClass\">\n <slot name=\"actions\" :item=\"item\" :index=\"index\" />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div v-if=\"!hasData\" class=\"py-12 text-center\">\n <div class=\"mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900\">\n <component :is=\"emptyState.icon\" class=\"h-8 w-8 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <h3 class=\"mb-2 text-lg font-semibold text-neutral-950 dark:text-neutral-50\">{{ emptyState.title }}</h3>\n <p class=\"mb-4 text-neutral-600 dark:text-neutral-200\">{{ emptyState.description }}</p>\n <LinkButton v-if=\"emptyState.actionText && emptyState.actionUrl\" :href=\"emptyState.actionUrl\" variant=\"primary\">\n {{ emptyState.actionText }}\n </LinkButton>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { CheckIcon, PencilSquareIcon } from '@heroicons/vue/24/outline';\nimport { GripVertical, Search } from \"@lucide/vue\";\nimport Button from './Button.vue';\nimport InputGroup from './InputGroup.vue';\nimport LinkButton from './LinkButton.vue';\nimport ThSortable from './ThSortable.vue';\nimport { getNestedValue as getSharedNestedValue, getRowKey as resolveRowKey, reorderRows, setNestedValue as setSharedNestedValue } from './tableListOrdering.js';\n\nconst slots = useSlots();\n\nconst props = defineProps({\n data: {\n type: Array,\n required: true,\n },\n columns: {\n type: Array,\n required: true,\n },\n sortField: {\n type: String,\n default: '',\n },\n sortDirection: {\n type: String,\n default: 'asc',\n },\n emptyState: {\n type: Object,\n default: () => ({\n icon: 'UsersIcon',\n title: 'No data found',\n description: 'No items to display.',\n actionText: null,\n actionUrl: null,\n }),\n },\n rowClasses: {\n type: Function,\n default: (item) => [\n 'transition-colors duration-150',\n item.deleted_at\n ? 'bg-red-50 hover:bg-red-100 dark:bg-red-950/30 dark:hover:bg-red-950/50'\n : 'odd:bg-white even:bg-neutral-50 hover:bg-neutral-100 dark:odd:bg-neutral-950 dark:even:bg-neutral-900/70 dark:hover:bg-neutral-900',\n ],\n },\n getErrorMessage: {\n type: Function,\n default: () => null,\n },\n search: {\n type: Boolean,\n default: true,\n },\n searchPlaceholder: {\n type: String,\n default: 'Search...',\n },\n searchValue: {\n type: String,\n default: undefined,\n },\n searchMode: {\n type: String,\n default: 'server',\n validator: (value) => ['client', 'server'].includes(value),\n },\n rowKey: {\n type: [String, Function],\n default: 'id',\n },\n isDeletedFn: {\n type: Function,\n default: (item) => Boolean(item?.deleted_at || item?.deleted),\n },\n mutateRows: {\n type: Boolean,\n default: true,\n },\n isCard: {\n type: Boolean,\n default: true,\n },\n tableClass: {\n type: String,\n default: '',\n },\n theadClass: {\n type: String,\n default: '',\n },\n tbodyClass: {\n type: String,\n default: '',\n },\n headerRowClass: {\n type: String,\n default: '',\n },\n dense: {\n type: Boolean,\n default: false,\n },\n actionsLabel: {\n type: String,\n default: 'Actions',\n },\n deletedLabel: {\n type: String,\n default: 'Deleted',\n },\n maxTextLength: {\n type: Number,\n default: 40,\n },\n rowEditing: {\n type: Boolean,\n default: true,\n },\n editingRowKey: {\n type: [String, Number, null],\n default: undefined,\n },\n canEditRow: {\n type: Function,\n default: () => true,\n },\n editLabel: {\n type: String,\n default: 'Edit row',\n },\n cancelLabel: {\n type: String,\n default: 'Done editing',\n },\n expandedRowKey: {\n type: [String, Number, null],\n default: null,\n },\n expandedRowClass: {\n type: String,\n default: '',\n },\n expandedCellClass: {\n type: String,\n default: 'p-0',\n },\n orderable: {\n type: Boolean,\n default: false,\n },\n orderField: {\n type: String,\n default: 'order',\n },\n});\n\nconst emit = defineEmits(['sort', 'update', 'reorder', 'update:editingRowKey', 'edit-start', 'edit-cancel', 'update:searchValue']);\n\nconst localSortField = ref(props.sortField);\nconst localSortDirection = ref(props.sortDirection);\nconst localData = ref(props.data);\nconst internalSearchQuery = ref('');\nconst searchQuery = computed({\n get: () => props.searchValue ?? internalSearchQuery.value,\n set: (value) => {\n internalSearchQuery.value = value;\n emit('update:searchValue', value);\n },\n});\nconst internalEditingRowKey = ref(null);\nconst editingDraft = ref({});\nconst resolvedEditingRowKey = computed(() => {\n return props.editingRowKey !== undefined ? props.editingRowKey : internalEditingRowKey.value;\n});\n\nwatch(() => props.data, (value) => {\n localData.value = value;\n});\n\nconst draggedIndex = ref(null);\nconst dragOverIndex = ref(null);\nconst canReorder = computed(() => {\n return props.orderable && !searchQuery.value.trim() && !localSortField.value;\n});\n\nconst startDrag = (index, event) => {\n if (!canReorder.value) {\n event.preventDefault();\n return;\n }\n\n draggedIndex.value = index;\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(index));\n};\n\nconst endDrag = () => {\n draggedIndex.value = null;\n dragOverIndex.value = null;\n};\n\nconst dropRow = (toIndex, event) => {\n event.preventDefault();\n\n if (!canReorder.value || draggedIndex.value === null || draggedIndex.value === toIndex) {\n endDrag();\n return;\n }\n\n const result = reorderRows({\n data: localData.value,\n fromIndex: draggedIndex.value,\n toIndex,\n orderField: props.orderField,\n mutateRows: props.mutateRows,\n });\n\n if (props.mutateRows) {\n props.data.splice(0, props.data.length, ...result.data);\n localData.value = props.data;\n } else {\n localData.value = result.data;\n }\n\n emit('reorder', {\n ...result,\n rowKey: resolveRowKey(result.item, toIndex, props.rowKey),\n });\n endDrag();\n};\n\nwatch(() => props.sortField, (value) => {\n localSortField.value = value;\n});\n\nwatch(() => props.sortDirection, (value) => {\n localSortDirection.value = value;\n});\n\nwatch(() => props.rowEditing, (value) => {\n if (!value) {\n resetEditState();\n }\n});\n\nwatch(resolvedEditingRowKey, (nextKey, previousKey) => {\n if (nextKey === previousKey) {\n return;\n }\n\n if (nextKey === null || nextKey === undefined || nextKey === '') {\n editingDraft.value = {};\n return;\n }\n\n const activeItem = props.data.find((item, index) => getRowKey(item, index) === nextKey);\n editingDraft.value = activeItem ? cloneValue(activeItem) : {};\n});\n\nwatch(\n () => props.data,\n () => {\n if (resolvedEditingRowKey.value === null || resolvedEditingRowKey.value === undefined) {\n return;\n }\n\n const activeItem = props.data.find((item, index) => getRowKey(item, index) === resolvedEditingRowKey.value);\n if (!activeItem) {\n resetEditState();\n }\n },\n { deep: true },\n);\n\nconst sortedData = computed(() => {\n let filteredData = localData.value;\n\n if (props.searchMode === 'client' && props.search && searchQuery.value.trim()) {\n const query = searchQuery.value.toLowerCase().trim();\n filteredData = localData.value.filter((item) => {\n return props.columns.some((column) => {\n if (!column.searchable) {\n return false;\n }\n\n const value = getNestedValue(item, column.key);\n if (value === null || value === undefined || value === '') {\n return false;\n }\n\n return String(value).toLowerCase().includes(query);\n });\n });\n }\n\n if (!localSortField.value) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n const aValue = getNestedValue(a, localSortField.value);\n const bValue = getNestedValue(b, localSortField.value);\n\n if (aValue === null || aValue === undefined || aValue === '') return 1;\n if (bValue === null || bValue === undefined || bValue === '') return -1;\n\n let comparison = 0;\n if (aValue < bValue) comparison = -1;\n if (aValue > bValue) comparison = 1;\n\n return localSortDirection.value === 'desc' ? -comparison : comparison;\n });\n});\n\nconst hasActionsSlot = computed(() => Boolean(slots.actions));\nconst hasActionsColumn = computed(() => hasActionsSlot.value || props.rowEditing);\nconst hasData = computed(() => sortedData.value && sortedData.value.length > 0);\nconst hasExpandedRow = computed(() => Boolean(slots['expanded-row']));\n\nconst sortBy = (field) => {\n if (localSortField.value === field) {\n localSortDirection.value = localSortDirection.value === 'asc' ? 'desc' : 'asc';\n } else {\n localSortField.value = field;\n localSortDirection.value = 'asc';\n }\n\n emit('sort', { field, direction: localSortDirection.value });\n};\n\nconst joinClasses = (...classes) => {\n return classes.flatMap((value) => {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return [];\n }).filter(Boolean).join(' ');\n};\n\nconst cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneValue(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, cloneValue(entry)]),\n );\n }\n\n return value;\n};\n\nconst truncateText = (value) => {\n const stringValue = String(value ?? '');\n const maxLength = Number(props.maxTextLength);\n\n if (!Number.isFinite(maxLength) || maxLength <= 0 || stringValue.length <= maxLength) {\n return stringValue;\n }\n\n return `${stringValue.slice(0, maxLength)}...`;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!path || typeof path !== 'string') {\n return obj;\n }\n\n return getSharedNestedValue(obj, path);\n};\n\nconst setNestedValue = (obj, path, value) => {\n if (!path || typeof path !== 'string' || obj == null) {\n return;\n }\n\n setSharedNestedValue(obj, path, value);\n};\n\nconst getDataIndex = (item) => {\n if (item?.id) {\n return localData.value.findIndex((row) => row?.id === item.id);\n }\n\n return localData.value.findIndex((row) => row === item);\n};\n\nconst getRowKey = (item, index) => {\n return resolveRowKey(item, index, props.rowKey);\n};\n\nconst getEditSlotName = (column) => `${column.slot}-edit`;\n\nconst isDeleted = (item) => props.isDeletedFn(item);\n\nconst setEditingRowKey = (value) => {\n if (props.editingRowKey === undefined) {\n internalEditingRowKey.value = value;\n }\n\n emit('update:editingRowKey', value);\n};\n\nconst isEditingRow = (item, index) => {\n return props.rowEditing && resolvedEditingRowKey.value !== null && resolvedEditingRowKey.value === getRowKey(item, index);\n};\n\nconst isRowEditDisabled = (item, index) => {\n if (!props.rowEditing) {\n return true;\n }\n\n if (!props.canEditRow(item, index) || isDeleted(item)) {\n return true;\n }\n\n return resolvedEditingRowKey.value !== null && !isEditingRow(item, index);\n};\n\nconst resetEditState = () => {\n setEditingRowKey(null);\n};\n\nconst startEdit = (item, index) => {\n if (isRowEditDisabled(item, index)) {\n return;\n }\n\n const rowKey = getRowKey(item, index);\n setEditingRowKey(rowKey);\n emit('edit-start', {\n item,\n index: getDataIndex(item),\n rowKey,\n });\n};\n\nconst cancelEdit = (item, index) => {\n emit('edit-cancel', {\n item,\n index: getDataIndex(item),\n rowKey: getRowKey(item, index),\n });\n resetEditState();\n};\n\nconst updateDraft = (field, value, item, eventName = undefined) => {\n setNestedValue(editingDraft.value, field, value);\n\n if (props.mutateRows) {\n setNestedValue(item, field, cloneValue(value));\n }\n\n emit('update', {\n item,\n draft: editingDraft.value,\n field,\n value,\n index: getDataIndex(item),\n rowKey: resolvedEditingRowKey.value,\n event: eventName,\n });\n};\n\nconst getCellContent = (item, column) => {\n if (column.slot) {\n return null;\n }\n\n if (column.render) {\n return column.render(item);\n }\n\n const value = getNestedValue(item, column.key);\n if (value === null || value === undefined || value === '') {\n return '-';\n }\n\n return truncateText(value);\n};\n\nconst getColumnClass = (column, item, index) => {\n const isEditing = isEditingRow(item, index) && (column.input || slots[getEditSlotName(column)]);\n return joinClasses(\n isEditing\n ? (props.dense ? 'px-3 py-2 text-sm align-top' : 'px-6 py-3 text-sm align-top')\n : (props.dense ? 'px-3 py-2 text-sm truncate' : 'px-6 py-4 text-sm truncate'),\n !column.isSecondary ? 'font-medium' : '',\n column.isSecondary ? 'text-neutral-600 dark:text-neutral-200' : '',\n column.align === 'right' ? 'text-right' : '',\n column.class,\n column.cellClass,\n );\n};\n\nconst getHeaderClass = (column) => {\n return joinClasses(\n column.sortable ? 'cursor-pointer transition-colors duration-150' : '',\n props.dense\n ? 'px-3 py-2 text-left text-xs font-medium uppercase tracking-wider'\n : 'px-6 py-3 text-left text-xs font-medium uppercase tracking-wider',\n 'text-neutral-500 dark:text-neutral-200',\n column.sortable ? 'hover:bg-neutral-100 dark:hover:bg-neutral-900' : '',\n column.align === 'right' ? 'text-right' : '',\n column.headerClass,\n );\n};\n\nconst getContentClass = (column) => {\n return joinClasses(\n column.sortable ? 'flex items-center space-x-1' : '',\n column.align === 'right' ? 'w-full text-right justify-end' : '',\n column.contentClass,\n );\n};\n\nconst getColumnWidthStyle = (column) => {\n return column.width ? { width: column.width } : {};\n};\n\nconst getInputType = (column) => column.inputType || 'text';\n\nconst getInputClass = (column) => {\n let classes = 'block w-full max-w-xs min-w-[12rem] rounded-lg border border-neutral-200 bg-neutral-50 px-3 py-2 text-sm text-neutral-900 shadow-none placeholder:text-neutral-400 transition-colors duration-200 focus:border-neutral-900 focus:bg-white focus:outline-none focus:ring-2 focus:ring-neutral-950/10 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-50 dark:placeholder:text-neutral-500 dark:focus:border-neutral-100 dark:focus:bg-neutral-950 dark:focus:ring-neutral-100/10 sm:min-w-[10rem]';\n\n if (column.inputClass) {\n classes += ` ${column.inputClass}`;\n }\n\n if (column.isSecondary) {\n classes += ' text-neutral-600 dark:text-neutral-200';\n }\n\n return classes;\n};\n\nconst getInputPlaceholder = (column) => column.placeholder || column.label || '';\n\nconst getInputValue = (item, column, index) => {\n if (isEditingRow(item, index)) {\n return getNestedValue(editingDraft.value, column.key) ?? '';\n }\n\n return getNestedValue(item, column.key) ?? '';\n};\n\nconst getColumnError = (item, column) => {\n const arrayIndex = getDataIndex(item);\n\n if (arrayIndex === -1) {\n return null;\n }\n\n return props.getErrorMessage(arrayIndex, column.key);\n};\n\nconst getSlotBindings = (item, column, index) => ({\n item,\n column,\n index,\n isEditing: isEditingRow(item, index),\n draft: editingDraft.value,\n rowKey: getRowKey(item, index),\n updateDraft: (field, value) => updateDraft(field, value, item),\n startEdit: () => startEdit(item, index),\n cancelEdit: () => cancelEdit(item, index),\n});\n\nconst resolveColumnDisabled = (column, item, index) => {\n const disabled = typeof column.disabled === 'function'\n ? column.disabled(item, index)\n : column.disabled;\n\n return Boolean(disabled || isDeleted(item));\n};\n\nconst actionHeaderClass = computed(() => {\n return joinClasses(\n props.dense\n ? 'px-3 py-2 text-right text-xs font-medium uppercase tracking-wider'\n : 'px-6 py-3 text-right text-xs font-medium uppercase tracking-wider',\n 'text-neutral-500 dark:text-neutral-200',\n );\n});\n\nconst actionCellClass = computed(() => {\n return joinClasses(\n props.dense ? 'px-3 py-2 whitespace-nowrap text-right text-sm font-medium' : 'px-6 py-4 whitespace-nowrap text-right text-sm font-medium',\n );\n});\n</script>\n\n<template>\n <div :class=\"['bg-white dark:bg-neutral-950', isCard ? 'mx-4 rounded-xl animate-fadeIn border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0 overflow-hidden': '']\">\n <div\n v-if=\"search\"\n :class=\"[\n 'px-6 py-4',\n isCard ? 'rounded-t-xl border-b border-neutral-200 bg-neutral-50/80 dark:border-neutral-800 dark:bg-neutral-900/80' : 'mb-4 bg-white/80 backdrop-blur-sm dark:bg-neutral-950/80'\n ]\"\n >\n <InputGroup\n :model-value=\"searchQuery\"\n type=\"text\"\n root-class=\"max-w-sm\"\n :placeholder=\"searchPlaceholder\"\n @update:model-value=\"searchQuery = $event\"\n >\n <template #leading-icon>\n <Search class=\"h-5 w-5\" />\n </template>\n </InputGroup>\n </div>\n\n <div v-if=\"hasData\" :class=\"['overflow-x-auto', isCard ? (search ? '' : 'rounded-t-xl') : '']\">\n <table :class=\"joinClasses('min-w-full divide-y divide-neutral-200 dark:divide-neutral-800', tableClass)\">\n <thead :class=\"joinClasses('bg-neutral-50 dark:bg-neutral-900', theadClass)\">\n <tr :class=\"headerRowClass\">\n <th v-if=\"orderable\" class=\"w-10 px-2 py-3 text-center text-xs font-medium uppercase tracking-wider text-neutral-500 dark:text-neutral-200\">#</th>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <ThSortable\n v-if=\"column.sortable\"\n :field=\"column.key\"\n :current-sort-field=\"localSortField\"\n :current-direction=\"localSortDirection\"\n :header-class=\"getHeaderClass(column)\"\n :header-style=\"getColumnWidthStyle(column)\"\n :content-class=\"getContentClass(column)\"\n @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"getHeaderClass(column)\"\n :style=\"getColumnWidthStyle(column)\"\n >\n <div :class=\"getContentClass(column)\">\n {{ column.label }}\n </div>\n </th>\n </template>\n\n <th\n v-if=\"hasActionsColumn\"\n :class=\"actionHeaderClass\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n\n <tbody :class=\"joinClasses('divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950', tbodyClass)\">\n <template\n v-for=\"(item, index) in sortedData\"\n :key=\"getRowKey(item, index)\"\n >\n <tr\n :class=\"joinClasses(rowClasses(item, index), dragOverIndex === index ? 'ring-2 ring-inset ring-neutral-400 dark:ring-neutral-500' : '')\"\n @dragover.prevent=\"canReorder && (dragOverIndex = index)\"\n @drop=\"dropRow(index, $event)\"\n >\n <td v-if=\"orderable\" class=\"w-10 whitespace-nowrap px-2 py-4 text-center text-sm text-neutral-500 dark:text-neutral-400\">\n <span class=\"inline-flex items-center gap-1\">\n <span\n :draggable=\"canReorder\"\n class=\"cursor-grab touch-none active:cursor-grabbing\"\n :aria-label=\"`Drag row ${index + 1}`\"\n @dragstart=\"startDrag(index, $event)\"\n @dragend=\"endDrag\"\n >\n <GripVertical class=\"size-4\" />\n </span>\n <span>{{ index + 1 }}</span>\n </span>\n </td>\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"getColumnClass(column, item, index)\" :style=\"getColumnWidthStyle(column)\">\n <div :class=\"getContentClass(column)\">\n <template v-if=\"isEditingRow(item, index) && column.slot && slots[getEditSlotName(column)]\">\n <slot\n :name=\"getEditSlotName(column)\"\n v-bind=\"getSlotBindings(item, column, index)\"\n />\n </template>\n\n <InputGroup\n v-else-if=\"isEditingRow(item, index) && column.input\"\n :type=\"getInputType(column)\"\n :class=\"getInputClass(column)\"\n :placeholder=\"getInputPlaceholder(column)\"\n :model-value=\"getInputValue(item, column, index)\"\n :disabled=\"resolveColumnDisabled(column, item, index)\"\n :maxlength=\"column.maxlength\"\n :error-message=\"getColumnError(item, column)\"\n :helper-text=\"''\"\n @update:model-value=\"value => updateDraft(column.key, value, item)\"\n @blur=\"event => updateDraft(column.key, event?.target?.value ?? getInputValue(item, column, index), item, 'blur')\"\n />\n\n <template v-else-if=\"column.key === 'name' && !column.slot\">\n <div class=\"flex items-center\">\n <div class=\"text-sm font-medium truncate\" :title=\"getCellContent(item, column)\">\n {{ getCellContent(item, column) }}\n </div>\n <span\n v-if=\"isDeleted(item)\"\n class=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-1 text-xs font-medium text-red-800 dark:bg-red-950/60 dark:text-neutral-100\"\n >\n {{ deletedLabel }}\n </span>\n </div>\n </template>\n\n <slot\n v-else-if=\"column.slot\"\n :name=\"column.slot\"\n v-bind=\"getSlotBindings(item, column, index)\"\n />\n\n <div v-else-if=\"column.render\" v-html=\"column.render(item)\"></div>\n\n <div v-else>\n {{ getCellContent(item, column) }}\n </div>\n </div>\n </td>\n </template>\n\n <td\n v-if=\"hasActionsColumn\"\n :class=\"actionCellClass\"\n >\n <div class=\"flex items-center justify-end gap-2\">\n <slot\n v-if=\"hasActionsSlot\"\n name=\"actions\"\n v-bind=\"getSlotBindings(item, null, index)\"\n />\n\n <template v-if=\"rowEditing && isEditingRow(item, index)\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n :title=\"cancelLabel\"\n :aria-label=\"cancelLabel\"\n @click=\"cancelEdit(item, index)\"\n >\n <CheckIcon class=\"size-4\" />\n </Button>\n </template>\n\n <Button\n v-else-if=\"rowEditing\"\n type=\"button\"\n variant=\"secondary\"\n size=\"icon\"\n :disabled=\"isRowEditDisabled(item, index)\"\n :title=\"editLabel\"\n :aria-label=\"editLabel\"\n @click=\"startEdit(item, index)\"\n >\n <PencilSquareIcon class=\"size-4\" />\n </Button>\n </div>\n </td>\n </tr>\n <tr\n v-if=\"hasExpandedRow && expandedRowKey === getRowKey(item, index)\"\n :class=\"expandedRowClass\"\n >\n <td\n :colspan=\"columns.length + (hasActionsColumn ? 1 : 0) + (orderable ? 1 : 0)\"\n :class=\"expandedCellClass\"\n >\n <slot\n name=\"expanded-row\"\n :item=\"item\"\n :index=\"index\"\n :row-key=\"getRowKey(item, index)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n </div>\n\n <div v-else class=\"py-12 text-center\">\n <div class=\"mb-4 inline-flex h-16 w-16 items-center justify-center rounded-full bg-neutral-100 dark:bg-neutral-900\">\n <component :is=\"emptyState.icon\" class=\"h-8 w-8 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <h3 class=\"mb-2 text-lg font-medium text-neutral-950 dark:text-neutral-50\">{{ emptyState.title }}</h3>\n <p class=\"mb-4 text-neutral-500 dark:text-neutral-200\">{{ emptyState.description }}</p>\n <LinkButton v-if=\"emptyState.actionText && emptyState.actionUrl\" :href=\"emptyState.actionUrl\" variant=\"primary\">\n {{ emptyState.actionText }}\n </LinkButton>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from \"vue\";\n\ndefineEmits([\"close\"]);\n\nconst props = defineProps<{\n class?: HTMLAttributes[\"class\"];\n variant?: \"default\" | \"destructive\" | \"success\" | \"error\";\n}>();\n\nconst variants = {\n default: \"bg-background border-border text-foreground\",\n destructive: \"bg-destructive text-destructive-foreground border-destructive\",\n success: \"bg-green-500 text-white border-green-600 dark:bg-green-700 dark:border-green-800\",\n error: \"bg-red-500 text-white border-red-600 dark:bg-red-900 dark:border-red-950\",\n};\n</script>\n\n<template>\n <div\n :class=\"[\n 'relative flex w-full max-w-sm items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all',\n variants[variant || 'default'],\n props.class,\n ]\"\n role=\"alert\"\n >\n <div class=\"grid gap-1\">\n <slot />\n </div>\n <button\n class=\"absolute top-2 right-2 rounded-md opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n @click=\"$emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span class=\"sr-only\">Close</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HTMLAttributes } from \"vue\";\n\ndefineEmits([\"close\"]);\n\nconst props = defineProps<{\n class?: HTMLAttributes[\"class\"];\n variant?: \"default\" | \"destructive\" | \"success\" | \"error\";\n}>();\n\nconst variants = {\n default: \"bg-background border-border text-foreground\",\n destructive: \"bg-destructive text-destructive-foreground border-destructive\",\n success: \"bg-green-500 text-white border-green-600 dark:bg-green-700 dark:border-green-800\",\n error: \"bg-red-500 text-white border-red-600 dark:bg-red-900 dark:border-red-950\",\n};\n</script>\n\n<template>\n <div\n :class=\"[\n 'relative flex w-full max-w-sm items-center justify-between space-x-4 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all',\n variants[variant || 'default'],\n props.class,\n ]\"\n role=\"alert\"\n >\n <div class=\"grid gap-1\">\n <slot />\n </div>\n <button\n class=\"absolute top-2 right-2 rounded-md opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n @click=\"$emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span class=\"sr-only\">Close</span>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport Toast from \"./Toast.vue\";\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n message: string;\n variant: \"success\" | \"error\";\n duration?: number;\n}\n\nconst props = defineProps<{\n maxToasts?: number;\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n variant?: \"success\" | \"error\";\n defaultTitle?: string;\n}>();\n\nconst toasts = ref<ToastMessage[]>([]);\n\nconst addToast = (\n message: string,\n options: {\n variant?: \"success\" | \"error\";\n duration?: number;\n title?: string;\n } = {},\n): void => {\n const {\n variant = \"success\",\n duration = 5000,\n title,\n } = options;\n \n const id = Date.now().toString();\n const toast: ToastMessage = {\n id,\n title: title ?? (props.defaultTitle || undefined),\n message,\n variant,\n duration,\n };\n\n toasts.value.push(toast);\n\n if (duration > 0) {\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n};\n\nconst removeToast = (id: string): void => {\n const index = toasts.value.findIndex((toast) => toast.id === id);\n\n if (index > -1) {\n toasts.value.splice(index, 1);\n }\n};\n\ndefineExpose({\n addToast,\n});\n</script>\n\n<template>\n <div class=\"fixed top-4 right-4 z-50 space-y-2\">\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :variant=\"toast.variant || props.variant\"\n @close=\"removeToast(toast.id)\"\n >\n <div v-if=\"toast.title\" class=\"font-semibold\">{{ toast.title }}</div>\n <div class=\"text-sm opacity-90\">{{ toast.message }}</div>\n </Toast>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport Toast from \"./Toast.vue\";\n\nexport interface ToastMessage {\n id: string;\n title?: string;\n message: string;\n variant: \"success\" | \"error\";\n duration?: number;\n}\n\nconst props = defineProps<{\n maxToasts?: number;\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n variant?: \"success\" | \"error\";\n defaultTitle?: string;\n}>();\n\nconst toasts = ref<ToastMessage[]>([]);\n\nconst addToast = (\n message: string,\n options: {\n variant?: \"success\" | \"error\";\n duration?: number;\n title?: string;\n } = {},\n): void => {\n const {\n variant = \"success\",\n duration = 5000,\n title,\n } = options;\n \n const id = Date.now().toString();\n const toast: ToastMessage = {\n id,\n title: title ?? (props.defaultTitle || undefined),\n message,\n variant,\n duration,\n };\n\n toasts.value.push(toast);\n\n if (duration > 0) {\n setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n};\n\nconst removeToast = (id: string): void => {\n const index = toasts.value.findIndex((toast) => toast.id === id);\n\n if (index > -1) {\n toasts.value.splice(index, 1);\n }\n};\n\ndefineExpose({\n addToast,\n});\n</script>\n\n<template>\n <div class=\"fixed top-4 right-4 z-50 space-y-2\">\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :variant=\"toast.variant || props.variant\"\n @close=\"removeToast(toast.id)\"\n >\n <div v-if=\"toast.title\" class=\"font-semibold\">{{ toast.title }}</div>\n <div class=\"text-sm opacity-90\">{{ toast.message }}</div>\n </Toast>\n </div>\n</template>\n","export { default as ActionCard } from './components/ActionCard.vue'\nexport { default as ActionMessage } from './components/ActionMessage.vue'\nexport { default as ActionSection } from './components/ActionSection.vue'\nexport { default as Badge } from './components/Badge.vue'\nexport { default as Button } from './components/Button.vue'\nexport { default as Card } from './components/Card.vue'\nexport { default as CardTabs } from './components/CardTabs.vue'\nexport { default as Checkbox } from './components/Checkbox.vue'\nexport { default as CheckboxInput } from './components/CheckboxInput.vue'\nexport { default as CheckboxMultipleInput } from './components/CheckboxMultipleInput.vue'\nexport { default as ColorPicker } from './components/ColorPicker.vue'\nexport { default as ConfirmationModal } from './components/ConfirmationModal.vue'\nexport { default as CustomSelect } from './components/CustomSelect.vue'\nexport { default as DateInput } from './components/DateInput.vue'\nexport { default as DateRangeInput } from './components/DateRangeInput.vue'\nexport { default as DialogModal } from './components/DialogModal.vue'\nexport { default as Divider } from './components/Divider.vue'\nexport { default as Dropdown } from './components/Dropdown.vue'\nexport { default as DropdownLink } from './components/DropdownLink.vue'\nexport { default as FormSection } from './components/FormSection.vue'\nexport { default as ImageInput } from './components/ImageInput.vue'\nexport { default as InputError } from './components/InputError.vue'\nexport { default as InputGroup } from './components/InputGroup.vue'\nexport { default as InputLabel } from './components/InputLabel.vue'\nexport { default as LinkButton } from './components/LinkButton.vue'\nexport { default as Modal } from './components/Modal.vue'\nexport { default as NotationInput } from './components/NotationInput.vue'\nexport { default as RadioInput } from './components/RadioInput.vue'\nexport { default as RadioMultipleInput } from './components/RadioMultipleInput.vue'\nexport { default as SectionBorder } from './components/SectionBorder.vue'\nexport { default as SectionTitle } from './components/SectionTitle.vue'\nexport { default as Sidebar } from './components/Sidebar.vue'\nexport { default as SidebarContent } from './components/SidebarContent.vue'\nexport { default as SidebarFooter } from './components/SidebarFooter.vue'\nexport { default as SidebarGroup } from './components/SidebarGroup.vue'\nexport { default as SidebarGroupContent } from './components/SidebarGroupContent.vue'\nexport { default as SidebarGroupLabel } from './components/SidebarGroupLabel.vue'\nexport { default as SidebarHeader } from './components/SidebarHeader.vue'\nexport { default as SidebarInset } from './components/SidebarInset.vue'\nexport { default as SidebarMenu } from './components/SidebarMenu.vue'\nexport { default as SidebarMenuButton } from './components/SidebarMenuButton.vue'\nexport { default as SidebarMenuItem } from './components/SidebarMenuItem.vue'\nexport { default as SidebarProvider } from './components/SidebarProvider.vue'\nexport { default as SidebarTrigger } from './components/SidebarTrigger.vue'\nexport { useSidebar } from './components/sidebar-context'\nexport { default as SelectInput } from './components/SelectInput.vue'\nexport { default as SlidePanel } from './components/SlidePanel.vue'\nexport { default as SortControls } from './components/SortControls.vue'\nexport { default as TableList } from './components/TableList.vue'\nexport { default as TableListForm } from './components/TableListForm.vue'\nexport { default as TableSearch } from './components/TableSearch.vue'\nexport { default as Toast } from './components/Toast.vue'\nexport { default as ToastContainer } from './components/ToastContainer.vue'\nexport { default as ToggleInput } from './components/ToggleInput.vue'\nexport { default as TextArea } from './components/TextArea.vue'\nexport { default as TextInput } from './components/TextInput.vue'\nexport { default as ThSortable } from './components/ThSortable.vue'\nexport { default as TinyEditor } from './components/TinyEditor.vue'\n","import type { App } from 'vue'\nimport * as components from './exports'\n\nexport default {\n install(app: App) {\n for (const [name, component] of Object.entries(components)) {\n app.component(name, component)\n }\n },\n}\n"],"x_google_ignoreList":[61,62,63,64,65,66,67,68,69,70,71,72,73],"mappings":"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"}
|