cisse-vue-ui 0.5.23 → 0.5.25

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.
Files changed (62) hide show
  1. package/dist/{BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js → BadgeType.vue_vue_type_script_setup_true_lang-tHRMWBb-.js} +2 -2
  2. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-tHRMWBb-.js.map +1 -0
  3. package/dist/{BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs → BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs} +2 -2
  4. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs.map +1 -0
  5. package/dist/{Button.vue_vue_type_script_setup_true_lang-CD9QPOeU.js → Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js} +5 -5
  6. package/dist/Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js.map +1 -0
  7. package/dist/{Button.vue_vue_type_script_setup_true_lang-Cev21KGJ.cjs → Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs} +5 -5
  8. package/dist/Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs.map +1 -0
  9. package/dist/{Combobox.vue_vue_type_script_setup_true_lang-D9TIId4E.cjs → Combobox.vue_vue_type_script_setup_true_lang-B8WioleN.cjs} +28 -28
  10. package/dist/Combobox.vue_vue_type_script_setup_true_lang-B8WioleN.cjs.map +1 -0
  11. package/dist/{Combobox.vue_vue_type_script_setup_true_lang-DCLKWzhc.js → Combobox.vue_vue_type_script_setup_true_lang-DKDJV0Ey.js} +28 -28
  12. package/dist/Combobox.vue_vue_type_script_setup_true_lang-DKDJV0Ey.js.map +1 -0
  13. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-Dm4kLAnr.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-B1zS6nTR.js} +13 -13
  14. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-B1zS6nTR.js.map +1 -0
  15. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-CwHYxBhR.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-CvEWAzaw.cjs} +13 -13
  16. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CvEWAzaw.cjs.map +1 -0
  17. package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-D1Q43mhJ.js → DarkModeToggle.vue_vue_type_script_setup_true_lang-BBIkEeLJ.js} +28 -28
  18. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BBIkEeLJ.js.map +1 -0
  19. package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-CSxGvdSP.cjs → DarkModeToggle.vue_vue_type_script_setup_true_lang-BHabkuFp.cjs} +28 -28
  20. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BHabkuFp.cjs.map +1 -0
  21. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-DNeh9Gi-.cjs → Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs} +3 -3
  22. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs.map +1 -0
  23. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-DXV811zB.js → Dropdown.vue_vue_type_script_setup_true_lang-nyND94f_.js} +3 -3
  24. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-nyND94f_.js.map +1 -0
  25. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-C0YzyJnK.cjs → PageLayout.vue_vue_type_script_setup_true_lang-6OrQy9W4.cjs} +3 -3
  26. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-C0YzyJnK.cjs.map → PageLayout.vue_vue_type_script_setup_true_lang-6OrQy9W4.cjs.map} +1 -1
  27. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-ClzYGS8h.js → PageLayout.vue_vue_type_script_setup_true_lang-BgTJd526.js} +3 -3
  28. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-ClzYGS8h.js.map → PageLayout.vue_vue_type_script_setup_true_lang-BgTJd526.js.map} +1 -1
  29. package/dist/components/core/index.cjs +4 -4
  30. package/dist/components/core/index.js +4 -4
  31. package/dist/components/feedback/index.cjs +2 -2
  32. package/dist/components/feedback/index.js +2 -2
  33. package/dist/components/form/index.cjs +1 -1
  34. package/dist/components/form/index.js +1 -1
  35. package/dist/components/index.cjs +7 -7
  36. package/dist/components/index.js +7 -7
  37. package/dist/components/layout/index.cjs +1 -1
  38. package/dist/components/layout/index.js +1 -1
  39. package/dist/components/type/index.cjs +1 -1
  40. package/dist/components/type/index.js +1 -1
  41. package/dist/{index-DwFvFW-3.cjs → index-D5M6ePuo.cjs} +8 -8
  42. package/dist/index-D5M6ePuo.cjs.map +1 -0
  43. package/dist/{index-BMoLBt6A.js → index-yQvianuj.js} +8 -8
  44. package/dist/index-yQvianuj.js.map +1 -0
  45. package/dist/index.cjs +8 -8
  46. package/dist/index.js +8 -8
  47. package/dist/style.css +1 -1
  48. package/package.json +169 -169
  49. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs.map +0 -1
  50. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js.map +0 -1
  51. package/dist/Button.vue_vue_type_script_setup_true_lang-CD9QPOeU.js.map +0 -1
  52. package/dist/Button.vue_vue_type_script_setup_true_lang-Cev21KGJ.cjs.map +0 -1
  53. package/dist/Combobox.vue_vue_type_script_setup_true_lang-D9TIId4E.cjs.map +0 -1
  54. package/dist/Combobox.vue_vue_type_script_setup_true_lang-DCLKWzhc.js.map +0 -1
  55. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CwHYxBhR.cjs.map +0 -1
  56. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Dm4kLAnr.js.map +0 -1
  57. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-CSxGvdSP.cjs.map +0 -1
  58. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-D1Q43mhJ.js.map +0 -1
  59. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DNeh9Gi-.cjs.map +0 -1
  60. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DXV811zB.js.map +0 -1
  61. package/dist/index-BMoLBt6A.js.map +0 -1
  62. package/dist/index-DwFvFW-3.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.vue_vue_type_script_setup_true_lang-B8WioleN.cjs","sources":["../src/components/form/FormLabel.vue","../src/components/form/FormHelp.vue","../src/components/form/FormInput.vue","../src/components/form/FormSelect.vue","../src/components/form/FormGroup.vue","../src/components/form/SearchInput.vue","../src/components/form/Switch.vue","../src/components/form/Slider.vue","../src/components/form/DatePicker.vue","../src/components/form/FileUpload.vue","../src/components/form/Rating.vue","../src/components/form/ColorPicker.vue","../src/components/form/RangeSlider.vue","../src/components/form/Combobox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\ndefineProps<{\n error?: string | boolean\n htmlFor?: string\n}>()\n</script>\n\n<template>\n <label\n :data-error=\"!!error\"\n :for=\"htmlFor ?? ''\"\n class=\"block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300\"\n >\n <slot />\n </label>\n</template>\n","<script lang=\"ts\" setup>\r\ndefineProps<{\r\n /** ID for aria-describedby linking */\r\n id?: string\r\n error?: boolean\r\n text?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <p\r\n :id=\"id\"\r\n :data-error=\"error\"\r\n :role=\"error ? 'alert' : undefined\"\r\n :aria-live=\"error ? 'polite' : undefined\"\r\n class=\"mt-2 text-sm text-gray-400 peer-user-invalid:visible data-[error=true]:text-red-500 dark:text-gray-500\"\r\n >\r\n <slot>{{ text ?? '' }}</slot>\r\n </p>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { InputProps } from '@/types'\r\n\r\nconst props = withDefaults(defineProps<InputProps>(), {\r\n type: 'text',\r\n})\r\n\r\nconst modelValue = defineModel<string>()\r\n</script>\r\n\r\n<template>\r\n <input\r\n :id=\"props.id ?? props.name ?? ''\"\r\n v-model=\"modelValue\"\r\n :disabled=\"props.disabled\"\r\n :name=\"props.name ?? ''\"\r\n :placeholder=\"props.placeholder\"\r\n :type=\"props.type\"\r\n :required=\"props.required\"\r\n :aria-invalid=\"props.invalid || undefined\"\r\n :aria-required=\"props.required || undefined\"\r\n :aria-describedby=\"props.describedBy || undefined\"\r\n class=\"mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 placeholder-gray-400 shadow-sm user-invalid:border-red-500 user-invalid:text-red-600 focus:border-primary focus:ring-1 focus:ring-primary focus:outline-hidden focus:user-invalid:border-red-500 focus:user-invalid:ring-red-500 disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 disabled:shadow-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200 dark:placeholder-gray-500 dark:focus:border-primary dark:focus:ring-primary dark:disabled:border-gray-800 dark:disabled:bg-gray-950 dark:disabled:text-gray-500\"\r\n v-bind=\"$attrs\"\r\n >\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed, ref, watch, nextTick } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport type { SelectProps, SelectOption } from '@/types'\r\nimport { useDropdown } from '@/composables/useDropdown'\r\nimport { useId } from '@/composables/useId'\r\n\r\nconst props = withDefaults(\r\n defineProps<\r\n SelectProps & {\r\n /** Use teleport to body to avoid overflow clipping */\r\n teleport?: boolean\r\n /** Show search input in dropdown */\r\n searchable?: boolean\r\n /** Text shown when no results match search */\r\n noResultsText?: string\r\n /** Custom class for the trigger button */\r\n triggerClass?: string\r\n }\r\n >(),\r\n {\r\n teleport: true,\r\n searchable: false,\r\n noResultsText: 'No results found',\r\n },\r\n)\r\n\r\n// Generate unique IDs for accessibility\r\nconst { id: generatedId, related } = useId({ prefix: 'select', id: props.id })\r\nconst triggerId = computed(() => props.id ?? props.name ?? generatedId.value)\r\nconst listboxId = computed(() => related('listbox'))\r\n\r\nconst modelValue = defineModel<string | number | boolean | null>()\r\n\r\nconst searchQuery = ref('')\r\nconst triggerRef = ref<HTMLElement>()\r\nconst dropdownRef = ref<HTMLElement>()\r\nconst searchInputRef = ref<HTMLInputElement>()\r\n\r\nconst {\r\n isOpen,\r\n highlightedIndex,\r\n dropdownStyle,\r\n open: openDropdown,\r\n close,\r\n handleKeydown: baseHandleKeydown,\r\n scrollToHighlighted,\r\n} = useDropdown(triggerRef, dropdownRef, {\r\n teleport: props.teleport,\r\n gap: 4,\r\n onClose: () => {\r\n searchQuery.value = ''\r\n },\r\n})\r\n\r\nconst visibleOptions = computed(() => {\r\n return (props.options ?? []).filter((opt) => !opt.hidden)\r\n})\r\n\r\nconst filteredOptions = computed(() => {\r\n if (!props.searchable || !searchQuery.value) {\r\n return visibleOptions.value\r\n }\r\n const query = searchQuery.value.toLowerCase()\r\n return visibleOptions.value.filter((opt) =>\r\n opt.label.toLowerCase().includes(query) ||\r\n String(opt.value).toLowerCase().includes(query)\r\n )\r\n})\r\n\r\nconst selectedOption = computed(() => {\r\n return visibleOptions.value.find((opt) => opt.value === modelValue.value)\r\n})\r\n\r\nconst displayValue = computed(() => {\r\n if (selectedOption.value) {\r\n return selectedOption.value.label\r\n }\r\n return props.placeholder || 'Select...'\r\n})\r\n\r\nconst open = () => {\r\n if (props.disabled) return\r\n searchQuery.value = ''\r\n highlightedIndex.value = filteredOptions.value.findIndex(\r\n (opt) => opt.value === modelValue.value\r\n )\r\n openDropdown()\r\n nextTick(() => {\r\n if (props.searchable) {\r\n searchInputRef.value?.focus()\r\n }\r\n })\r\n}\r\n\r\nconst toggle = () => {\r\n if (isOpen.value) {\r\n close()\r\n } else {\r\n open()\r\n }\r\n}\r\n\r\nconst selectOption = (option: SelectOption) => {\r\n modelValue.value = option.value\r\n close()\r\n}\r\n\r\nconst handleKeydown = (event: KeyboardEvent) => {\r\n baseHandleKeydown(event, {\r\n itemCount: filteredOptions.value.length,\r\n onSelect: (index) => {\r\n if (filteredOptions.value[index]) {\r\n selectOption(filteredOptions.value[index])\r\n }\r\n },\r\n onOpen: open,\r\n handleOpenKeys: true,\r\n })\r\n if (isOpen.value) {\r\n scrollToHighlighted(dropdownRef.value ?? null)\r\n }\r\n}\r\n\r\nwatch(searchQuery, () => {\r\n highlightedIndex.value = 0\r\n})\r\n\r\nconst triggerClasses = computed(() => {\r\n const base = 'flex w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm text-left transition'\r\n const state = props.disabled\r\n ? 'cursor-not-allowed border-gray-200 bg-gray-50 text-gray-500 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-500'\r\n : isOpen.value\r\n ? 'border-primary ring-2 ring-primary/20 bg-white dark:bg-gray-900'\r\n : 'border-gray-300 bg-white hover:border-gray-400 dark:border-gray-700 dark:bg-gray-900 dark:hover:border-gray-600'\r\n const text = selectedOption.value\r\n ? 'text-gray-800 dark:text-gray-200'\r\n : 'text-gray-400 dark:text-gray-500'\r\n return [base, state, text, props.triggerClass]\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative\">\r\n <!-- Trigger -->\r\n <button\r\n :id=\"triggerId\"\r\n ref=\"triggerRef\"\r\n type=\"button\"\r\n :disabled=\"disabled\"\r\n :class=\"triggerClasses\"\r\n :aria-haspopup=\"'listbox'\"\r\n :aria-expanded=\"isOpen\"\r\n :aria-controls=\"listboxId\"\r\n :aria-invalid=\"invalid || undefined\"\r\n :aria-describedby=\"describedBy || undefined\"\r\n @click=\"toggle\"\r\n @keydown=\"handleKeydown\"\r\n >\r\n <slot\r\n name=\"selected\"\r\n :option=\"selectedOption\"\r\n :placeholder=\"placeholder\"\r\n >\r\n <span class=\"flex-1 truncate\">{{ displayValue }}</span>\r\n </slot>\r\n <Icon\r\n icon=\"lucide:chevron-down\"\r\n :class=\"['size-4 shrink-0 text-gray-400 transition-transform', isOpen && 'rotate-180']\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n\r\n <!-- Dropdown -->\r\n <Teleport\r\n to=\"body\"\r\n :disabled=\"!teleport\"\r\n >\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"opacity-0 scale-95\"\r\n enter-to-class=\"opacity-100 scale-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"opacity-100 scale-100\"\r\n leave-to-class=\"opacity-0 scale-95\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n :id=\"listboxId\"\r\n ref=\"dropdownRef\"\r\n role=\"listbox\"\r\n :aria-label=\"placeholder || 'Select an option'\"\r\n :style=\"dropdownStyle\"\r\n :class=\"[\r\n 'z-9999 max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800',\r\n !teleport && 'absolute mt-1 w-full',\r\n ]\"\r\n >\r\n <!-- Search input -->\r\n <div\r\n v-if=\"searchable\"\r\n class=\"sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800\"\r\n >\r\n <div class=\"flex items-center gap-2 rounded-md border border-gray-300 bg-gray-50 px-2 py-1.5 dark:border-gray-600 dark:bg-gray-900\">\r\n <Icon\r\n icon=\"lucide:search\"\r\n class=\"size-4 text-gray-400\"\r\n aria-hidden=\"true\"\r\n />\r\n <input\r\n ref=\"searchInputRef\"\r\n v-model=\"searchQuery\"\r\n type=\"text\"\r\n class=\"flex-1 bg-transparent text-sm outline-hidden dark:text-white\"\r\n placeholder=\"Search...\"\r\n aria-label=\"Search options\"\r\n @keydown=\"handleKeydown\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Empty state -->\r\n <div\r\n v-if=\"filteredOptions.length === 0\"\r\n class=\"px-4 py-3 text-sm text-gray-500 dark:text-gray-400\"\r\n role=\"status\"\r\n >\r\n {{ noResultsText }}\r\n </div>\r\n\r\n <!-- Options -->\r\n <div class=\"py-1\">\r\n <button\r\n v-for=\"(option, index) in filteredOptions\"\r\n :key=\"String(option.value)\"\r\n type=\"button\"\r\n role=\"option\"\r\n :aria-selected=\"modelValue === option.value\"\r\n :data-index=\"index\"\r\n :class=\"[\r\n 'flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors',\r\n highlightedIndex === index && 'bg-gray-100 dark:bg-gray-700',\r\n modelValue === option.value && 'bg-primary/10 text-primary',\r\n modelValue !== option.value && 'text-gray-700 dark:text-gray-200',\r\n ]\"\r\n @click=\"selectOption(option)\"\r\n @mouseenter=\"highlightedIndex = index\"\r\n >\r\n <slot\r\n name=\"option\"\r\n :option=\"option\"\r\n :selected=\"modelValue === option.value\"\r\n :index=\"index\"\r\n >\r\n <Icon\r\n v-if=\"modelValue === option.value\"\r\n icon=\"lucide:check\"\r\n class=\"size-4 shrink-0 text-primary\"\r\n aria-hidden=\"true\"\r\n />\r\n <span\r\n v-else\r\n class=\"size-4 shrink-0\"\r\n aria-hidden=\"true\"\r\n />\r\n <span class=\"flex-1\">{{ option.label }}</span>\r\n </slot>\r\n </button>\r\n </div>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport type { FormGroupProps } from '@/types'\r\nimport { useId } from '@/composables/useId'\r\nimport FormLabel from './FormLabel.vue'\r\nimport FormInput from './FormInput.vue'\r\nimport FormSelect from './FormSelect.vue'\r\nimport FormHelp from './FormHelp.vue'\r\n\r\nconst props = withDefaults(defineProps<FormGroupProps>(), {\r\n cols: 6,\r\n})\r\n\r\nconst modelValue = defineModel()\r\n\r\n// Generate unique IDs for accessibility\r\nconst { id: generatedId, related } = useId({ prefix: 'field', id: props.id })\r\nconst inputId = computed(() => props.id ?? props.name ?? generatedId.value)\r\nconst helpId = computed(() => related('help'))\r\n\r\nconst computedCols = computed(() => `span ${props.cols} / span ${props.cols}`)\r\n\r\nconst isSelect = computed(() => props.select === true)\r\n\r\n// Determine if we should link to error message\r\nconst hasError = computed(() => props.error && typeof props.error === 'string')\r\n</script>\r\n\r\n<template>\r\n <div\r\n :style=\"{ gridColumn: computedCols }\"\r\n :hidden=\"hidden\"\r\n >\r\n <slot>\r\n <slot name=\"label\">\r\n <FormLabel\r\n v-if=\"label\"\r\n :html-for=\"inputId\"\r\n :error=\"error\"\r\n >\r\n {{ label }}\r\n </FormLabel>\r\n </slot>\r\n\r\n <slot name=\"input\">\r\n <FormSelect\r\n v-if=\"isSelect\"\r\n v-model=\"modelValue\"\r\n v-bind=\"{ ...$attrs, ...$props }\"\r\n :id=\"inputId\"\r\n :invalid=\"Boolean(error)\"\r\n :described-by=\"hasError ? helpId : undefined\"\r\n />\r\n <FormInput\r\n v-else\r\n v-model=\"modelValue\"\r\n v-bind=\"{ ...$attrs, ...$props }\"\r\n :id=\"inputId\"\r\n :invalid=\"Boolean(error)\"\r\n :described-by=\"hasError ? helpId : undefined\"\r\n />\r\n </slot>\r\n\r\n <FormHelp\r\n v-if=\"hasError\"\r\n :id=\"helpId\"\r\n :error=\"true\"\r\n >\r\n {{ error }}\r\n </FormHelp>\r\n </slot>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nconst {\n placeholder = 'Search...',\n icon = 'lucide:search',\n disabled = false,\n} = defineProps<{\n modelValue?: string\n placeholder?: string\n icon?: string\n disabled?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div class=\"relative\">\n <Icon\n :icon=\"icon\"\n class=\"absolute top-1/2 left-3 size-5 -translate-y-1/2 text-gray-400\"\n />\n <input\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n class=\"focus:border-primary focus:ring-primary w-full rounded-lg border border-gray-300 bg-white py-2 pr-4 pl-10 text-gray-900 placeholder-gray-400 transition-colors disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder-gray-500\"\n type=\"text\"\n @input=\"handleInput\"\n >\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useId } from '@/composables/useId'\n\nconst props = withDefaults(\n defineProps<{\n /** v-model value */\n modelValue?: boolean\n /** Label text */\n label?: string\n /** Description text */\n description?: string\n /** Disabled state */\n disabled?: boolean\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Custom ID for the switch */\n id?: string\n }>(),\n {\n modelValue: false,\n size: 'md',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\n// Generate unique IDs for accessibility\nconst { id: generatedId, related } = useId({ prefix: 'switch', id: props.id })\nconst switchId = computed(() => props.id ?? generatedId.value)\nconst labelId = computed(() => related('label'))\nconst descriptionId = computed(() => related('description'))\n\nconst toggle = () => {\n if (props.disabled) return\n emit('update:modelValue', !props.modelValue)\n}\n\nconst switchSizes = {\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n}\n\nconst dotSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n}\n\nconst translateSizes = {\n sm: 'translate-x-5',\n md: 'translate-x-6',\n lg: 'translate-x-8',\n}\n</script>\n\n<template>\n <label\n class=\"inline-flex items-start gap-3\"\n :class=\"disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n >\n <button\n :id=\"switchId\"\n type=\"button\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n :aria-labelledby=\"label ? labelId : undefined\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n :disabled=\"disabled\"\n :class=\"[\n 'relative inline-flex shrink-0 items-center rounded-full transition-colors focus:outline-hidden focus:ring-2 focus:ring-primary focus:ring-offset-2',\n switchSizes[size],\n modelValue ? 'bg-primary' : 'bg-gray-300 dark:bg-gray-600',\n ]\"\n @click=\"toggle\"\n >\n <span\n :class=\"[\n 'inline-block transform rounded-full bg-white shadow-sm transition-transform',\n dotSizes[size],\n modelValue ? translateSizes[size] : 'translate-x-1',\n ]\"\n aria-hidden=\"true\"\n />\n </button>\n <div\n v-if=\"label || description\"\n class=\"flex flex-col\"\n >\n <span\n v-if=\"label\"\n :id=\"labelId\"\n class=\"text-sm font-medium text-gray-900 dark:text-white\"\n >\n {{ label }}\n </span>\n <span\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"text-sm text-gray-500 dark:text-gray-400\"\n >\n {{ description }}\n </span>\n </div>\n </label>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Minimum value */\r\n min?: number\r\n /** Maximum value */\r\n max?: number\r\n /** Step increment */\r\n step?: number\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Show value label */\r\n showValue?: boolean\r\n /** Format value for display */\r\n formatValue?: (value: number) => string\r\n }>(),\r\n {\r\n min: 0,\r\n max: 100,\r\n step: 1,\r\n disabled: false,\r\n showValue: false,\r\n },\r\n)\r\n\r\nconst modelValue = defineModel<number>({ default: 0 })\r\n\r\nconst percentage = computed(() => {\r\n return ((modelValue.value - props.min) / (props.max - props.min)) * 100\r\n})\r\n\r\nconst displayValue = computed(() => {\r\n if (props.formatValue) {\r\n return props.formatValue(modelValue.value)\r\n }\r\n return modelValue.value.toString()\r\n})\r\n\r\nconst handleInput = (event: Event) => {\r\n const target = event.target as HTMLInputElement\r\n modelValue.value = Number(target.value)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"w-full\">\r\n <div\n v-if=\"showValue\"\n class=\"mb-2 flex justify-between text-sm\"\n >\r\n <span class=\"text-gray-600 dark:text-gray-400\">{{ min }}</span>\r\n <span class=\"font-medium text-gray-900 dark:text-white\">{{ displayValue }}</span>\r\n <span class=\"text-gray-600 dark:text-gray-400\">{{ max }}</span>\r\n </div>\r\n <div class=\"relative\">\r\n <input\r\n type=\"range\"\r\n :value=\"modelValue\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :step=\"step\"\r\n :disabled=\"disabled\"\r\n class=\"slider-input w-full cursor-pointer appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50\"\r\n @input=\"handleInput\"\r\n >\r\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center\">\r\n <div\r\n class=\"h-2 rounded-full bg-primary\"\r\n :style=\"{ width: `${percentage}%` }\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.slider-input {\r\n height: 0.5rem;\r\n}\r\n\r\n.slider-input::-webkit-slider-runnable-track {\r\n height: 0.5rem;\r\n border-radius: 9999px;\r\n background-color: #e5e7eb;\r\n}\r\n\r\n.dark .slider-input::-webkit-slider-runnable-track {\r\n background-color: #374151;\r\n}\r\n\r\n.slider-input::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 1.25rem;\r\n height: 1.25rem;\r\n border-radius: 9999px;\r\n background-color: var(--color-primary, #3b82f6);\r\n border: 2px solid white;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\r\n margin-top: -0.375rem;\r\n cursor: pointer;\r\n}\r\n\r\n.slider-input::-moz-range-track {\r\n height: 0.5rem;\r\n border-radius: 9999px;\r\n background-color: #e5e7eb;\r\n}\r\n\r\n.dark .slider-input::-moz-range-track {\r\n background-color: #374151;\r\n}\r\n\r\n.slider-input::-moz-range-thumb {\r\n width: 1.25rem;\r\n height: 1.25rem;\r\n border-radius: 9999px;\r\n background-color: var(--color-primary, #3b82f6);\r\n border: 2px solid white;\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\r\n cursor: pointer;\r\n}\r\n\r\n.slider-input:focus::-webkit-slider-thumb {\r\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);\r\n}\r\n\r\n.slider-input:focus::-moz-range-thumb {\r\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport { useDropdown } from '@/composables/useDropdown'\r\nimport { useId } from '@/composables/useId'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Placeholder text */\r\n placeholder?: string\r\n /** Date format for display */\r\n format?: string\r\n /** Locale for formatting */\r\n locale?: string\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Minimum selectable date */\r\n minDate?: Date\r\n /** Maximum selectable date */\r\n maxDate?: Date\r\n /** Use teleport */\r\n teleport?: boolean\r\n /** Custom ID for accessibility */\r\n id?: string\r\n }>(),\r\n {\r\n placeholder: 'Select date',\r\n format: 'short',\r\n locale: 'en-US',\r\n disabled: false,\r\n teleport: true,\r\n },\r\n)\r\n\r\n// Generate unique IDs for accessibility\r\nconst { related } = useId({ prefix: 'datepicker', id: props.id })\r\nconst triggerId = computed(() => related('trigger'))\r\nconst calendarId = computed(() => related('calendar'))\r\nconst gridId = computed(() => related('grid'))\r\n\r\nconst modelValue = defineModel<Date | null>({ default: null })\r\n\r\nconst triggerRef = ref<HTMLElement>()\r\nconst calendarRef = ref<HTMLElement>()\r\n\r\nconst { isOpen, dropdownStyle, toggle, close } = useDropdown(triggerRef, calendarRef, {\r\n teleport: props.teleport,\r\n gap: 4,\r\n})\r\n\r\nconst currentMonth = ref(modelValue.value ? new Date(modelValue.value) : new Date())\r\n\r\nconst weekDays = computed(() => {\r\n const days = []\r\n const formatter = new Intl.DateTimeFormat(props.locale, { weekday: 'short' })\r\n for (let i = 0; i < 7; i++) {\r\n const date = new Date(2024, 0, i) // Jan 2024 starts on Monday\r\n days.push(formatter.format(date))\r\n }\r\n return days\r\n})\r\n\r\nconst monthYear = computed(() => {\r\n const formatter = new Intl.DateTimeFormat(props.locale, { month: 'long', year: 'numeric' })\r\n return formatter.format(currentMonth.value)\r\n})\r\n\r\nconst calendarDays = computed(() => {\r\n const year = currentMonth.value.getFullYear()\r\n const month = currentMonth.value.getMonth()\r\n\r\n const firstDay = new Date(year, month, 1)\r\n const lastDay = new Date(year, month + 1, 0)\r\n\r\n const days: Array<{ date: Date; isCurrentMonth: boolean; isToday: boolean; isSelected: boolean; isDisabled: boolean }> = []\r\n\r\n // Get the day of week for the first day (0 = Sunday)\r\n let startDay = firstDay.getDay()\r\n // Adjust for Monday start\r\n startDay = startDay === 0 ? 6 : startDay - 1\r\n\r\n // Previous month days\r\n for (let i = startDay - 1; i >= 0; i--) {\r\n const date = new Date(year, month, -i)\r\n days.push({\r\n date,\r\n isCurrentMonth: false,\r\n isToday: false,\r\n isSelected: false,\r\n isDisabled: isDateDisabled(date),\r\n })\r\n }\r\n\r\n // Current month days\r\n const today = new Date()\r\n for (let i = 1; i <= lastDay.getDate(); i++) {\r\n const date = new Date(year, month, i)\r\n days.push({\r\n date,\r\n isCurrentMonth: true,\r\n isToday: isSameDay(date, today),\r\n isSelected: modelValue.value ? isSameDay(date, modelValue.value) : false,\r\n isDisabled: isDateDisabled(date),\r\n })\r\n }\r\n\r\n // Next month days\r\n const remainingDays = 42 - days.length\r\n for (let i = 1; i <= remainingDays; i++) {\r\n const date = new Date(year, month + 1, i)\r\n days.push({\r\n date,\r\n isCurrentMonth: false,\r\n isToday: false,\r\n isSelected: false,\r\n isDisabled: isDateDisabled(date),\r\n })\r\n }\r\n\r\n return days\r\n})\r\n\r\nconst displayValue = computed(() => {\r\n if (!modelValue.value) return ''\r\n const formatter = new Intl.DateTimeFormat(props.locale, {\r\n dateStyle: props.format as 'short' | 'medium' | 'long' | 'full',\r\n })\r\n return formatter.format(modelValue.value)\r\n})\r\n\r\nconst isSameDay = (a: Date, b: Date) => {\r\n return (\r\n a.getFullYear() === b.getFullYear() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getDate() === b.getDate()\r\n )\r\n}\r\n\r\nconst isDateDisabled = (date: Date) => {\r\n if (props.minDate && date < props.minDate) return true\r\n if (props.maxDate && date > props.maxDate) return true\r\n return false\r\n}\r\n\r\nconst prevMonth = () => {\r\n currentMonth.value = new Date(currentMonth.value.getFullYear(), currentMonth.value.getMonth() - 1, 1)\r\n}\r\n\r\nconst nextMonth = () => {\r\n currentMonth.value = new Date(currentMonth.value.getFullYear(), currentMonth.value.getMonth() + 1, 1)\r\n}\r\n\r\nconst selectDate = (day: typeof calendarDays.value[0]) => {\r\n if (day.isDisabled) return\r\n modelValue.value = day.date\r\n close()\r\n}\r\n\r\nconst clear = () => {\r\n modelValue.value = null\r\n}\r\n\r\n// Generate accessible label for a date\r\nconst getDateLabel = (date: Date): string => {\r\n const formatter = new Intl.DateTimeFormat(props.locale, {\r\n weekday: 'long',\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n })\r\n return formatter.format(date)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative\">\r\n <button\r\n :id=\"triggerId\"\r\n ref=\"triggerRef\"\r\n type=\"button\"\r\n :disabled=\"disabled\"\r\n :aria-expanded=\"isOpen\"\r\n :aria-haspopup=\"'dialog'\"\r\n :aria-controls=\"calendarId\"\r\n :class=\"[\r\n 'flex w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm text-left transition',\r\n disabled\r\n ? 'cursor-not-allowed border-gray-200 bg-gray-50 text-gray-500 dark:border-gray-800 dark:bg-gray-950'\r\n : isOpen\r\n ? 'border-primary ring-2 ring-primary/20 bg-white dark:bg-gray-900'\r\n : 'border-gray-300 bg-white hover:border-gray-400 dark:border-gray-700 dark:bg-gray-900',\r\n modelValue ? 'text-gray-900 dark:text-white' : 'text-gray-400 dark:text-gray-500',\r\n ]\"\r\n @click=\"toggle\"\r\n >\r\n <span class=\"flex-1 truncate\">{{ displayValue || placeholder }}</span>\r\n <div class=\"flex items-center gap-1\">\r\n <button\r\n v-if=\"modelValue\"\r\n type=\"button\"\r\n class=\"rounded p-0.5 hover:bg-gray-100 dark:hover:bg-gray-800\"\r\n aria-label=\"Clear date\"\r\n @click.stop=\"clear\"\r\n >\r\n <Icon\r\n icon=\"lucide:x\"\r\n class=\"size-4 text-gray-400\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n <Icon\r\n icon=\"lucide:calendar\"\r\n class=\"size-4 text-gray-400\"\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n </button>\r\n\r\n <Teleport\r\n to=\"body\"\r\n :disabled=\"!teleport\"\r\n >\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"opacity-0 scale-95\"\r\n enter-to-class=\"opacity-100 scale-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"opacity-100 scale-100\"\r\n leave-to-class=\"opacity-0 scale-95\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n :id=\"calendarId\"\r\n ref=\"calendarRef\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n :aria-label=\"`Choose date, ${monthYear}`\"\r\n :style=\"dropdownStyle\"\r\n class=\"z-9999 w-72 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800\"\r\n >\r\n <!-- Header -->\r\n <div class=\"mb-4 flex items-center justify-between\">\r\n <button\r\n type=\"button\"\r\n class=\"rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n aria-label=\"Previous month\"\r\n @click=\"prevMonth\"\r\n >\r\n <Icon\r\n icon=\"lucide:chevron-left\"\r\n class=\"size-5 text-gray-600 dark:text-gray-400\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n <span\r\n class=\"font-medium text-gray-900 dark:text-white\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n >\r\n {{ monthYear }}\r\n </span>\r\n <button\r\n type=\"button\"\r\n class=\"rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n aria-label=\"Next month\"\r\n @click=\"nextMonth\"\r\n >\r\n <Icon\r\n icon=\"lucide:chevron-right\"\r\n class=\"size-5 text-gray-600 dark:text-gray-400\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </div>\r\n\r\n <!-- Week days -->\r\n <div\r\n class=\"mb-2 grid grid-cols-7 gap-1\"\r\n role=\"row\"\r\n >\r\n <div\r\n v-for=\"day in weekDays\"\r\n :key=\"day\"\r\n class=\"text-center text-xs font-medium text-gray-500 dark:text-gray-400\"\r\n role=\"columnheader\"\r\n :abbr=\"day\"\r\n >\r\n {{ day }}\r\n </div>\r\n </div>\r\n\r\n <!-- Days grid -->\r\n <div\r\n :id=\"gridId\"\r\n class=\"grid grid-cols-7 gap-1\"\r\n role=\"grid\"\r\n :aria-label=\"monthYear\"\r\n >\r\n <button\r\n v-for=\"(day, index) in calendarDays\"\r\n :key=\"index\"\r\n type=\"button\"\r\n role=\"gridcell\"\r\n :aria-label=\"getDateLabel(day.date)\"\r\n :aria-selected=\"day.isSelected\"\r\n :aria-disabled=\"day.isDisabled || undefined\"\r\n :disabled=\"day.isDisabled\"\r\n :class=\"[\r\n 'size-8 rounded text-sm transition',\r\n day.isDisabled && 'cursor-not-allowed opacity-30',\r\n !day.isCurrentMonth && 'text-gray-400 dark:text-gray-600',\r\n day.isCurrentMonth && !day.isSelected && !day.isToday && 'text-gray-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-700',\r\n day.isToday && !day.isSelected && 'bg-gray-100 font-semibold text-gray-900 dark:bg-gray-700 dark:text-white',\r\n day.isSelected && 'bg-primary text-white font-semibold',\r\n ]\"\r\n @click=\"selectDate(day)\"\r\n >\r\n {{ day.date.getDate() }}\r\n </button>\r\n </div>\r\n\r\n <!-- Today button -->\r\n <div class=\"mt-4 border-t border-gray-200 pt-3 dark:border-gray-700\">\r\n <button\r\n type=\"button\"\r\n class=\"w-full rounded py-1.5 text-sm font-medium text-primary hover:bg-primary/10\"\r\n @click=\"selectDate({ date: new Date(), isCurrentMonth: true, isToday: true, isSelected: false, isDisabled: false })\"\r\n >\r\n Today\r\n </button>\r\n </div>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport interface UploadedFile {\r\n file: File\r\n id: string\r\n progress: number\r\n status: 'pending' | 'uploading' | 'success' | 'error'\r\n error?: string\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Accepted file types (e.g., 'image/*,.pdf') */\r\n accept?: string\r\n /** Allow multiple files */\r\n multiple?: boolean\r\n /** Maximum file size in bytes */\r\n maxSize?: number\r\n /** Maximum number of files */\r\n maxFiles?: number\r\n /** Disable the upload */\r\n disabled?: boolean\r\n /** Custom label text */\r\n label?: string\r\n /** Custom description text */\r\n description?: string\r\n }>(),\r\n {\r\n multiple: false,\r\n disabled: false,\r\n label: 'Drop files here or click to upload',\r\n description: '',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'files-selected': [files: File[]]\r\n 'file-removed': [file: File]\r\n 'error': [message: string]\r\n}>()\r\n\r\nconst isDragging = ref(false)\r\nconst files = ref<UploadedFile[]>([])\r\nconst inputRef = ref<HTMLInputElement>()\r\n\r\nconst formatSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 B'\r\n const k = 1024\r\n const sizes = ['B', 'KB', 'MB', 'GB']\r\n const i = Math.floor(Math.log(bytes) / Math.log(k))\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i]\r\n}\r\n\r\nconst validateFile = (file: File): string | null => {\r\n if (props.maxSize && file.size > props.maxSize) {\r\n return `File too large. Max size: ${formatSize(props.maxSize)}`\r\n }\r\n if (props.accept) {\r\n const acceptedTypes = props.accept.split(',').map((t) => t.trim())\r\n const fileType = file.type\r\n const fileExt = '.' + file.name.split('.').pop()?.toLowerCase()\r\n\r\n const isAccepted = acceptedTypes.some((type) => {\r\n if (type.startsWith('.')) {\r\n return fileExt === type.toLowerCase()\r\n }\r\n if (type.endsWith('/*')) {\r\n return fileType.startsWith(type.replace('/*', '/'))\r\n }\r\n return fileType === type\r\n })\r\n\r\n if (!isAccepted) {\r\n return `File type not accepted`\r\n }\r\n }\r\n return null\r\n}\r\n\r\nconst addFiles = (newFiles: FileList | File[]) => {\r\n const fileArray = Array.from(newFiles)\r\n const validFiles: File[] = []\r\n\r\n for (const file of fileArray) {\r\n if (props.maxFiles && files.value.length + validFiles.length >= props.maxFiles) {\r\n emit('error', `Maximum ${props.maxFiles} files allowed`)\r\n break\r\n }\r\n\r\n const error = validateFile(file)\r\n if (error) {\r\n emit('error', `${file.name}: ${error}`)\r\n continue\r\n }\r\n\r\n validFiles.push(file)\r\n files.value.push({\r\n file,\r\n id: Math.random().toString(36).substring(2),\r\n progress: 0,\r\n status: 'pending',\r\n })\r\n }\r\n\r\n if (validFiles.length > 0) {\r\n emit('files-selected', validFiles)\r\n }\r\n}\r\n\r\nconst removeFile = (id: string) => {\r\n const index = files.value.findIndex((f) => f.id === id)\r\n if (index > -1) {\r\n const removed = files.value.splice(index, 1)[0]\r\n emit('file-removed', removed.file)\r\n }\r\n}\r\n\r\nconst handleDrop = (e: DragEvent) => {\r\n isDragging.value = false\r\n if (props.disabled || !e.dataTransfer?.files) return\r\n addFiles(e.dataTransfer.files)\r\n}\r\n\r\nconst handleDragOver = (e: DragEvent) => {\r\n e.preventDefault()\r\n if (!props.disabled) {\r\n isDragging.value = true\r\n }\r\n}\r\n\r\nconst handleDragLeave = () => {\r\n isDragging.value = false\r\n}\r\n\r\nconst handleClick = () => {\r\n if (!props.disabled) {\r\n inputRef.value?.click()\r\n }\r\n}\r\n\r\nconst handleInputChange = (e: Event) => {\r\n const target = e.target as HTMLInputElement\r\n if (target.files) {\r\n addFiles(target.files)\r\n target.value = ''\r\n }\r\n}\r\n\r\nconst dropzoneClasses = computed(() => {\r\n const base =\r\n 'relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors'\r\n if (props.disabled) {\r\n return `${base} border-gray-200 bg-gray-50 cursor-not-allowed dark:border-gray-700 dark:bg-gray-800`\r\n }\r\n if (isDragging.value) {\r\n return `${base} border-primary-500 bg-primary-50 dark:bg-primary-900/20`\r\n }\r\n return `${base} border-gray-300 hover:border-primary-400 hover:bg-gray-50 dark:border-gray-600 dark:hover:border-primary-500 dark:hover:bg-gray-800`\r\n})\r\n\r\nconst getFileIcon = (file: File): string => {\r\n if (file.type.startsWith('image/')) return 'heroicons:photo'\r\n if (file.type.startsWith('video/')) return 'heroicons:video-camera'\r\n if (file.type.startsWith('audio/')) return 'heroicons:musical-note'\r\n if (file.type.includes('pdf')) return 'heroicons:document-text'\r\n if (file.type.includes('zip') || file.type.includes('rar')) return 'heroicons:archive-box'\r\n return 'heroicons:document'\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-4\">\r\n <!-- Dropzone -->\r\n <div\r\n :class=\"dropzoneClasses\"\r\n @drop.prevent=\"handleDrop\"\r\n @dragover=\"handleDragOver\"\r\n @dragleave=\"handleDragLeave\"\r\n @click=\"handleClick\"\r\n >\r\n <input\r\n ref=\"inputRef\"\r\n type=\"file\"\r\n class=\"hidden\"\r\n :accept=\"accept\"\r\n :multiple=\"multiple\"\r\n :disabled=\"disabled\"\r\n @change=\"handleInputChange\"\r\n />\r\n\r\n <div class=\"space-y-2\">\r\n <Icon\r\n icon=\"heroicons:cloud-arrow-up\"\r\n class=\"size-12 mx-auto text-gray-400\"\r\n :class=\"{ 'text-primary-500': isDragging }\"\r\n />\r\n <p class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\r\n {{ label }}\r\n </p>\r\n <p v-if=\"description\" class=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {{ description }}\r\n </p>\r\n <p v-if=\"maxSize\" class=\"text-xs text-gray-500 dark:text-gray-400\">\r\n Max size: {{ formatSize(maxSize) }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- File list -->\r\n <ul v-if=\"files.length > 0\" class=\"space-y-2\">\r\n <li\r\n v-for=\"uploadedFile in files\"\r\n :key=\"uploadedFile.id\"\r\n class=\"flex items-center gap-3 p-3 bg-gray-50 dark:bg-gray-800 rounded-lg\"\r\n >\r\n <Icon :icon=\"getFileIcon(uploadedFile.file)\" class=\"size-8 text-gray-400\" />\r\n\r\n <div class=\"flex-1 min-w-0\">\r\n <p class=\"text-sm font-medium text-gray-700 dark:text-gray-300 truncate\">\r\n {{ uploadedFile.file.name }}\r\n </p>\r\n <p class=\"text-xs text-gray-500 dark:text-gray-400\">\r\n {{ formatSize(uploadedFile.file.size) }}\r\n </p>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"p-1 text-gray-400 hover:text-red-500 rounded\"\r\n @click.stop=\"removeFile(uploadedFile.id)\"\r\n >\r\n <Icon icon=\"heroicons:x-mark\" class=\"size-5\" />\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type RatingSize = 'sm' | 'md' | 'lg'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current rating value */\r\n modelValue?: number\r\n /** Maximum rating */\r\n max?: number\r\n /** Allow half stars */\r\n allowHalf?: boolean\r\n /** Read only mode */\r\n readonly?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Size of stars */\r\n size?: RatingSize\r\n /** Icon for filled star */\r\n filledIcon?: string\r\n /** Icon for empty star */\r\n emptyIcon?: string\r\n /** Icon for half star */\r\n halfIcon?: string\r\n /** Color of filled stars */\r\n color?: string\r\n /** Show rating value */\r\n showValue?: boolean\r\n }>(),\r\n {\r\n modelValue: 0,\r\n max: 5,\r\n allowHalf: false,\r\n readonly: false,\r\n disabled: false,\r\n size: 'md',\r\n filledIcon: 'heroicons:star-solid',\r\n emptyIcon: 'heroicons:star',\r\n halfIcon: 'heroicons:star-solid',\r\n color: 'text-yellow-400',\r\n showValue: false,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: number]\r\n}>()\r\n\r\nconst hoverValue = ref<number | null>(null)\r\n\r\nconst displayValue = computed(() => {\r\n return hoverValue.value !== null ? hoverValue.value : props.modelValue\r\n})\r\n\r\nconst sizeClasses = computed(() => {\r\n switch (props.size) {\r\n case 'sm':\r\n return 'size-4'\r\n case 'lg':\r\n return 'size-8'\r\n default:\r\n return 'size-6'\r\n }\r\n})\r\n\r\nconst getStarState = (index: number): 'full' | 'half' | 'empty' => {\r\n const value = displayValue.value\r\n if (value >= index) return 'full'\r\n if (props.allowHalf && value >= index - 0.5) return 'half'\r\n return 'empty'\r\n}\r\n\r\nconst handleClick = (index: number, event: MouseEvent) => {\r\n if (props.readonly || props.disabled) return\r\n\r\n let value = index\r\n if (props.allowHalf) {\r\n const rect = (event.target as HTMLElement).getBoundingClientRect()\r\n const isLeftHalf = event.clientX - rect.left < rect.width / 2\r\n value = isLeftHalf ? index - 0.5 : index\r\n }\r\n\r\n emit('update:modelValue', value)\r\n}\r\n\r\nconst handleMouseMove = (index: number, event: MouseEvent) => {\r\n if (props.readonly || props.disabled) return\r\n\r\n let value = index\r\n if (props.allowHalf) {\r\n const rect = (event.target as HTMLElement).getBoundingClientRect()\r\n const isLeftHalf = event.clientX - rect.left < rect.width / 2\r\n value = isLeftHalf ? index - 0.5 : index\r\n }\r\n\r\n hoverValue.value = value\r\n}\r\n\r\nconst handleMouseLeave = () => {\r\n hoverValue.value = null\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"flex items-center gap-1\">\r\n <div\r\n class=\"flex items-center\"\r\n @mouseleave=\"handleMouseLeave\"\r\n >\r\n <button\r\n v-for=\"index in max\"\r\n :key=\"index\"\r\n type=\"button\"\r\n class=\"relative focus:outline-hidden focus:ring-2 focus:ring-primary-500 focus:ring-offset-1 rounded\"\r\n :class=\"[\r\n readonly || disabled ? 'cursor-default' : 'cursor-pointer',\r\n disabled && 'opacity-50',\r\n ]\"\r\n :disabled=\"readonly || disabled\"\r\n @click=\"handleClick(index, $event)\"\r\n @mousemove=\"handleMouseMove(index, $event)\"\r\n >\r\n <!-- Empty star (background) -->\r\n <Icon\r\n :icon=\"emptyIcon\"\r\n :class=\"[sizeClasses, 'text-gray-300 dark:text-gray-600']\"\r\n />\r\n\r\n <!-- Filled star (overlay) -->\r\n <div\r\n class=\"absolute inset-0 overflow-hidden\"\r\n :style=\"{\r\n width:\r\n getStarState(index) === 'full'\r\n ? '100%'\r\n : getStarState(index) === 'half'\r\n ? '50%'\r\n : '0%',\r\n }\"\r\n >\r\n <Icon\r\n :icon=\"filledIcon\"\r\n :class=\"[sizeClasses, color]\"\r\n />\r\n </div>\r\n </button>\r\n </div>\r\n\r\n <span\r\n v-if=\"showValue\"\r\n class=\"ml-2 text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ modelValue.toFixed(allowHalf ? 1 : 0) }}\r\n </span>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, watch, computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current color value (hex) */\r\n modelValue?: string\r\n /** Predefined color swatches */\r\n swatches?: string[]\r\n /** Show custom color input */\r\n showInput?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Label */\r\n label?: string\r\n /** Teleport target (e.g., 'body', '#app'). Set to false to disable teleport. */\r\n teleport?: string | false\r\n }>(),\r\n {\r\n modelValue: '#3b82f6',\r\n swatches: () => [\r\n '#ef4444', '#f97316', '#f59e0b', '#eab308', '#84cc16',\r\n '#22c55e', '#10b981', '#14b8a6', '#06b6d4', '#0ea5e9',\r\n '#3b82f6', '#6366f1', '#8b5cf6', '#a855f7', '#d946ef',\r\n '#ec4899', '#f43f5e', '#78716c', '#737373', '#000000',\r\n ],\r\n showInput: true,\r\n disabled: false,\r\n teleport: false,\r\n },\r\n)\r\n\r\nconst teleportDisabled = computed(() => props.teleport === false)\r\nconst teleportTarget = computed(() => props.teleport === false ? 'body' : props.teleport)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string]\r\n}>()\r\n\r\nconst isOpen = ref(false)\r\nconst inputValue = ref(props.modelValue)\r\n\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n inputValue.value = newValue\r\n },\r\n)\r\n\r\nconst selectColor = (color: string) => {\r\n emit('update:modelValue', color)\r\n inputValue.value = color\r\n}\r\n\r\nconst handleInputChange = () => {\r\n const color = inputValue.value\r\n // Validate hex color\r\n if (/^#([0-9A-Fa-f]{3}){1,2}$/.test(color)) {\r\n emit('update:modelValue', color)\r\n }\r\n}\r\n\r\nconst handleNativeInput = (event: Event) => {\r\n const color = (event.target as HTMLInputElement).value\r\n emit('update:modelValue', color)\r\n inputValue.value = color\r\n}\r\n\r\nconst togglePicker = () => {\r\n if (!props.disabled) {\r\n isOpen.value = !isOpen.value\r\n }\r\n}\r\n\r\nconst closePicker = () => {\r\n isOpen.value = false\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative inline-block\">\r\n <label v-if=\"label\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\r\n {{ label }}\r\n </label>\r\n\r\n <!-- Trigger -->\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-2 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n :class=\"{ 'opacity-50 cursor-not-allowed': disabled }\"\r\n :disabled=\"disabled\"\r\n @click=\"togglePicker\"\r\n >\r\n <span\r\n class=\"size-6 rounded border border-gray-200 dark:border-gray-600\"\r\n :style=\"{ backgroundColor: modelValue }\"\r\n />\r\n <span class=\"text-sm font-mono text-gray-700 dark:text-gray-300\">\r\n {{ modelValue }}\r\n </span>\r\n <Icon\r\n icon=\"heroicons:chevron-down\"\r\n class=\"size-4 text-gray-400\"\r\n :class=\"{ 'rotate-180': isOpen }\"\r\n />\r\n </button>\r\n\r\n <!-- Dropdown -->\r\n <Teleport :to=\"teleportTarget\" :disabled=\"teleportDisabled\">\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"opacity-0 scale-95\"\r\n enter-to-class=\"opacity-100 scale-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"opacity-100 scale-100\"\r\n leave-to-class=\"opacity-0 scale-95\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n class=\"absolute z-50 mt-2 p-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg\"\r\n @click.stop\r\n >\r\n <!-- Swatches -->\r\n <div class=\"grid grid-cols-5 gap-2 mb-3\">\r\n <button\r\n v-for=\"color in swatches\"\r\n :key=\"color\"\r\n type=\"button\"\r\n class=\"size-8 rounded-lg border-2 transition-transform hover:scale-110 focus:outline-hidden focus:ring-2 focus:ring-primary-500 focus:ring-offset-1\"\r\n :class=\"[\r\n modelValue === color\r\n ? 'border-primary-500 ring-2 ring-primary-500 ring-offset-1'\r\n : 'border-transparent',\r\n ]\"\r\n :style=\"{ backgroundColor: color }\"\r\n :title=\"color\"\r\n @click=\"selectColor(color)\"\r\n >\r\n <Icon\r\n v-if=\"modelValue === color\"\r\n icon=\"heroicons:check\"\r\n class=\"size-4 mx-auto\"\r\n :class=\"[\r\n ['#ffffff', '#f9fafb', '#f3f4f6', '#e5e7eb', '#eab308', '#f59e0b'].includes(color)\r\n ? 'text-gray-800'\r\n : 'text-white',\r\n ]\"\r\n />\r\n </button>\r\n </div>\r\n\r\n <!-- Custom input -->\r\n <div v-if=\"showInput\" class=\"flex items-center gap-2 pt-3 border-t border-gray-200 dark:border-gray-700\">\r\n <input\r\n type=\"color\"\r\n :value=\"modelValue\"\r\n class=\"size-8 rounded cursor-pointer border-0 p-0\"\r\n @input=\"handleNativeInput\"\r\n />\r\n <input\r\n v-model=\"inputValue\"\r\n type=\"text\"\r\n class=\"flex-1 px-2 py-1 text-sm font-mono border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-white\"\r\n placeholder=\"#000000\"\r\n @change=\"handleInputChange\"\r\n @keyup.enter=\"handleInputChange\"\r\n />\r\n </div>\r\n </div>\r\n </Transition>\r\n\r\n <!-- Click outside to close -->\r\n <div\r\n v-if=\"isOpen\"\r\n class=\"fixed inset-0 z-40\"\r\n @click=\"closePicker\"\r\n />\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current range value [min, max] */\r\n modelValue?: [number, number]\r\n /** Minimum value */\r\n min?: number\r\n /** Maximum value */\r\n max?: number\r\n /** Step increment */\r\n step?: number\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Show value labels */\r\n showLabels?: boolean\r\n /** Show min/max labels */\r\n showMinMax?: boolean\r\n /** Format function for labels */\r\n formatLabel?: (value: number) => string\r\n }>(),\r\n {\r\n modelValue: () => [25, 75],\r\n min: 0,\r\n max: 100,\r\n step: 1,\r\n disabled: false,\r\n showLabels: true,\r\n showMinMax: true,\r\n formatLabel: (v: number) => v.toString(),\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: [number, number]]\r\n}>()\r\n\r\nconst sliderRef = ref<HTMLDivElement>()\r\nconst dragging = ref<'min' | 'max' | null>(null)\r\n\r\nconst minValue = computed(() => props.modelValue[0])\r\nconst maxValue = computed(() => props.modelValue[1])\r\n\r\nconst minPercent = computed(() => {\r\n return ((minValue.value - props.min) / (props.max - props.min)) * 100\r\n})\r\n\r\nconst maxPercent = computed(() => {\r\n return ((maxValue.value - props.min) / (props.max - props.min)) * 100\r\n})\r\n\r\nconst rangeStyle = computed(() => ({\r\n left: `${minPercent.value}%`,\r\n width: `${maxPercent.value - minPercent.value}%`,\r\n}))\r\n\r\nconst getValueFromPosition = (clientX: number): number => {\r\n if (!sliderRef.value) return props.min\r\n\r\n const rect = sliderRef.value.getBoundingClientRect()\r\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\r\n const rawValue = props.min + percent * (props.max - props.min)\r\n\r\n // Snap to step\r\n const steppedValue = Math.round(rawValue / props.step) * props.step\r\n return Math.max(props.min, Math.min(props.max, steppedValue))\r\n}\r\n\r\nconst updateValue = (handle: 'min' | 'max', newValue: number) => {\r\n const [currentMin, currentMax] = props.modelValue\r\n\r\n if (handle === 'min') {\r\n // Don't let min exceed max\r\n const clampedValue = Math.min(newValue, currentMax)\r\n emit('update:modelValue', [clampedValue, currentMax])\r\n } else {\r\n // Don't let max go below min\r\n const clampedValue = Math.max(newValue, currentMin)\r\n emit('update:modelValue', [currentMin, clampedValue])\r\n }\r\n}\r\n\r\nconst handleMouseDown = (handle: 'min' | 'max') => (event: MouseEvent) => {\r\n if (props.disabled) return\r\n event.preventDefault()\r\n dragging.value = handle\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n if (dragging.value) {\r\n const value = getValueFromPosition(e.clientX)\r\n updateValue(dragging.value, value)\r\n }\r\n }\r\n\r\n const handleMouseUp = () => {\r\n dragging.value = null\r\n document.removeEventListener('mousemove', handleMouseMove)\r\n document.removeEventListener('mouseup', handleMouseUp)\r\n }\r\n\r\n document.addEventListener('mousemove', handleMouseMove)\r\n document.addEventListener('mouseup', handleMouseUp)\r\n}\r\n\r\nconst handleTrackClick = (event: MouseEvent) => {\r\n if (props.disabled) return\r\n\r\n const value = getValueFromPosition(event.clientX)\r\n\r\n // Determine which handle to move based on proximity\r\n const distToMin = Math.abs(value - minValue.value)\r\n const distToMax = Math.abs(value - maxValue.value)\r\n\r\n if (distToMin <= distToMax) {\r\n updateValue('min', value)\r\n } else {\r\n updateValue('max', value)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-2\">\r\n <!-- Labels row -->\r\n <div v-if=\"showLabels\" class=\"flex justify-between text-sm font-medium text-gray-700 dark:text-gray-300\">\r\n <span>{{ formatLabel(minValue) }}</span>\r\n <span>{{ formatLabel(maxValue) }}</span>\r\n </div>\r\n\r\n <!-- Slider track -->\r\n <div\r\n ref=\"sliderRef\"\r\n class=\"relative h-2 rounded-full cursor-pointer\"\r\n :class=\"[\r\n disabled\r\n ? 'bg-gray-200 dark:bg-gray-700 cursor-not-allowed'\r\n : 'bg-gray-200 dark:bg-gray-700',\r\n ]\"\r\n @click=\"handleTrackClick\"\r\n >\r\n <!-- Active range -->\r\n <div\r\n class=\"absolute h-full rounded-full\"\r\n :class=\"[disabled ? 'bg-gray-400' : 'bg-primary-500']\"\r\n :style=\"rangeStyle\"\r\n />\r\n\r\n <!-- Min handle -->\r\n <div\r\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-5 rounded-full border-2 shadow transition-shadow\"\r\n :class=\"[\r\n disabled\r\n ? 'bg-gray-300 border-gray-400 cursor-not-allowed'\r\n : 'bg-white border-primary-500 cursor-grab hover:shadow-md active:cursor-grabbing',\r\n dragging === 'min' && 'ring-4 ring-primary-200 dark:ring-primary-800',\r\n ]\"\r\n :style=\"{ left: `${minPercent}%` }\"\r\n @mousedown=\"handleMouseDown('min')\"\r\n />\r\n\r\n <!-- Max handle -->\r\n <div\r\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-5 rounded-full border-2 shadow transition-shadow\"\r\n :class=\"[\r\n disabled\r\n ? 'bg-gray-300 border-gray-400 cursor-not-allowed'\r\n : 'bg-white border-primary-500 cursor-grab hover:shadow-md active:cursor-grabbing',\r\n dragging === 'max' && 'ring-4 ring-primary-200 dark:ring-primary-800',\r\n ]\"\r\n :style=\"{ left: `${maxPercent}%` }\"\r\n @mousedown=\"handleMouseDown('max')\"\r\n />\r\n </div>\r\n\r\n <!-- Min/Max labels -->\r\n <div v-if=\"showMinMax\" class=\"flex justify-between text-xs text-gray-500 dark:text-gray-400\">\r\n <span>{{ formatLabel(min) }}</span>\r\n <span>{{ formatLabel(max) }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed, watch, nextTick } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport { onClickOutside } from '@vueuse/core'\r\nimport { useId } from '@/composables/useId'\r\n\r\nexport interface ComboboxOption {\r\n value: string | number\r\n label: string\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Selected value(s) */\r\n modelValue?: string | number | (string | number)[] | null\r\n /** Available options */\r\n options: ComboboxOption[]\r\n /** Placeholder text */\r\n placeholder?: string\r\n /** Search placeholder */\r\n searchPlaceholder?: string\r\n /** Allow multiple selection */\r\n multiple?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Allow clearing selection */\r\n clearable?: boolean\r\n /** No results message */\r\n noResultsText?: string\r\n /** Input name attribute */\r\n name?: string\r\n /** Input id attribute */\r\n id?: string\r\n /** Teleport target (e.g., 'body', '#app'). Set to false to disable teleport. */\r\n teleport?: string | false\r\n }>(),\r\n {\r\n placeholder: 'Select...',\r\n searchPlaceholder: 'Search...',\r\n multiple: false,\r\n disabled: false,\r\n clearable: false,\r\n noResultsText: 'No results found',\r\n teleport: false,\r\n },\r\n)\r\n\r\n// Generate unique IDs for accessibility\r\nconst { id: generatedId, related } = useId({ prefix: 'combobox', id: props.id })\r\nconst inputId = computed(() => props.id ?? generatedId.value)\r\nconst listboxId = computed(() => related('listbox'))\r\n\r\nconst teleportDisabled = computed(() => props.teleport === false)\r\nconst teleportTarget = computed(() => props.teleport === false ? 'body' : props.teleport)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string | number | (string | number)[] | null]\r\n}>()\r\n\r\nconst containerRef = ref<HTMLElement>()\r\nconst inputRef = ref<HTMLInputElement>()\r\nconst isOpen = ref(false)\r\nconst search = ref('')\r\n\r\nonClickOutside(containerRef, () => {\r\n isOpen.value = false\r\n})\r\n\r\nconst filteredOptions = computed(() => {\r\n if (!search.value) return props.options\r\n const query = search.value.toLowerCase()\r\n return props.options.filter((opt) =>\r\n opt.label.toLowerCase().includes(query)\r\n )\r\n})\r\n\r\nconst selectedOptions = computed(() => {\r\n if (props.modelValue === null || props.modelValue === undefined) return []\r\n const values = Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue]\r\n return props.options.filter((opt) => values.includes(opt.value))\r\n})\r\n\r\nconst displayValue = computed(() => {\r\n if (selectedOptions.value.length === 0) return ''\r\n if (props.multiple) {\r\n return selectedOptions.value.map((o) => o.label).join(', ')\r\n }\r\n return selectedOptions.value[0]?.label || ''\r\n})\r\n\r\nconst isSelected = (option: ComboboxOption): boolean => {\r\n if (props.modelValue === null || props.modelValue === undefined) return false\r\n if (Array.isArray(props.modelValue)) {\r\n return props.modelValue.includes(option.value)\r\n }\r\n return props.modelValue === option.value\r\n}\r\n\r\nconst toggleOption = (option: ComboboxOption) => {\r\n if (option.disabled) return\r\n\r\n if (props.multiple) {\r\n const currentValues = Array.isArray(props.modelValue) ? [...props.modelValue] : []\r\n const index = currentValues.indexOf(option.value)\r\n if (index === -1) {\r\n currentValues.push(option.value)\r\n } else {\r\n currentValues.splice(index, 1)\r\n }\r\n emit('update:modelValue', currentValues)\r\n } else {\r\n emit('update:modelValue', option.value)\r\n isOpen.value = false\r\n search.value = ''\r\n }\r\n}\r\n\r\nconst clear = () => {\r\n emit('update:modelValue', props.multiple ? [] : null)\r\n search.value = ''\r\n}\r\n\r\nconst openDropdown = () => {\r\n if (props.disabled) return\r\n isOpen.value = true\r\n nextTick(() => {\r\n inputRef.value?.focus()\r\n })\r\n}\r\n\r\nwatch(isOpen, (open) => {\r\n if (!open) {\r\n search.value = ''\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"containerRef\"\r\n class=\"relative\"\r\n >\r\n <!-- Trigger -->\r\n <div\r\n role=\"combobox\"\r\n :aria-expanded=\"isOpen\"\r\n :aria-haspopup=\"'listbox'\"\r\n :aria-controls=\"listboxId\"\r\n :class=\"[\r\n 'flex min-h-[42px] w-full cursor-pointer items-center rounded-lg border bg-white px-3 py-2 transition-colors',\r\n 'dark:bg-gray-900',\r\n disabled\r\n ? 'cursor-not-allowed border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800'\r\n : isOpen\r\n ? 'border-primary ring-2 ring-primary/20'\r\n : 'border-gray-300 hover:border-gray-400 dark:border-gray-600 dark:hover:border-gray-500',\r\n ]\"\r\n @click=\"openDropdown\"\r\n >\r\n <!-- Selected value or placeholder -->\r\n <span\r\n v-if=\"!isOpen\"\r\n :class=\"[\r\n 'flex-1 truncate text-sm',\r\n selectedOptions.length ? 'text-gray-900 dark:text-gray-100' : 'text-gray-400 dark:text-gray-500',\r\n ]\"\r\n >\r\n {{ displayValue || placeholder }}\r\n </span>\r\n\r\n <!-- Search input (when open) -->\r\n <input\r\n v-else\r\n :id=\"inputId\"\r\n ref=\"inputRef\"\r\n v-model=\"search\"\r\n type=\"text\"\r\n :name=\"name\"\r\n :placeholder=\"searchPlaceholder\"\r\n :disabled=\"disabled\"\r\n aria-autocomplete=\"list\"\r\n :aria-controls=\"listboxId\"\r\n class=\"flex-1 border-none bg-transparent text-sm text-gray-900 outline-hidden placeholder:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500\"\r\n @click.stop\r\n />\r\n\r\n <!-- Actions -->\r\n <div class=\"flex items-center gap-1\">\r\n <!-- Clear button -->\r\n <button\r\n v-if=\"clearable && selectedOptions.length > 0 && !disabled\"\r\n type=\"button\"\r\n class=\"rounded p-0.5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\r\n aria-label=\"Clear selection\"\r\n @click.stop=\"clear\"\r\n >\r\n <Icon icon=\"lucide:x\" class=\"size-4\" aria-hidden=\"true\" />\r\n </button>\r\n\r\n <!-- Chevron -->\r\n <Icon\r\n icon=\"lucide:chevron-down\"\r\n :class=\"[\r\n 'size-4 text-gray-400 transition-transform',\r\n isOpen && 'rotate-180',\r\n ]\"\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <Teleport :to=\"teleportTarget\" :disabled=\"teleportDisabled\">\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"transform scale-95 opacity-0\"\r\n enter-to-class=\"transform scale-100 opacity-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"transform scale-100 opacity-100\"\r\n leave-to-class=\"transform scale-95 opacity-0\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n :id=\"listboxId\"\r\n role=\"listbox\"\r\n :aria-label=\"placeholder\"\r\n :aria-multiselectable=\"multiple || undefined\"\r\n class=\"absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-700 dark:bg-gray-900\"\r\n >\r\n <!-- Options -->\r\n <template v-if=\"filteredOptions.length\">\r\n <button\r\n v-for=\"option in filteredOptions\"\r\n :key=\"option.value\"\r\n type=\"button\"\r\n role=\"option\"\r\n :aria-selected=\"isSelected(option)\"\r\n :aria-disabled=\"option.disabled || undefined\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors',\r\n option.disabled\r\n ? 'cursor-not-allowed text-gray-400 dark:text-gray-500'\r\n : isSelected(option)\r\n ? 'bg-primary/10 text-primary dark:bg-primary/20'\r\n : 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800',\r\n ]\"\r\n @click=\"toggleOption(option)\"\r\n >\r\n <!-- Checkbox for multiple -->\r\n <span\r\n v-if=\"multiple\"\r\n :class=\"[\r\n 'flex size-4 items-center justify-center rounded border',\r\n isSelected(option)\r\n ? 'border-primary bg-primary text-white'\r\n : 'border-gray-300 dark:border-gray-600',\r\n ]\"\r\n aria-hidden=\"true\"\r\n >\r\n <Icon v-if=\"isSelected(option)\" icon=\"lucide:check\" class=\"size-3\" />\r\n </span>\r\n\r\n <!-- Label -->\r\n <span class=\"flex-1\">{{ option.label }}</span>\r\n\r\n <!-- Check for single -->\r\n <Icon\r\n v-if=\"!multiple && isSelected(option)\"\r\n icon=\"lucide:check\"\r\n class=\"size-4 text-primary\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </template>\r\n\r\n <!-- No results -->\r\n <div\r\n v-else\r\n class=\"px-3 py-2 text-center text-sm text-gray-500 dark:text-gray-400\"\r\n role=\"status\"\r\n >\r\n {{ noResultsText }}\r\n </div>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n"],"names":["_createElementBlock","_renderSlot","_useModel","_withDirectives","_openBlock","_mergeProps","$attrs","_hoisted_1","useId","computed","ref","useDropdown","nextTick","index","watch","_createElementVNode","_unref","_hoisted_3","_toDisplayString","_createVNode","Icon","_createBlock","_Teleport","_Transition","_normalizeClass","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_Fragment","_renderList","_hoisted_10","_hoisted_11","FormLabel","FormSelect","$props","FormInput","FormHelp","_hoisted_2","_hoisted_4","_hoisted_9","_withModifiers","_normalizeStyle","onClickOutside"],"mappings":"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"}
@@ -80,7 +80,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
80
80
  "aria-invalid": props.invalid || void 0,
81
81
  "aria-required": props.required || void 0,
82
82
  "aria-describedby": props.describedBy || void 0,
83
- class: "mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 placeholder-gray-400 shadow-sm user-invalid:border-red-500 user-invalid:text-red-600 focus:border-primary focus:ring-1 focus:ring-primary focus:outline-none focus:user-invalid:border-red-500 focus:user-invalid:ring-red-500 disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 disabled:shadow-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200 dark:placeholder-gray-500 dark:focus:border-primary dark:focus:ring-primary dark:disabled:border-gray-800 dark:disabled:bg-gray-950 dark:disabled:text-gray-500"
83
+ class: "mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 placeholder-gray-400 shadow-sm user-invalid:border-red-500 user-invalid:text-red-600 focus:border-primary focus:ring-1 focus:ring-primary focus:outline-hidden focus:user-invalid:border-red-500 focus:user-invalid:ring-red-500 disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 disabled:shadow-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200 dark:placeholder-gray-500 dark:focus:border-primary dark:focus:ring-primary dark:disabled:border-gray-800 dark:disabled:bg-gray-950 dark:disabled:text-gray-500"
84
84
  }, _ctx.$attrs), null, 16, _hoisted_1$b)), [
85
85
  [vModelDynamic, modelValue.value]
86
86
  ]);
@@ -277,7 +277,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
277
277
  "aria-label": __props.placeholder || "Select an option",
278
278
  style: normalizeStyle(unref(dropdownStyle)),
279
279
  class: normalizeClass([
280
- "z-[9999] max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800",
280
+ "z-9999 max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800",
281
281
  !__props.teleport && "absolute mt-1 w-full"
282
282
  ])
283
283
  }, [
@@ -293,7 +293,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
293
293
  ref: searchInputRef,
294
294
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
295
295
  type: "text",
296
- class: "flex-1 bg-transparent text-sm outline-none dark:text-white",
296
+ class: "flex-1 bg-transparent text-sm outline-hidden dark:text-white",
297
297
  placeholder: "Search...",
298
298
  "aria-label": "Search options",
299
299
  onKeydown: handleKeydown
@@ -451,7 +451,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
451
451
  return openBlock(), createElementBlock("div", _hoisted_1$8, [
452
452
  createVNode(unref(Icon), {
453
453
  icon: __props.icon,
454
- class: "absolute top-1/2 left-3 h-5 w-5 -translate-y-1/2 text-gray-400"
454
+ class: "absolute top-1/2 left-3 size-5 -translate-y-1/2 text-gray-400"
455
455
  }, null, 8, ["icon"]),
456
456
  createElementVNode("input", {
457
457
  disabled: __props.disabled,
@@ -522,7 +522,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
522
522
  "aria-describedby": __props.description ? descriptionId.value : void 0,
523
523
  disabled: __props.disabled,
524
524
  class: normalizeClass([
525
- "relative inline-flex shrink-0 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
525
+ "relative inline-flex shrink-0 items-center rounded-full transition-colors focus:outline-hidden focus:ring-2 focus:ring-primary focus:ring-offset-2",
526
526
  switchSizes[__props.size],
527
527
  __props.modelValue ? "bg-primary" : "bg-gray-300 dark:bg-gray-600"
528
528
  ]),
@@ -829,7 +829,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
829
829
  "aria-modal": "true",
830
830
  "aria-label": `Choose date, ${monthYear.value}`,
831
831
  style: normalizeStyle(unref(dropdownStyle)),
832
- class: "z-[9999] w-72 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
832
+ class: "z-9999 w-72 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
833
833
  }, [
834
834
  createElementVNode("div", _hoisted_6$3, [
835
835
  createElementVNode("button", {
@@ -884,7 +884,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
884
884
  "aria-disabled": day.isDisabled || void 0,
885
885
  disabled: day.isDisabled,
886
886
  class: normalizeClass([
887
- "h-8 w-8 rounded text-sm transition",
887
+ "size-8 rounded text-sm transition",
888
888
  day.isDisabled && "cursor-not-allowed opacity-30",
889
889
  !day.isCurrentMonth && "text-gray-400 dark:text-gray-600",
890
890
  day.isCurrentMonth && !day.isSelected && !day.isToday && "text-gray-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-700",
@@ -1080,7 +1080,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1080
1080
  createElementVNode("div", _hoisted_3$4, [
1081
1081
  createVNode(unref(Icon), {
1082
1082
  icon: "heroicons:cloud-arrow-up",
1083
- class: normalizeClass(["w-12 h-12 mx-auto text-gray-400", { "text-primary-500": isDragging.value }])
1083
+ class: normalizeClass(["size-12 mx-auto text-gray-400", { "text-primary-500": isDragging.value }])
1084
1084
  }, null, 8, ["class"]),
1085
1085
  createElementVNode("p", _hoisted_4$2, toDisplayString(__props.label), 1),
1086
1086
  __props.description ? (openBlock(), createElementBlock("p", _hoisted_5$2, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
@@ -1095,7 +1095,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1095
1095
  }, [
1096
1096
  createVNode(unref(Icon), {
1097
1097
  icon: getFileIcon(uploadedFile.file),
1098
- class: "w-8 h-8 text-gray-400"
1098
+ class: "size-8 text-gray-400"
1099
1099
  }, null, 8, ["icon"]),
1100
1100
  createElementVNode("div", _hoisted_8$1, [
1101
1101
  createElementVNode("p", _hoisted_9, toDisplayString(uploadedFile.file.name), 1),
@@ -1108,7 +1108,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1108
1108
  }, [
1109
1109
  createVNode(unref(Icon), {
1110
1110
  icon: "heroicons:x-mark",
1111
- class: "w-5 h-5"
1111
+ class: "size-5"
1112
1112
  })
1113
1113
  ], 8, _hoisted_11)
1114
1114
  ]);
@@ -1150,11 +1150,11 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1150
1150
  const sizeClasses = computed(() => {
1151
1151
  switch (props.size) {
1152
1152
  case "sm":
1153
- return "w-4 h-4";
1153
+ return "size-4";
1154
1154
  case "lg":
1155
- return "w-8 h-8";
1155
+ return "size-8";
1156
1156
  default:
1157
- return "w-6 h-6";
1157
+ return "size-6";
1158
1158
  }
1159
1159
  });
1160
1160
  const getStarState = (index) => {
@@ -1196,7 +1196,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1196
1196
  return openBlock(), createElementBlock("button", {
1197
1197
  key: index,
1198
1198
  type: "button",
1199
- class: normalizeClass(["relative focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1 rounded", [
1199
+ class: normalizeClass(["relative focus:outline-hidden focus:ring-2 focus:ring-primary-500 focus:ring-offset-1 rounded", [
1200
1200
  __props.readonly || __props.disabled ? "cursor-default" : "cursor-pointer",
1201
1201
  __props.disabled && "opacity-50"
1202
1202
  ]]),
@@ -1319,13 +1319,13 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1319
1319
  onClick: togglePicker
1320
1320
  }, [
1321
1321
  createElementVNode("span", {
1322
- class: "w-6 h-6 rounded border border-gray-200 dark:border-gray-600",
1322
+ class: "size-6 rounded border border-gray-200 dark:border-gray-600",
1323
1323
  style: normalizeStyle({ backgroundColor: __props.modelValue })
1324
1324
  }, null, 4),
1325
1325
  createElementVNode("span", _hoisted_4$1, toDisplayString(__props.modelValue), 1),
1326
1326
  createVNode(unref(Icon), {
1327
1327
  icon: "heroicons:chevron-down",
1328
- class: normalizeClass(["w-4 h-4 text-gray-400", { "rotate-180": isOpen.value }])
1328
+ class: normalizeClass(["size-4 text-gray-400", { "rotate-180": isOpen.value }])
1329
1329
  }, null, 8, ["class"])
1330
1330
  ], 10, _hoisted_3$2),
1331
1331
  (openBlock(), createBlock(Teleport, {
@@ -1352,7 +1352,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1352
1352
  return openBlock(), createElementBlock("button", {
1353
1353
  key: color,
1354
1354
  type: "button",
1355
- class: normalizeClass(["w-8 h-8 rounded-lg border-2 transition-transform hover:scale-110 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1", [
1355
+ class: normalizeClass(["size-8 rounded-lg border-2 transition-transform hover:scale-110 focus:outline-hidden focus:ring-2 focus:ring-primary-500 focus:ring-offset-1", [
1356
1356
  __props.modelValue === color ? "border-primary-500 ring-2 ring-primary-500 ring-offset-1" : "border-transparent"
1357
1357
  ]]),
1358
1358
  style: normalizeStyle({ backgroundColor: color }),
@@ -1362,7 +1362,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1362
1362
  __props.modelValue === color ? (openBlock(), createBlock(unref(Icon), {
1363
1363
  key: 0,
1364
1364
  icon: "heroicons:check",
1365
- class: normalizeClass(["w-4 h-4 mx-auto", [
1365
+ class: normalizeClass(["size-4 mx-auto", [
1366
1366
  ["#ffffff", "#f9fafb", "#f3f4f6", "#e5e7eb", "#eab308", "#f59e0b"].includes(color) ? "text-gray-800" : "text-white"
1367
1367
  ]])
1368
1368
  }, null, 8, ["class"])) : createCommentVNode("", true)
@@ -1373,7 +1373,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1373
1373
  createElementVNode("input", {
1374
1374
  type: "color",
1375
1375
  value: __props.modelValue,
1376
- class: "w-8 h-8 rounded cursor-pointer border-0 p-0",
1376
+ class: "size-8 rounded cursor-pointer border-0 p-0",
1377
1377
  onInput: handleNativeInput
1378
1378
  }, null, 40, _hoisted_8),
1379
1379
  withDirectives(createElementVNode("input", {
@@ -1506,7 +1506,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1506
1506
  style: normalizeStyle(rangeStyle.value)
1507
1507
  }, null, 6),
1508
1508
  createElementVNode("div", {
1509
- class: normalizeClass(["absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-5 h-5 rounded-full border-2 shadow transition-shadow", [
1509
+ class: normalizeClass(["absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-5 rounded-full border-2 shadow transition-shadow", [
1510
1510
  __props.disabled ? "bg-gray-300 border-gray-400 cursor-not-allowed" : "bg-white border-primary-500 cursor-grab hover:shadow-md active:cursor-grabbing",
1511
1511
  dragging.value === "min" && "ring-4 ring-primary-200 dark:ring-primary-800"
1512
1512
  ]]),
@@ -1514,7 +1514,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1514
1514
  onMousedown: _cache[0] || (_cache[0] = ($event) => handleMouseDown("min"))
1515
1515
  }, null, 38),
1516
1516
  createElementVNode("div", {
1517
- class: normalizeClass(["absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-5 h-5 rounded-full border-2 shadow transition-shadow", [
1517
+ class: normalizeClass(["absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-5 rounded-full border-2 shadow transition-shadow", [
1518
1518
  __props.disabled ? "bg-gray-300 border-gray-400 cursor-not-allowed" : "bg-white border-primary-500 cursor-grab hover:shadow-md active:cursor-grabbing",
1519
1519
  dragging.value === "max" && "ring-4 ring-primary-200 dark:ring-primary-800"
1520
1520
  ]]),
@@ -1669,7 +1669,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1669
1669
  disabled: __props.disabled,
1670
1670
  "aria-autocomplete": "list",
1671
1671
  "aria-controls": listboxId.value,
1672
- class: "flex-1 border-none bg-transparent text-sm text-gray-900 outline-none placeholder:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500",
1672
+ class: "flex-1 border-none bg-transparent text-sm text-gray-900 outline-hidden placeholder:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500",
1673
1673
  onClick: _cache[1] || (_cache[1] = withModifiers(() => {
1674
1674
  }, ["stop"]))
1675
1675
  }, null, 8, _hoisted_2)), [
@@ -1685,14 +1685,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1685
1685
  }, [
1686
1686
  createVNode(unref(Icon), {
1687
1687
  icon: "lucide:x",
1688
- class: "h-4 w-4",
1688
+ class: "size-4",
1689
1689
  "aria-hidden": "true"
1690
1690
  })
1691
1691
  ])) : createCommentVNode("", true),
1692
1692
  createVNode(unref(Icon), {
1693
1693
  icon: "lucide:chevron-down",
1694
1694
  class: normalizeClass([
1695
- "h-4 w-4 text-gray-400 transition-transform",
1695
+ "size-4 text-gray-400 transition-transform",
1696
1696
  isOpen.value && "rotate-180"
1697
1697
  ]),
1698
1698
  "aria-hidden": "true"
@@ -1737,7 +1737,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1737
1737
  __props.multiple ? (openBlock(), createElementBlock("span", {
1738
1738
  key: 0,
1739
1739
  class: normalizeClass([
1740
- "flex h-4 w-4 items-center justify-center rounded border",
1740
+ "flex size-4 items-center justify-center rounded border",
1741
1741
  isSelected(option) ? "border-primary bg-primary text-white" : "border-gray-300 dark:border-gray-600"
1742
1742
  ]),
1743
1743
  "aria-hidden": "true"
@@ -1745,14 +1745,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1745
1745
  isSelected(option) ? (openBlock(), createBlock(unref(Icon), {
1746
1746
  key: 0,
1747
1747
  icon: "lucide:check",
1748
- class: "h-3 w-3"
1748
+ class: "size-3"
1749
1749
  })) : createCommentVNode("", true)
1750
1750
  ], 2)) : createCommentVNode("", true),
1751
1751
  createElementVNode("span", _hoisted_6, toDisplayString(option.label), 1),
1752
1752
  !__props.multiple && isSelected(option) ? (openBlock(), createBlock(unref(Icon), {
1753
1753
  key: 1,
1754
1754
  icon: "lucide:check",
1755
- class: "h-4 w-4 text-primary",
1755
+ class: "size-4 text-primary",
1756
1756
  "aria-hidden": "true"
1757
1757
  })) : createCommentVNode("", true)
1758
1758
  ], 10, _hoisted_5);
@@ -1782,4 +1782,4 @@ export {
1782
1782
  _sfc_main$1 as k,
1783
1783
  _sfc_main as l
1784
1784
  };
1785
- //# sourceMappingURL=Combobox.vue_vue_type_script_setup_true_lang-DCLKWzhc.js.map
1785
+ //# sourceMappingURL=Combobox.vue_vue_type_script_setup_true_lang-DKDJV0Ey.js.map