@enos5/enos-vue-default 1.7.3 → 1.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-tniGDCqg.js","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/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/SidebarContent.vue","../src/components/SidebarFooter.vue","../src/components/SidebarGroup.vue","../src/components/SidebarGroupContent.vue","../src/components/SidebarGroupLabel.vue","../src/components/SidebarHeader.vue","../src/components/SidebarInset.vue","../src/components/SidebarMenu.vue","../src/components/SidebarMenuButton.vue","../src/components/SidebarMenuItem.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/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/SortControls.vue","../src/components/ThSortable.vue","../src/components/TableSearch.vue","../src/components/TableList.vue","../src/components/TableListForm.vue","../src/components/Toast.vue","../src/components/ToastContainer.vue","../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:[&_span]:text-neutral-100 dark:[&_label]: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', text: 'text-blue-700', dot: 'bg-blue-600' },\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-secondary text-secondary-foreground 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 bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\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});\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=\"inline-flex items-center gap-2 rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors\"\n :class=\"[\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 ]\"\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=\"inline-flex h-4 w-4 items-center justify-center border text-[10px] font-bold leading-none\"\n :class=\"[\n isChecked ? 'border-current bg-white/15 text-current dark:bg-neutral-900/15' : 'border-current/70 text-transparent',\n 'rounded',\n ]\"\n >\n ✓\n </span>\n <span>{{ label }}</span>\n </label>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, useAttrs } from 'vue';\nimport { LockClosedIcon } from '@heroicons/vue/24/outline';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, null],\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false\n },\n disabledClass: {\n type: String,\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\n }\n});\n\nconst emit = defineEmits(['update:modelValue', 'blur']);\nconst attrs = useAttrs();\nconst input = ref(null);\nconst revealed = ref(false);\nconst DEFAULT_MAX_LENGTH = 254;\n\nconst baseType = computed(() => String(attrs.type ?? 'text'));\nconst isPasswordField = computed(() => baseType.value === 'password');\nconst inputType = computed(() => (isPasswordField.value && revealed.value) ? 'text' : baseType.value);\nconst normalizedValue = computed(() => props.modelValue ?? '');\n\nconst inputAttrs = computed(() => {\n const { class: _class, type: _type, ...rest } = attrs;\n if (rest.maxlength === undefined) {\n rest.maxlength = DEFAULT_MAX_LENGTH;\n }\n return rest;\n});\n\nconst inputClasses = computed(() => [\n 'w-full min-w-0 max-w-full 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',\n attrs.class,\n isPasswordField.value ? 'pr-10 pl-10' : '',\n]);\n\nconst toggleVisibility = () => {\n revealed.value = !revealed.value;\n};\n\nconst handleWheel = (event) => {\n if (inputType.value !== 'number') {\n return;\n }\n\n event.preventDefault();\n\n const scrollTarget = document.scrollingElement ?? document.documentElement ?? document.body;\n if (scrollTarget) {\n scrollTarget.scrollTop += event.deltaY;\n }\n};\n\nonMounted(() => {\n if (input.value?.hasAttribute('autofocus')) {\n input.value.focus();\n }\n});\n\ndefineExpose({ focus: () => input.value?.focus() });\n</script>\n\n<template>\n <div class=\"relative flex items-center\">\n <div\n v-if=\"isPasswordField\"\n class=\"absolute inset-y-0 left-0 flex items-center pointer-events-none pl-3\"\n >\n <LockClosedIcon class=\"h-5 w-5 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <input\n ref=\"input\"\n v-bind=\"inputAttrs\"\n :type=\"inputType\"\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\n :value=\"normalizedValue\"\n :disabled=\"props.disabled\"\n @input=\"emit('update:modelValue', $event.target.value)\"\n @blur=\"emit('blur', $event)\"\n @wheel=\"handleWheel\"\n >\n\n <button\n v-if=\"isPasswordField\"\n type=\"button\"\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\"\n :aria-label=\"revealed ? 'Hide password' : 'Show password'\"\n @click=\"toggleVisibility\"\n >\n <svg v-if=\"revealed\" class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\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\" />\n </svg>\n <svg v-else class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\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\" />\n </svg>\n </button>\n </div>\n</template>\n","<script setup>\nimport { computed, nextTick, onMounted, ref, useAttrs, watch } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n modelValue: String,\n disabled: {\n type: Boolean,\n default: false\n },\n disabledClass: {\n type: String,\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500'\n },\n autoResize: {\n type: Boolean,\n default: true,\n }\n});\n\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\nconst textarea = ref(null);\nconst DEFAULT_MAX_LENGTH = 1000;\n\nconst textareaAttrs = computed(() => {\n const { class: _class, ...rest } = attrs;\n if (rest.maxlength === undefined) {\n rest.maxlength = DEFAULT_MAX_LENGTH;\n }\n return rest;\n});\n\nconst textareaClasses = computed(() => [\n 'w-full min-w-0 max-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 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-auto' : 'resize-y',\n attrs.class,\n]);\n\nconst resizeTextarea = () => {\n if (!props.autoResize || !textarea.value) {\n return;\n }\n\n textarea.value.style.height = 'auto';\n textarea.value.style.height = `${textarea.value.scrollHeight}px`;\n};\n\nconst updateValue = (event) => {\n emit('update:modelValue', event.target.value);\n resizeTextarea();\n};\n\nonMounted(() => {\n if (textarea.value?.hasAttribute('autofocus')) {\n textarea.value.focus();\n }\n\n nextTick(() => {\n resizeTextarea();\n });\n});\n\nwatch(() => props.modelValue, () => {\n nextTick(() => {\n resizeTextarea();\n });\n});\n\ndefineExpose({ focus: () => textarea.value?.focus() });\n</script>\n\n<template>\n <div>\n <textarea\n ref=\"textarea\"\n v-bind=\"textareaAttrs\"\n :class=\"[textareaClasses, (props.disabled ? props.disabledClass : '')]\"\n :value=\"props.modelValue\"\n :disabled=\"props.disabled\"\n @input=\"updateValue\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, watch } from 'vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean, Array, null],\n default: '',\n },\n modelModifiers: {\n type: Object,\n default: () => ({}),\n },\n options: {\n type: Array,\n default: () => ([]),\n },\n placeholder: {\n type: String,\n default: '',\n },\n placeholderDisabled: {\n type: Boolean,\n default: false,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n softDeleteAware: {\n type: Boolean,\n default: false,\n },\n labelKey: {\n type: String,\n default: 'name',\n },\n valueKey: {\n type: String,\n default: 'id',\n },\n deletedKey: {\n type: String,\n default: 'deleted_at',\n },\n optionLabel: {\n type: Function,\n default: null,\n },\n baseClass: {\n type: [String, Array, Object],\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',\n },\n normalTextClass: {\n type: [String, Array, Object],\n default: 'text-neutral-950 dark:text-neutral-50',\n },\n deletedSelectedClass: {\n type: [String, Array, Object],\n default: 'text-red-600 dark:text-neutral-100',\n },\n optionClass: {\n type: [String, Array, Object],\n default: 'text-neutral-950 dark:text-neutral-50',\n },\n deletedOptionClass: {\n type: [String, Array, Object],\n default: 'text-red-600 dark:text-neutral-100',\n },\n placeholderClass: {\n type: [String, Array, Object],\n default: 'text-neutral-500 dark:text-neutral-200',\n },\n dropdownClass: {\n type: [String, Array, Object],\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',\n },\n dropdownOptionClass: {\n type: [String, Array, Object],\n default: 'cursor-pointer px-4 py-3 transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-900',\n },\n dropdownSelectedClass: {\n type: [String, Array, Object],\n default: 'bg-neutral-100 font-medium text-neutral-950 dark:bg-neutral-900 dark:text-neutral-50',\n }\n});\n\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\n\nconst isOpen = ref(false);\nconst rootRef = ref(null);\nconst triggerRef = ref(null);\nconst dropdownMenuRef = ref(null);\nconst dropdownStyle = ref({});\nconst isDarkMode = ref(false);\nconst isMounted = ref(false);\n\nconst isObjectOption = (option) => typeof option === 'object' && option !== null;\n\nconst optionValue = (option) => {\n if (isObjectOption(option)) {\n return option[props.valueKey];\n }\n\n return option;\n};\n\nconst optionText = (option) => {\n if (props.optionLabel) {\n return props.optionLabel(option);\n }\n\n if (isObjectOption(option)) {\n return option[props.labelKey] ?? option[props.valueKey] ?? '';\n }\n\n return option;\n};\n\nconst optionDeleted = (option) => {\n if (!props.softDeleteAware || !isObjectOption(option)) {\n return false;\n }\n\n return Boolean(option[props.deletedKey]);\n};\n\nconst modelValueArray = computed(() => (\n Array.isArray(props.modelValue) ? props.modelValue : []\n));\n\nconst modelValueAsString = computed(() => String(props.modelValue ?? ''));\nconst modelValueSet = computed(() => new Set(modelValueArray.value.map((value) => String(value))));\n\nconst selectedDeletedOption = computed(() => {\n if (props.multiple || !props.softDeleteAware || modelValueAsString.value === '') {\n return null;\n }\n\n return props.options.find((option) => (\n optionDeleted(option) && String(optionValue(option) ?? '') === modelValueAsString.value\n )) ?? null;\n});\n\nconst availableOptions = computed(() => {\n if (!props.softDeleteAware) {\n return props.options;\n }\n\n return props.options.filter((option) => !optionDeleted(option));\n});\n\nconst selectedDeletedOptions = computed(() => {\n if (!props.softDeleteAware || !props.multiple || modelValueSet.value.size === 0) {\n return [];\n }\n\n return props.options.filter((option) => (\n optionDeleted(option) && modelValueSet.value.has(String(optionValue(option) ?? ''))\n ));\n});\n\nconst multipleOptions = computed(() => {\n if (!props.multiple) {\n return availableOptions.value;\n }\n\n const seen = new Set();\n\n return [...selectedDeletedOptions.value, ...availableOptions.value].filter((option) => {\n const key = String(optionValue(option) ?? '');\n\n if (seen.has(key)) {\n return false;\n }\n\n seen.add(key);\n return true;\n });\n});\n\nconst selectedMultipleOptions = computed(() => {\n if (!props.multiple || modelValueSet.value.size === 0) {\n return [];\n }\n\n return multipleOptions.value.filter((option) => (\n modelValueSet.value.has(String(optionValue(option) ?? ''))\n ));\n});\n\nconst displayText = computed(() => {\n if (props.multiple) {\n if (selectedMultipleOptions.value.length === 0) {\n return props.placeholder;\n }\n\n return selectedMultipleOptions.value.map((option) => optionText(option)).join(', ');\n }\n\n // Check for actual empty/null/undefined values (not empty string selections)\n if ((props.modelValue === null || props.modelValue === undefined) ||\n (props.modelValue === '' && !props.options.some(option => optionValue(option) === ''))) {\n return props.placeholder;\n }\n\n const selectedOption = props.options.find(option => {\n const optionVal = optionValue(option);\n return optionVal === props.modelValue || String(optionVal) === String(props.modelValue);\n });\n\n return selectedOption ? optionText(selectedOption) : props.modelValue;\n});\n\nconst normalizeEmittedValue = (value) => {\n if (props.modelModifiers.number) {\n if (value === '') {\n return '';\n }\n\n return Number(value);\n }\n\n return value;\n};\n\nconst normalizeEmittedValues = (values) => values.map((value) => normalizeEmittedValue(value));\n\nconst optionIsSelected = (option) => (\n modelValueSet.value.has(String(optionValue(option) ?? ''))\n);\n\nconst toggleDropdown = () => {\n if (!props.disabled) {\n isOpen.value = !isOpen.value;\n }\n};\n\nconst selectOption = (option) => {\n const value = optionValue(option);\n emit('update:modelValue', normalizeEmittedValue(value));\n isOpen.value = false;\n};\n\nconst selectPlaceholder = () => {\n if (!props.placeholderDisabled) {\n emit('update:modelValue', props.multiple ? [] : normalizeEmittedValue(''));\n isOpen.value = false;\n }\n};\n\nconst toggleMultipleOption = (option) => {\n const normalizedValue = normalizeEmittedValue(optionValue(option));\n const currentValues = [...modelValueArray.value];\n const selectedIndex = currentValues.findIndex((value) => (\n String(value) === String(normalizedValue)\n ));\n\n if (selectedIndex >= 0) {\n currentValues.splice(selectedIndex, 1);\n } else {\n currentValues.push(normalizedValue);\n }\n\n emit('update:modelValue', normalizeEmittedValues(currentValues));\n};\n\nconst updateDropdownPosition = () => {\n if (!triggerRef.value) {\n return;\n }\n\n const rect = triggerRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom - 8;\n const spaceAbove = rect.top - 8;\n const shouldOpenUpward = spaceBelow < 240 && spaceAbove > spaceBelow;\n const width = Math.min(rect.width, Math.max(viewportWidth - rect.left - 16, 160));\n const maxHeight = Math.max(Math.min(240, shouldOpenUpward ? spaceAbove : spaceBelow), 120);\n\n dropdownStyle.value = {\n position: 'fixed',\n left: `${Math.max(rect.left, 8)}px`,\n width: `${width}px`,\n maxHeight: `${maxHeight}px`,\n zIndex: '9999',\n ...(shouldOpenUpward\n ? { bottom: `${viewportHeight - rect.top + 1}px` }\n : { top: `${rect.bottom - 1}px` }),\n };\n};\n\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 }\n};\n\nconst syncDarkMode = () => {\n if (rootRef.value?.closest('.dark')) {\n isDarkMode.value = true;\n return;\n }\n\n isDarkMode.value = document.documentElement.classList.contains('dark') || document.body.classList.contains('dark');\n};\n\nconst darkTextStyle = computed(() => (isDarkMode.value ? { color: '#ffffff' } : null));\n\nonMounted(() => {\n isMounted.value = true;\n syncDarkMode();\n document.addEventListener('click', closeDropdown);\n window.addEventListener('resize', updateDropdownPosition);\n window.addEventListener('scroll', updateDropdownPosition, true);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('click', closeDropdown);\n window.removeEventListener('resize', updateDropdownPosition);\n window.removeEventListener('scroll', updateDropdownPosition, true);\n});\n\nwatch(isOpen, async (open) => {\n if (!open) {\n return;\n }\n\n syncDarkMode();\n await nextTick();\n updateDropdownPosition();\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n class=\"relative\"\n @click=\"toggleDropdown\"\n >\n <div\n ref=\"triggerRef\"\n :class=\"[\n baseClass,\n (selectedDeletedOption || (multiple && selectedMultipleOptions.some(optionDeleted))) ? deletedSelectedClass : normalTextClass,\n { 'text-neutral-50': isDarkMode && !(selectedDeletedOption || (multiple && selectedMultipleOptions.some(optionDeleted))) },\n 'flex items-center justify-between cursor-pointer',\n attrs.class\n ]\"\n v-bind=\"attrs\"\n tabindex=\"0\"\n >\n <span\n :class=\"((multiple && selectedMultipleOptions.length === 0) || (!multiple && !modelValue)) && placeholder ? placeholderClass : null\"\n :style=\"darkTextStyle\"\n >\n {{ displayText }}\n </span>\n <ChevronDownIcon\n class=\"size-5 text-neutral-400 transition-transform dark:text-neutral-200\"\n :class=\"{ 'rotate-180': isOpen }\"\n />\n </div>\n\n <!-- Dropdown Options -->\n <Teleport to=\"body\" v-if=\"isMounted\">\n <transition\n enter-active-class=\"transition-all duration-200 ease-out\"\n enter-from-class=\"opacity-0 transform scale-95 -translate-y-2\"\n enter-to-class=\"opacity-100 transform scale-100 translate-y-0\"\n leave-active-class=\"transition-all duration-150 ease-in\"\n leave-from-class=\"opacity-100 transform scale-100 translate-y-0\"\n leave-to-class=\"opacity-0 transform scale-95 -translate-y-2\"\n >\n <div\n v-if=\"isOpen\"\n ref=\"dropdownMenuRef\"\n :class=\"{ dark: isDarkMode }\"\n :style=\"dropdownStyle\"\n >\n <div :class=\"[dropdownClass, { 'bg-neutral-950 border-neutral-800': isDarkMode }]\">\n <div\n v-if=\"placeholder && !multiple\"\n :class=\"[\n dropdownOptionClass,\n placeholderClass,\n { 'text-gray-400': !modelValue }\n ]\"\n @click.stop=\"selectPlaceholder\"\n >\n <span :style=\"darkTextStyle\">{{ placeholder }}</span>\n </div>\n\n <div\n v-if=\"selectedDeletedOption\"\n :class=\"[\n dropdownOptionClass,\n deletedOptionClass,\n dropdownSelectedClass\n ]\"\n >\n {{ optionText(selectedDeletedOption) }}\n </div>\n\n <div\n v-for=\"option in multiple ? multipleOptions : availableOptions\"\n :key=\"String(optionValue(option))\"\n :class=\"[\n dropdownOptionClass,\n optionDeleted(option) ? deletedOptionClass : optionClass,\n { 'text-neutral-50': isDarkMode && !optionDeleted(option) },\n {\n [dropdownSelectedClass]: multiple\n ? optionIsSelected(option)\n : optionValue(option) === modelValue || String(optionValue(option)) === String(modelValue),\n 'rounded-b-lg': option === availableOptions[availableOptions.length - 1] && !placeholder,\n 'rounded-lg': !placeholder && availableOptions.length === 1\n }\n ]\"\n @click.stop=\"multiple ? toggleMultipleOption(option) : selectOption(option)\"\n >\n <div\n v-if=\"multiple\"\n class=\"flex items-center gap-3\"\n >\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 rounded border-neutral-300 text-neutral-900 focus:ring-neutral-900\"\n :checked=\"optionIsSelected(option)\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n @click.stop\n @change.stop=\"toggleMultipleOption(option)\"\n >\n <span :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </div>\n <template v-else>\n <span :style=\"darkTextStyle\">{{ optionText(option) }}</span>\n </template>\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n </div>\n</template>\n","<script setup>\nimport CustomSelect from './CustomSelect.vue';\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean, Array, null],\n default: '',\n },\n modelModifiers: {\n type: Object,\n default: () => ({}),\n },\n options: {\n type: Array,\n default: () => ([]),\n },\n placeholder: {\n type: String,\n default: '',\n },\n placeholderDisabled: {\n type: Boolean,\n default: false,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n softDeleteAware: {\n type: Boolean,\n default: false,\n },\n labelKey: {\n type: String,\n default: 'name',\n },\n valueKey: {\n type: String,\n default: 'id',\n },\n deletedKey: {\n type: String,\n default: 'deleted_at',\n },\n optionLabel: {\n type: Function,\n default: null,\n },\n baseClass: {\n type: [String, Array, Object],\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',\n },\n normalTextClass: {\n type: [String, Array, Object],\n default: 'text-slate-900 dark:text-neutral-50',\n },\n deletedSelectedClass: {\n type: [String, Array, Object],\n default: 'text-red-600 dark:text-neutral-100',\n },\n optionClass: {\n type: [String, Array, Object],\n default: 'text-slate-900 dark:text-neutral-50',\n },\n deletedOptionClass: {\n type: [String, Array, Object],\n default: 'text-rose-700 dark:text-neutral-100',\n },\n placeholderClass: {\n type: [String, Array, Object],\n default: 'text-slate-500 dark:text-neutral-200',\n },\n dropdownClass: {\n type: [String, Array, Object],\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',\n },\n dropdownOptionClass: {\n type: [String, Array, Object],\n default: 'px-4 py-3 hover:bg-slate-100 cursor-pointer transition-colors dark:hover:bg-neutral-900',\n },\n dropdownSelectedClass: {\n type: [String, Array, Object],\n default: 'bg-blue-50 text-blue-700 font-medium dark:bg-neutral-900 dark:text-neutral-50',\n }\n});\n\nconst emit = defineEmits(['update:modelValue']);\n</script>\n\n<template>\n <CustomSelect\n :model-value=\"modelValue\"\n :model-modifiers=\"modelModifiers\"\n :options=\"options\"\n :placeholder=\"placeholder\"\n :placeholder-disabled=\"placeholderDisabled\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :soft-delete-aware=\"softDeleteAware\"\n :label-key=\"labelKey\"\n :value-key=\"valueKey\"\n :deleted-key=\"deletedKey\"\n :option-label=\"optionLabel\"\n :base-class=\"baseClass\"\n :normal-text-class=\"normalTextClass\"\n :deleted-selected-class=\"deletedSelectedClass\"\n :option-class=\"optionClass\"\n :deleted-option-class=\"deletedOptionClass\"\n :placeholder-class=\"placeholderClass\"\n :dropdown-class=\"dropdownClass\"\n :dropdown-option-class=\"dropdownOptionClass\"\n :dropdown-selected-class=\"dropdownSelectedClass\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n v-bind=\"$attrs\"\n />\n</template>\n","<script setup>\nimport { computed, onMounted, ref, useAttrs } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, null],\n default: '',\n },\n withTimestamp: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledClass: {\n type: String,\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\n },\n});\n\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\nconst input = ref(null);\n\nconst inputType = computed(() => (props.withTimestamp ? 'datetime-local' : 'date'));\nconst normalizedValue = computed(() => props.modelValue ?? '');\nconst cappedMax = computed(() => {\n const limit = props.withTimestamp ? '9999-12-31T23:59' : '9999-12-31';\n const incoming = attrs.max;\n if (typeof incoming !== 'string' || incoming === '') {\n return limit;\n }\n\n return incoming > limit ? limit : incoming;\n});\n\nconst inputAttrs = computed(() => {\n const { class: _class, type: _type, ...rest } = attrs;\n return rest;\n});\n\nconst inputClasses = computed(() => [\n 'date-input 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',\n attrs.class,\n]);\n\nconst normalizeDateValue = (rawValue) => {\n if (typeof rawValue !== 'string') {\n return '';\n }\n\n return rawValue.replace(/^(\\d{4})\\d+/, '$1');\n};\n\nconst handleDateInput = (event) => {\n const target = event.target;\n if (!target) {\n return;\n }\n\n const rawValue = String(target.value ?? '');\n const normalized = normalizeDateValue(rawValue);\n\n if (normalized !== rawValue) {\n target.value = normalized;\n }\n\n emit('update:modelValue', normalized);\n};\n\nonMounted(() => {\n if (input.value?.hasAttribute('autofocus')) {\n input.value.focus();\n }\n});\n\ndefineExpose({ focus: () => input.value?.focus() });\n</script>\n\n<template>\n <input\n ref=\"input\"\n v-bind=\"inputAttrs\"\n :type=\"inputType\"\n :max=\"cappedMax\"\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\n :value=\"normalizedValue\"\n :disabled=\"props.disabled\"\n @input=\"handleDateInput\"\n @change=\"handleDateInput\"\n >\n</template>\n\n<style scoped>\n.date-input {\n color-scheme: light;\n}\n\n.dark .date-input {\n color-scheme: dark;\n}\n\n.date-input::-webkit-calendar-picker-indicator {\n cursor: pointer;\n}\n\n.date-input:disabled::-webkit-calendar-picker-indicator {\n cursor: default;\n}\n</style>\n","<script setup>\nimport { computed, ref, useAttrs, watch, onMounted, onUnmounted } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n modelValue: {\n type: Object,\n default: () => ({ start: '', end: '' }),\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledClass: {\n type: String,\n default: '!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500',\n },\n min: {\n type: String,\n default: '',\n },\n max: {\n type: String,\n default: '',\n },\n minDays: {\n type: Number,\n default: 0,\n },\n maxDays: {\n type: Number,\n default: null,\n },\n label: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: 'Select date range',\n },\n locale: {\n type: String,\n default: 'fr-CA',\n },\n});\n\nconst emit = defineEmits(['update:modelValue']);\nconst attrs = useAttrs();\n\nconst isOpen = ref(false);\nconst calendarRef = ref(null);\nconst inputRef = ref(null);\nconst hoveredDate = ref(null);\nconst currentMonth = ref(new Date().getMonth());\nconst currentYear = ref(new Date().getFullYear());\n\nconst startDate = computed(() => props.modelValue?.start ?? '');\nconst endDate = computed(() => props.modelValue?.end ?? '');\n\nconst displayText = computed(() => {\n if (!startDate.value && !endDate.value) return props.placeholder;\n if (startDate.value && !endDate.value) return startDate.value;\n if (!startDate.value && endDate.value) return endDate.value;\n return `${startDate.value} - ${endDate.value}`;\n});\n\nconst daysBetween = computed(() => {\n if (!startDate.value || !endDate.value) return 0;\n const start = new Date(startDate.value);\n const end = new Date(endDate.value);\n const diffTime = end - start;\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n});\n\nconst calendarDays = computed(() => {\n const firstDay = new Date(currentYear.value, currentMonth.value, 1);\n const lastDay = new Date(currentYear.value, currentMonth.value + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n \n const days = [];\n const current = new Date(startDate);\n \n while (current <= lastDay || current.getDay() !== 0) {\n const currentDate = new Date(current);\n days.push({\n date: currentDate,\n isCurrentMonth: current.getMonth() === currentMonth.value,\n isToday: current.toDateString() === new Date().toDateString(),\n isSelected: isDateSelected(current),\n isInRange: isDateInRange(current),\n isStartDate: isDateStart(current),\n isEndDate: isDateEnd(current),\n isHoveredInRange: isDateInHoveredRange(current),\n isDisabled: !isDateAllowed(currentDate),\n });\n current.setDate(current.getDate() + 1);\n if (current.getMonth() > currentMonth.value && current.getDay() === 0) break;\n }\n \n return days;\n});\n\nconst isDateSelected = (date) => {\n if (!startDate.value && !endDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n return dateStr === startDate.value || dateStr === endDate.value;\n};\n\nconst isDateInRange = (date) => {\n if (!startDate.value || !endDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n return dateStr > startDate.value && dateStr < endDate.value;\n};\n\nconst isDateStart = (date) => {\n if (!startDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n return dateStr === startDate.value;\n};\n\nconst isDateEnd = (date) => {\n if (!endDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n return dateStr === endDate.value;\n};\n\nconst isDateInHoveredRange = (date) => {\n if (!startDate.value || endDate.value || !hoveredDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n const startStr = startDate.value;\n const hoveredStr = hoveredDate.value.toISOString().split('T')[0];\n \n if (dateStr === startStr || dateStr === hoveredStr) return false;\n \n return (dateStr > startStr && dateStr < hoveredStr) || (dateStr < startStr && dateStr > hoveredStr);\n};\n\nconst isDateInValidRange = (date) => {\n if (!startDate.value || endDate.value) return false;\n const dateStr = date.toISOString().split('T')[0];\n const startStr = startDate.value;\n \n // Check if date is after start date\n if (dateStr <= startStr) return false;\n \n const start = new Date(startStr);\n const selected = new Date(dateStr);\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24));\n \n // Check if within minDays and maxDays constraints\n return daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays);\n};\n\nconst inputClasses = computed(() => [\n 'date-range-input 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',\n attrs.class,\n]);\n\nconst toggleCalendar = () => {\n if (!props.disabled) {\n if (isOpen.value) {\n // If closing the calendar and we have a partial selection, clear it\n if (startDate.value && !endDate.value) {\n emit('update:modelValue', { start: '', end: '' });\n }\n isOpen.value = false;\n } else {\n isOpen.value = true;\n }\n }\n};\n\nconst isDateAllowed = (date) => {\n const dateStr = date.toISOString().split('T')[0];\n \n // Check min date constraint\n if (props.min && dateStr < props.min) {\n return false;\n }\n \n // Check max date constraint\n if (props.max && dateStr > props.max) {\n return false;\n }\n \n // If we have a start date but no end date, check if this date is valid for end selection\n if (startDate.value && !endDate.value) {\n return isDateInValidRange(date);\n }\n \n // If we're selecting a start date (no selection yet or complete selection), \n // check if this date can be a valid start date considering minDays and max date\n if (!startDate.value || (startDate.value && endDate.value)) {\n const selected = new Date(dateStr);\n \n // Check if there are enough days after this date to satisfy minDays\n if (props.minDays > 0 && props.max) {\n const minEndDate = new Date(selected);\n minEndDate.setDate(minEndDate.getDate() + props.minDays);\n const minEndStr = minEndDate.toISOString().split('T')[0];\n \n // If minEndDate is beyond the max date, this start date is too late\n if (minEndStr > props.max) {\n return false;\n }\n }\n }\n \n return true;\n};\n\nconst selectDate = (date) => {\n const dateStr = date.toISOString().split('T')[0];\n \n // Check if the selected date is allowed by min/max constraints\n if (!isDateAllowed(date)) {\n return; // Don't select dates outside min/max range\n }\n \n if (!startDate.value || (startDate.value && endDate.value)) {\n // Start new selection\n emit('update:modelValue', { start: dateStr, end: '' });\n } else if (!endDate.value) {\n // Complete selection\n const start = new Date(startDate.value);\n const selected = new Date(dateStr);\n \n if (selected < start) {\n // If selected date is before start, swap them\n const daysDiff = Math.ceil((start - selected) / (1000 * 60 * 60 * 24));\n \n // Check constraints for swapped range\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\n emit('update:modelValue', { start: dateStr, end: startDate.value });\n isOpen.value = false;\n } else {\n // Invalid range, keep original start date and don't close\n return;\n }\n } else {\n // Normal selection\n const daysDiff = Math.ceil((selected - start) / (1000 * 60 * 60 * 24));\n \n // Check constraints\n if (daysDiff >= props.minDays && (props.maxDays === null || daysDiff <= props.maxDays)) {\n emit('update:modelValue', { start: startDate.value, end: dateStr });\n isOpen.value = false;\n } else {\n // Invalid range, keep original start date and don't close\n return;\n }\n }\n }\n};\n\nconst closeCalendar = (event) => {\n if (calendarRef.value && !calendarRef.value.contains(event.target) && !inputRef.value.contains(event.target)) {\n // If we have a start date but no end date, clear the selection\n if (startDate.value && !endDate.value) {\n emit('update:modelValue', { start: '', end: '' });\n }\n isOpen.value = false;\n }\n};\n\nconst handleDateHover = (date) => {\n if (startDate.value && !endDate.value) {\n hoveredDate.value = date;\n }\n};\n\nconst handleDateLeave = () => {\n hoveredDate.value = null;\n};\n\nconst previousMonth = () => {\n if (currentMonth.value === 0) {\n currentMonth.value = 11;\n currentYear.value--;\n } else {\n currentMonth.value--;\n }\n};\n\nconst nextMonth = () => {\n if (currentMonth.value === 11) {\n currentMonth.value = 0;\n currentYear.value++;\n } else {\n currentMonth.value++;\n }\n};\n\nconst goToToday = () => {\n const today = new Date();\n currentMonth.value = today.getMonth();\n currentYear.value = today.getFullYear();\n};\n\nconst clearSelection = () => {\n emit('update:modelValue', { start: '', end: '' });\n isOpen.value = false;\n};\n\nconst monthNames = computed(() => {\n return Array.from({ length: 12 }, (_, i) => {\n return new Intl.DateTimeFormat(props.locale, { month: 'long' }).format(new Date(2000, i, 1));\n });\n});\n\nconst dayNames = computed(() => {\n return Array.from({ length: 7 }, (_, i) => {\n return new Intl.DateTimeFormat(props.locale, { weekday: 'short' }).format(new Date(2000, 0, i + 2));\n });\n});\n\n// Handle click outside to close dropdown\nwatch(isOpen, (newValue) => {\n if (newValue) {\n document.addEventListener('click', closeCalendar);\n } else {\n document.removeEventListener('click', closeCalendar);\n }\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', closeCalendar);\n});\n</script>\n\n<template>\n <div class=\"relative\">\n <label\n v-if=\"label\"\n class=\"text-sm font-medium text-neutral-700 dark:text-neutral-300 mb-1 block\"\n >\n {{ label }}\n </label>\n <input\n ref=\"inputRef\"\n readonly\n :class=\"[inputClasses, (props.disabled ? props.disabledClass : null)]\"\n :value=\"displayText\"\n :disabled=\"props.disabled\"\n @click=\"toggleCalendar\"\n >\n \n <div\n v-if=\"isOpen\"\n ref=\"calendarRef\"\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\"\n @click.stop\n >\n <div class=\"p-4\">\n <div class=\"mb-4 flex items-center justify-between\">\n <button\n type=\"button\"\n class=\"p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors\"\n @click=\"previousMonth\"\n >\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n \n <div class=\"text-sm font-medium text-neutral-900 dark:text-neutral-50\">\n {{ monthNames[currentMonth] }} {{ currentYear }}\n </div>\n \n <button\n type=\"button\"\n class=\"p-1 rounded hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors\"\n @click=\"nextMonth\"\n >\n <svg class=\"w-4 h-4 text-neutral-600 dark:text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n \n <div class=\"grid grid-cols-7 gap-1 mb-2\">\n <div\n v-for=\"day in dayNames\"\n :key=\"day\"\n class=\"text-xs font-medium text-neutral-500 dark:text-neutral-400 text-center py-1\"\n >\n {{ day }}\n </div>\n </div>\n \n <div class=\"grid grid-cols-7 gap-1\">\n <div\n v-for=\"day in calendarDays\"\n :key=\"day.date.toISOString()\"\n class=\"relative\"\n >\n <button\n type=\"button\"\n class=\"w-8 h-8 text-xs rounded transition-colors\"\n :class=\"{\n 'text-neutral-400 dark:text-neutral-600': !day.isCurrentMonth,\n 'text-neutral-900 dark:text-neutral-50': day.isCurrentMonth && !day.isDisabled,\n 'text-neutral-300 dark:text-neutral-500 cursor-not-allowed': day.isDisabled,\n 'bg-neutral-200 dark:bg-neutral-700': day.isToday && !day.isSelected,\n 'bg-blue-500 text-white hover:bg-blue-600': day.isSelected,\n 'bg-blue-100 dark:bg-blue-900': day.isInRange,\n 'bg-blue-50 dark:bg-blue-950': day.isHoveredInRange,\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800': !day.isDisabled,\n 'rounded-l-full': day.isStartDate && !day.isEndDate,\n 'rounded-r-full': day.isEndDate && !day.isStartDate,\n 'rounded-full': day.isStartDate && day.isEndDate,\n }\"\n :disabled=\"day.isDisabled\"\n @click=\"selectDate(day.date)\"\n @mouseenter=\"handleDateHover(day.date)\"\n @mouseleave=\"handleDateLeave\"\n >\n {{ day.date.getDate() }}\n </button>\n </div>\n </div>\n \n <div class=\"mt-4 pt-4 border-t border-neutral-200 dark:border-neutral-800\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-xs text-neutral-500 dark:text-neutral-400\">\n <div v-if=\"startDate && endDate\">\n Range: {{ daysBetween }} days\n </div>\n <div v-else-if=\"startDate\">\n Select end date\n </div>\n <div v-else>\n Select start date\n </div>\n </div>\n \n <button\n v-if=\"startDate || endDate\"\n type=\"button\"\n class=\"text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 transition-colors\"\n @click=\"clearSelection\"\n >\n Clear\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.date-range-input {\n color-scheme: light;\n}\n\n.dark .date-range-input {\n color-scheme: dark;\n}\n\n.date-range-input:disabled {\n cursor: not-allowed;\n}\n</style>\n","<script setup>\nimport { PhotoIcon } from '@heroicons/vue/24/outline';\n\nconst emit = defineEmits(['update:modelValue']);\nconst props = defineProps({\n currentImageUrl: {\n type: String,\n default: '',\n },\n accept: {\n type: String,\n default: 'image/*',\n },\n currentLabel: {\n type: String,\n default: 'Current logo',\n },\n currentSubtext: {\n type: String,\n default: 'Upload a new logo to replace this one',\n },\n attrs: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst handleFileChange = (event) => {\n const file = event.target.files?.[0] ?? null;\n emit('update:modelValue', file);\n};\n</script>\n\n<template>\n <div>\n <div class=\"relative\">\n <div class=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <PhotoIcon class=\"size-5 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <input\n v-bind=\"attrs\"\n type=\"file\"\n :accept=\"accept\"\n class=\"block w-full cursor-pointer rounded-lg border border-neutral-200 bg-white py-3 pl-10 pr-4 text-sm text-neutral-700 shadow-sm transition-all duration-200 file:mr-4 file:rounded-md file:border-0 file:bg-neutral-900 file:px-4 file:py-2 file:text-sm file:font-medium 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\"\n @change=\"handleFileChange\"\n />\n </div>\n\n <div\n v-if=\"props.currentImageUrl\"\n class=\"mt-4 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-800 dark:bg-neutral-900/50\"\n >\n <div class=\"flex items-center space-x-4\">\n <img :src=\"props.currentImageUrl\" alt=\"Current logo\" class=\"h-16 w-auto max-w-24 object-contain rounded-lg shadow-sm\">\n <div>\n <p class=\"text-sm font-medium text-neutral-900 dark:text-neutral-50\">{{ props.currentLabel }}</p>\n <p class=\"text-xs text-neutral-500 dark:text-neutral-200\">{{ props.currentSubtext }}</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from '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 disabled: {\n type: Boolean,\n default: false,\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 isSelected = (option) => String(option) === String(props.modelValue ?? '');\nconst selectOption = (option) => emit('update:modelValue', option);\n</script>\n\n<template>\n <div class=\"flex h-12 overflow-hidden rounded-lg border border-neutral-200 bg-white text-sm dark:border-neutral-800 dark:bg-neutral-950\">\n <button\n v-for=\"(option, idx) in normalizedOptions\"\n :key=\"`notation-${idx}-${option}`\"\n type=\"button\"\n class=\"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\"\n :class=\"[\n idx === 0 ? 'rounded-l-lg' : '',\n idx === normalizedOptions.length - 1 ? 'rounded-r-lg' : '',\n isSelected(option)\n ? 'bg-neutral-900 text-neutral-50 dark:bg-neutral-800 dark:text-neutral-50'\n : 'bg-white text-neutral-700 hover:bg-neutral-100 dark:bg-neutral-950 dark:text-neutral-100 dark:hover:bg-neutral-900',\n 'focus-visible:ring-2 focus-visible:ring-neutral-900/20 focus-visible:ring-offset-0 dark:focus-visible:ring-neutral-100/20',\n ]\"\n :disabled=\"disabled\"\n @click=\"selectOption(option)\"\n >\n {{ option }}\n </button>\n </div>\n</template>\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});\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=\"inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors\"\n :class=\"[\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 ]\"\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>{{ isChecked ? '✓' : '○' }} {{ label }}</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});\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=\"inline-flex items-center gap-3 select-none\"\n :class=\"[\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 ]\"\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=\"relative inline-flex h-6 w-11 items-center rounded-full border transition-colors duration-200\"\n :class=\"[\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 ]\"\n >\n <span\n class=\"inline-block size-4 rounded-full bg-white shadow-sm transition-transform duration-200 dark:bg-neutral-950\"\n :class=\"[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\">\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});\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\">\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 @update:modelValue=\"selectOption\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, 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});\n\nconst emit = defineEmits(['update:modelValue', 'blur']);\n\nconst content = ref(props.modelValue ?? '');\nconst isEditorReady = ref(false);\nconst editorRevision = ref(0);\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\nconst handleEditorInput = (_event, editor) => {\n const nextValue = editor.getContent({ format: props.outputFormat });\n content.value = nextValue;\n emit('update:modelValue', nextValue);\n};\n\nconst handleEditorBlur = (_event, editor) => {\n emit('blur', editor.getContent({ format: props.outputFormat }));\n};\n</script>\n\n<template>\n <div :key=\"editorKey\">\n <div v-if=\"!isEditorReady\" class=\"min-h-[12rem] w-full rounded-lg border border-slate-300 bg-slate-50\" />\n\n <Editor\n v-else\n :initial-value=\"content\"\n :license-key=\"licenseKey\"\n :readonly=\"readonly\"\n :output-format=\"outputFormat\"\n :init=\"editorInit\"\n @input=\"handleEditorInput\"\n @blur=\"handleEditorBlur\"\n />\n </div>\n</template>\n\n<style scoped>\n</style>\n","<script setup>\nimport { computed, useAttrs } from \"vue\";\nimport { ExclamationCircleIcon } from \"@heroicons/vue/24/outline\";\nimport TextInput from \"./TextInput.vue\";\nimport TextArea from \"./TextArea.vue\";\nimport SelectInput from \"./SelectInput.vue\";\nimport DateInput from \"./DateInput.vue\";\nimport DateRangeInput from \"./DateRangeInput.vue\";\nimport ImageInput from \"./ImageInput.vue\";\nimport NotationInput from \"./NotationInput.vue\";\nimport CheckboxInput from \"./CheckboxInput.vue\";\nimport RadioInput from \"./RadioInput.vue\";\nimport ToggleInput from \"./ToggleInput.vue\";\nimport CheckboxMultipleInput from \"./CheckboxMultipleInput.vue\";\nimport RadioMultipleInput from \"./RadioMultipleInput.vue\";\nimport TinyEditor from \"./TinyEditor.vue\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n type: {\n type: String,\n required: true,\n },\n label: {\n type: String,\n default: \"\",\n },\n helperText: {\n type: String,\n default: \"\",\n },\n name: {\n type: String,\n default: undefined,\n },\n errorMessage: {\n type: String,\n default: \"\",\n },\n modelValue: {\n type: [String, Number, Boolean, Array, null],\n default: \"\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledClass: {\n type: String,\n default:\n \"!border-neutral-200 !bg-neutral-100 !text-neutral-500 dark:!border-neutral-800 dark:!bg-neutral-900 dark:!text-neutral-500\",\n },\n modelModifiers: {\n type: Object,\n default: () => ({}),\n },\n withTimestamp: {\n type: Boolean,\n default: false,\n },\n options: {\n type: Array,\n default: () => [],\n },\n placeholder: {\n type: String,\n default: \"\",\n },\n placeholderDisabled: {\n type: Boolean,\n default: false,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n softDeleteAware: {\n type: Boolean,\n default: false,\n },\n labelKey: {\n type: String,\n default: \"name\",\n },\n valueKey: {\n type: String,\n default: \"id\",\n },\n deletedKey: {\n type: String,\n default: \"deleted_at\",\n },\n optionLabel: {\n type: Function,\n default: null,\n },\n baseClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n normalTextClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n deletedSelectedClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n optionClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n deletedOptionClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n placeholderClass: {\n type: [String, Array, Object],\n default: undefined,\n },\n accept: {\n type: String,\n default: undefined,\n },\n currentImageUrl: {\n type: String,\n default: \"\",\n },\n currentLabel: {\n type: String,\n default: \"Current logo\",\n },\n currentSubtext: {\n type: String,\n default: \"Upload a new logo to replace this one\",\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: undefined,\n },\n plugins: {\n type: [String, Array],\n default: undefined,\n },\n init: {\n type: Object,\n default: undefined,\n },\n licenseKey: {\n type: String,\n default: \"gpl\",\n },\n outputFormat: {\n type: String,\n default: \"html\",\n },\n min: {\n type: String,\n default: \"\",\n },\n max: {\n type: String,\n default: \"\",\n },\n minDays: {\n type: Number,\n default: 0,\n },\n maxDays: {\n type: Number,\n default: null,\n },\n startLabel: {\n type: String,\n default: \"Start Date\",\n },\n endLabel: {\n type: String,\n default: \"End Date\",\n },\n locale: {\n type: String,\n default: \"fr-CA\",\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"blur\"]);\nconst attrs = useAttrs();\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 updateValue = (value) => emit(\"update:modelValue\", value);\n\nconst hasError = computed(() => Boolean(props.errorMessage));\nconst showsInlineChoiceControl = computed(\n () =>\n isCheckboxSingleType.value ||\n isRadioSingleType.value ||\n isToggleSingleType.value,\n);\n\nconst fieldId = computed(() => {\n const id = attrs.id;\n return typeof id === \"string\" && id !== \"\" ? id : undefined;\n});\n\nconst textLikeTypes = [\n \"text\",\n \"email\",\n \"password\",\n \"number\",\n \"time\",\n \"url\",\n \"tel\",\n \"search\",\n \"month\",\n \"week\",\n \"color\",\n];\n\nconst noComponentTypes = [];\nconst isImageType = computed(() => props.type === \"image\");\nconst isNotationType = computed(() => props.type === \"notation\");\nconst isCheckboxSingleType = computed(() => props.type === \"checkbox-input\");\nconst isRadioSingleType = computed(() => props.type === \"radio-input\");\nconst isToggleSingleType = computed(() => props.type === \"toggle-input\");\nconst isCheckboxType = computed(() => props.type === \"checkbox\");\nconst isRadioType = computed(() => props.type === \"radio\");\nconst isDateType = computed(\n () => props.type === \"date\" || props.type === \"datetime-local\",\n);\nconst isDateRangeType = computed(() => props.type === \"daterange\");\nconst isTextareaType = computed(() => props.type === \"textarea\");\nconst isTinyEditorType = computed(() => props.type === \"tiny-editor\");\nconst isSelectType = computed(() => props.type === \"select\");\nconst isTextLikeType = computed(() => textLikeTypes.includes(props.type));\nconst isNoComponentType = computed(() => noComponentTypes.includes(props.type));\n\nconst textInputBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class],\n type: props.type,\n name: props.name,\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n}));\n\nconst textAreaBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class],\n name: props.name,\n modelValue: props.modelValue,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n}));\n\nconst dateBindings = computed(() => ({\n ...attrs,\n class: [defaultFieldClass, attrs.class],\n name: props.name,\n modelValue: props.modelValue,\n withTimestamp: props.type === \"datetime-local\" || props.withTimestamp,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n}));\n\nconst selectBindings = computed(() => {\n const inputProps = {\n ...attrs,\n class: [defaultFieldClass, attrs.class],\n name: props.name,\n modelValue: props.modelValue,\n modelModifiers: props.modelModifiers,\n options: props.options,\n placeholder: props.placeholder,\n placeholderDisabled: props.placeholderDisabled,\n multiple: props.multiple,\n disabled: props.disabled,\n softDeleteAware: props.softDeleteAware,\n labelKey: props.labelKey,\n valueKey: props.valueKey,\n deletedKey: props.deletedKey,\n optionLabel: props.optionLabel,\n };\n\n if (props.baseClass !== undefined) inputProps.baseClass = props.baseClass;\n if (props.normalTextClass !== undefined)\n inputProps.normalTextClass = props.normalTextClass;\n if (props.deletedSelectedClass !== undefined)\n inputProps.deletedSelectedClass = props.deletedSelectedClass;\n if (props.optionClass !== undefined)\n inputProps.optionClass = props.optionClass;\n if (props.deletedOptionClass !== undefined)\n inputProps.deletedOptionClass = props.deletedOptionClass;\n if (props.placeholderClass !== undefined)\n inputProps.placeholderClass = props.placeholderClass;\n\n return inputProps;\n});\n\nconst notationBindings = computed(() => ({\n ...attrs,\n name: props.name,\n modelValue: props.modelValue,\n options: props.options,\n disabled: props.disabled,\n}));\n\nconst checkboxBindings = computed(() => ({\n ...attrs,\n name: props.name,\n modelValue: props.modelValue,\n options: props.options,\n disabled: props.disabled,\n}));\n\nconst radioBindings = computed(() => ({\n ...attrs,\n modelValue: props.modelValue,\n options: props.options,\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n}));\n\nconst checkboxSingleBindings = computed(() => ({\n ...attrs,\n name: props.name,\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n}));\n\nconst radioSingleBindings = computed(() => ({\n ...attrs,\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n name: props.name ?? attrs.name,\n disabled: props.disabled,\n}));\n\nconst toggleSingleBindings = computed(() => ({\n ...attrs,\n name: props.name,\n modelValue: props.modelValue,\n label: props.label || attrs.label || \"\",\n disabled: props.disabled,\n}));\n\nconst imageBindings = computed(() => {\n return {\n ...attrs,\n accept: props.accept ?? attrs.accept ?? \"image/*\",\n modelValue: props.modelValue,\n currentImageUrl: props.currentImageUrl,\n currentLabel: props.currentLabel,\n currentSubtext: props.currentSubtext,\n };\n});\n\nconst tinyEditorBindings = computed(() => {\n const inputProps = {\n ...attrs,\n modelValue: typeof props.modelValue === \"string\" ? props.modelValue : \"\",\n readonly: props.disabled,\n height: props.height,\n menubar: props.menubar,\n licenseKey: props.licenseKey,\n outputFormat: props.outputFormat,\n };\n\n if (props.toolbar !== undefined) inputProps.toolbar = props.toolbar;\n if (props.plugins !== undefined) inputProps.plugins = props.plugins;\n if (props.init !== undefined) inputProps.init = props.init;\n\n return inputProps;\n});\n\nconst dateRangeBindings = computed(() => ({\n ...attrs,\n class: [attrs.class],\n name: props.name,\n modelValue: props.modelValue,\n min: props.min,\n max: props.max,\n minDays: props.minDays,\n maxDays: props.maxDays,\n startLabel: props.startLabel,\n endLabel: props.endLabel,\n locale: props.locale,\n disabled: props.disabled,\n disabledClass: props.disabledClass,\n}));\n</script>\n\n<template>\n <div>\n <label\n v-if=\"label && !showsInlineChoiceControl\"\n :for=\"fieldId\"\n class=\"text-base font-semibold text-gray-900 dark:text-gray-50 mb-1 block\"\n >\n {{ label }}\n </label>\n\n <span\n v-if=\"helperText && !showsInlineChoiceControl\"\n class=\"text-xs text-gray-500 mb-1 block\"\n >\n {{ helperText }}\n </span>\n\n <TextArea\n v-if=\"isTextareaType\"\n v-bind=\"textAreaBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <TinyEditor\n v-else-if=\"isTinyEditorType\"\n v-bind=\"tinyEditorBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <SelectInput\n v-else-if=\"isSelectType\"\n v-bind=\"selectBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <DateInput\n v-else-if=\"isDateType\"\n v-bind=\"dateBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <DateRangeInput\n v-else-if=\"isDateRangeType\"\n v-bind=\"dateRangeBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <TextInput\n v-else-if=\"isTextLikeType\"\n v-bind=\"textInputBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <ImageInput\n v-else-if=\"isImageType\"\n v-bind=\"imageBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <CheckboxInput\n v-else-if=\"isCheckboxSingleType\"\n v-bind=\"checkboxSingleBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <RadioInput\n v-else-if=\"isRadioSingleType\"\n v-bind=\"radioSingleBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <ToggleInput\n v-else-if=\"isToggleSingleType\"\n v-bind=\"toggleSingleBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <NotationInput\n v-else-if=\"isNotationType\"\n v-bind=\"notationBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <CheckboxMultipleInput\n v-else-if=\"isCheckboxType\"\n v-bind=\"checkboxBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\n\n <RadioMultipleInput\n v-else-if=\"isRadioType\"\n v-bind=\"radioBindings\"\n @update:modelValue=\"emit('update:modelValue', $event)\"\n @blur=\"emit('blur', $event)\"\n />\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 <div v-if=\"hasError\" class=\"flex items-center mt-2 text-sm text-red-600\">\n <ExclamationCircleIcon class=\"mr-1 h-4 w-4 flex-shrink-0\" />\n <span>{{ errorMessage }}</span>\n </div>\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});\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\">\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 @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);\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 {\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 }[props.maxWidth];\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 v-show=\"show\" 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\" :class=\"maxWidthClass\">\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-neutral-900 text-neutral-50 hover:bg-neutral-900/90 dark:bg-neutral-800 dark:text-neutral-50 dark:hover:bg-neutral-700',\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-gray-300 text-gray-900 hover:bg-gray-300/80 dark:bg-gray-500 dark:text-gray-50 dark:hover:bg-gray-500/80',\n tertiary: 'border border-neutral-200 bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\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';\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-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 { 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 <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 { Link } from '@inertiajs/vue3';\nimport { cloneVNode, computed, isVNode, mergeProps, useAttrs, useSlots, type Component, type HTMLAttributes, type VNode } from 'vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n href?: string;\n title?: string;\n active?: boolean;\n isActive?: boolean;\n icon?: Component;\n external?: boolean;\n target?: string;\n rel?: string;\n variant?: 'default' | 'outline';\n size?: 'default' | 'sm' | 'lg';\n as?: 'button' | 'a' | 'link';\n asChild?: boolean;\n tooltip?: string;\n class?: HTMLAttributes['class'];\n }>(),\n {\n title: '',\n href: undefined,\n active: undefined,\n isActive: undefined,\n icon: undefined,\n external: false,\n target: undefined,\n rel: undefined,\n variant: 'default',\n size: 'default',\n as: undefined,\n asChild: false,\n tooltip: undefined,\n class: undefined,\n },\n);\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst resolvedActive = computed(() => props.active ?? props.isActive ?? false);\n\nconst baseClass = computed(() => [\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',\n props.variant === 'outline'\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))]'\n : 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n props.size === 'sm'\n ? 'h-7 text-xs'\n : props.size === 'lg'\n ? 'h-12 text-sm group-data-[collapsible=icon]:p-0!'\n : 'h-8 text-sm',\n props.class,\n]);\n\nconst sharedAttrs = computed(() => ({\n ...attrs,\n title: props.tooltip ?? (props.title || undefined),\n 'data-slot': 'sidebar-menu-button',\n 'data-sidebar': 'menu-button',\n 'data-size': props.size,\n 'data-active': resolvedActive.value ? 'true' : undefined,\n 'aria-current': resolvedActive.value ? ('page' as const) : undefined,\n class: baseClass.value,\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, mergeProps(sharedAttrs.value, firstVNode.props ?? {}));\n});\n</script>\n\n<template>\n <component :is=\"childVNode\" v-if=\"asChild && childVNode\" />\n <Link\n v-else-if=\"(as === 'link' || !as) && href && !external\"\n :href=\"href\"\n v-bind=\"sharedAttrs\"\n >\n <component v-if=\"icon\" :is=\"icon\" />\n <slot>{{ title }}</slot>\n </Link>\n <a\n v-else-if=\"href && (external || as === 'a')\"\n :href=\"href\"\n :target=\"target\"\n :rel=\"rel\"\n v-bind=\"sharedAttrs\"\n >\n <component v-if=\"icon\" :is=\"icon\" />\n <slot>{{ title }}</slot>\n </a>\n <button\n v-else\n type=\"button\"\n v-bind=\"sharedAttrs\"\n >\n <component v-if=\"icon\" :is=\"icon\" />\n <slot>{{ title }}</slot>\n </button>\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","/**\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 [\"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\">\nimport type { HTMLAttributes } from 'vue';\nimport { PanelLeftClose, PanelLeftOpen } from '@lucide/vue';\nimport Button from './Button.vue';\nimport { useSidebar } from './sidebar-context';\n\nconst props = defineProps<{\n class?: HTMLAttributes['class'];\n}>();\n\nconst { state, toggleSidebar } = useSidebar();\n</script>\n\n<template>\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n :class=\"['h-7 w-7', props.class]\"\n @click=\"toggleSidebar\"\n >\n <PanelLeftOpen v-if=\"state === 'collapsed'\" />\n <PanelLeftClose v-else />\n <span class=\"sr-only\">Basculer la barre latérale</span>\n </Button>\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});\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=\"cursor-pointer px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-neutral-500 transition-colors duration-150 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-900\"\n @click=\"$emit('sort', field)\"\n >\n <div class=\"flex items-center space-x-1\">\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 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});\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</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=\"flex w-full min-w-0 flex-1 flex-col gap-3 lg:flex-row lg:items-center\">\n <div class=\"relative w-full lg:max-w-md\">\n <div\n class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\"\n >\n <Search class=\"h-5 w-5 text-neutral-400 dark:text-neutral-500\" />\n </div>\n <input\n v-model=\"model\"\n type=\"text\"\n :placeholder=\"placeholder\"\n class=\"block w-full rounded-lg border border-neutral-300 bg-white py-2 pr-3 pl-10 text-sm text-neutral-900 placeholder:text-neutral-500 transition-all duration-200 focus:border-neutral-500 focus:outline-none dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:placeholder:text-neutral-500 dark:focus:border-neutral-500\"\n />\n </div>\n <!-- Slot for additional search fields -->\n <div class=\"min-w-0 flex-1\">\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","<script setup>\nimport { computed, ref, useSlots } from 'vue';\nimport ThSortable from \"./ThSortable.vue\";\nimport LinkButton from \"./LinkButton.vue\";\nimport TableSearch from \"./TableSearch.vue\";\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, 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 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 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});\n\nconst emit = defineEmits(['sort', 'update:searchShowDeleted']);\n\nconst hasActionsSlot = computed(() => !!slots.actions);\nconst searchQuery = ref('');\n\nconst filteredData = computed(() => {\n if (!props.search || !searchQuery.value.trim()) {\n return props.data;\n }\n\n const query = searchQuery.value.toLowerCase().trim();\n\n return props.data.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 sortBy = (field) => {\n emit('sort', field);\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 // If custom class is provided, use it entirely\n if (column.class) {\n return column.class;\n }\n \n // Default behavior\n let classes = 'px-6 py-4 text-sm truncate';\n \n // Add font-medium if not secondary text\n if (!column.isSecondary) {\n classes += ' font-medium';\n }\n \n // Add gray color for secondary text\n if (column.isSecondary) {\n classes += ' text-neutral-600 dark:text-neutral-200';\n }\n \n return classes;\n};\n\nconst getHeaderClass = (column) => {\n if (column.sortable) {\n return ''; // ThSortable handles its own classes\n }\n return 'px-6 py-3 text-left text-[11px] font-semibold tracking-[0.12em] text-neutral-600 uppercase dark:text-neutral-200';\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 @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'\n : '',\n ]\"\n >\n <div :class=\"['overflow-x-auto', isCard ? 'rounded-xl' : '']\">\n <table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-800\">\n <thead class=\"bg-neutral-50/80 dark:bg-neutral-900/80\">\n <tr>\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 @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"[getHeaderClass(column), { 'text-right': column.align === 'right' }]\"\n >\n {{ column.label }}\n </th>\n </template>\n\n <th\n v-if=\"$slots.actions\"\n class=\"px-6 py-3 text-right text-[11px] font-semibold tracking-[0.12em] text-neutral-600 uppercase dark:text-neutral-200\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950\">\n <tr\n v-for=\"(item, index) in filteredData\"\n :key=\"item.id\"\n :class=\"rowClasses(item, index)\"\n >\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"getColumnClass(column)\">\n <template v-if=\"column.key === 'name' && !column.slot\">\n <div class=\"flex items-center\">\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 <slot\n v-else-if=\"column.slot\"\n :name=\"column.slot\"\n :item=\"item\"\n :column=\"column\"\n :index=\"index\"\n />\n <div v-else-if=\"column.render\" v-html=\"column.render(item)\"></div>\n <div v-else>\n {{ getCellContent(item, column) }}\n </div>\n </td>\n </template>\n\n <td v-if=\"$slots.actions\" class=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium\">\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, MagnifyingGlassIcon, PencilSquareIcon } from '@heroicons/vue/24/outline';\nimport Button from './Button.vue';\nimport InputGroup from './InputGroup.vue';\nimport LinkButton from './LinkButton.vue';\nimport ThSortable from './ThSortable.vue';\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 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 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});\n\nconst emit = defineEmits(['sort', 'update', 'update:editingRowKey', 'edit-start', 'edit-cancel']);\n\nconst localSortField = ref(props.sortField);\nconst localSortDirection = ref(props.sortDirection);\nconst searchQuery = ref('');\nconst internalEditingRowKey = ref(null);\nconst editingDraft = ref({});\nconst resolvedEditingRowKey = computed(() => {\n return props.editingRowKey !== undefined ? props.editingRowKey : internalEditingRowKey.value;\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 = props.data;\n\n if (props.search && searchQuery.value.trim()) {\n const query = searchQuery.value.toLowerCase().trim();\n filteredData = props.data.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);\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 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 path.split('.').reduce((current, key) => current?.[key], obj);\n};\n\nconst setNestedValue = (obj, path, value) => {\n if (!path || typeof path !== 'string' || obj == null) {\n return;\n }\n\n const keys = path.split('.');\n const lastKey = keys.pop();\n let current = obj;\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\nconst getDataIndex = (item) => {\n if (item?.id) {\n return props.data.findIndex((row) => row?.id === item.id);\n }\n\n return props.data.findIndex((row) => row === item);\n};\n\nconst getRowKey = (item, index) => {\n if (typeof props.rowKey === 'function') {\n const customKey = props.rowKey(item, index);\n return customKey ?? `row-${index}`;\n }\n\n const resolved = getNestedValue(item, props.rowKey);\n return resolved ?? `row-${index}`;\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 if (column.class) {\n return column.class;\n }\n\n const isEditing = isEditingRow(item, index) && (column.input || slots[getEditSlotName(column)]);\n let classes = isEditing\n ? 'px-6 py-3 text-sm align-top'\n : 'px-6 py-4 text-sm truncate';\n\n if (!column.isSecondary) {\n classes += ' font-medium';\n }\n\n if (column.isSecondary) {\n classes += ' text-neutral-600 dark:text-neutral-200';\n }\n\n return classes;\n};\n\nconst getHeaderClass = (column) => {\n if (column.sortable) {\n return '';\n }\n\n return 'px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-neutral-500 dark:text-neutral-200';\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</script>\n\n<template>\n <div :class=\"['bg-white dark:bg-neutral-950', isCard ? 'mx-4 animate-fadeIn rounded-xl border border-neutral-200 shadow-sm dark:border-neutral-800 md:mx-0' : '']\">\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 <div class=\"relative max-w-sm\">\n <div class=\"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none\">\n <MagnifyingGlassIcon class=\"h-4 w-4 text-neutral-400 dark:text-neutral-200\" />\n </div>\n <input\n v-model=\"searchQuery\"\n type=\"text\"\n :placeholder=\"searchPlaceholder\"\n class=\"block w-full rounded-lg border border-neutral-200 bg-white py-2 pl-9 pr-3 text-sm text-neutral-900 placeholder:text-neutral-500 transition-colors 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\"\n />\n </div>\n </div>\n\n <div v-if=\"hasData\" :class=\"['overflow-x-auto', isCard ? 'rounded-xl' : '']\">\n <table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-800\">\n <thead class=\"bg-neutral-50 dark:bg-neutral-900\">\n <tr>\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 @sort=\"sortBy\"\n >\n {{ column.label }}\n </ThSortable>\n <th\n v-else\n :class=\"[getHeaderClass(column), { 'text-right': column.align === 'right' }]\"\n >\n {{ column.label }}\n </th>\n </template>\n\n <th\n v-if=\"hasActionsColumn\"\n class=\"px-6 py-3 text-right text-xs font-medium uppercase tracking-wider text-neutral-500 dark:text-neutral-200\"\n >\n {{ actionsLabel }}\n </th>\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-neutral-200 bg-white dark:divide-neutral-800 dark:bg-neutral-950\">\n <tr\n v-for=\"(item, index) in sortedData\"\n :key=\"getRowKey(item, index)\"\n :class=\"rowClasses(item, index)\"\n >\n <template v-for=\"column in columns\" :key=\"column.key\">\n <td :class=\"[getColumnClass(column, item, index), { 'text-right': column.align === 'right' }]\">\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 </td>\n </template>\n\n <td\n v-if=\"hasActionsColumn\"\n class=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium\"\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 </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 { 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","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"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_normalizeStyle","_normalizeClass","_toDisplayString","_hoisted_3","_createBlock","CardTabs","$emit","$slots","_renderSlot","_createVNode","_Transition","_mergeProps","$attrs","Card","_unref","Divider","_withDirectives","_hoisted_4","_hoisted_5","DEFAULT_MAX_LENGTH","_hoisted_6","_Teleport","_withModifiers","CustomSelect","startDate","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","InputGroup","TextArea","TinyEditor","SelectInput","TextInput","ImageInput","CheckboxInput","RadioInput","ToggleInput","NotationInput","CheckboxMultipleInput","RadioMultipleInput","Modal","_resolveDynamicComponent","__iconNode","Button","_createTextVNode","TableSearch","ThSortable","_hoisted_14","_hoisted_15","LinkButton","Toast"],"mappings":"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","x_google_ignoreList":[48,49,50,51,52,53,54,55,56,57,58,59]}
|